Android逆向學習02
今天遇到的問題是,把別的代碼導入到現有的AS中,由于別的地方的代碼中使用的SDK和build-tools版本,與現在AS中已裝的SDK和build-tools版本不一致,導致一致有錯誤。
查看自己AS裝的SDK的版本

查看build-tools的版本

在gradle中查看導入的代碼使用的SDK和build-tools版本。
gradle:是一個工具,同時它也是一個編程框架。使用這個工具可以完成app的編譯打包等工作;

compileSDKVersion屬性值,定義程序編譯選擇哪個Android SDK版本進行檢查和警告,
compileSdkVersion顧名思義,就是用來編譯源代碼所使用的 API 版本。
也就是說在寫代碼的時候,所引入的 android.jar 的版本。這個只是編譯期間使用,并不是真實設備上運行 APK 的 API Version。
現在我們導入到AS中,發現我的電腦上只有SDK28,并且這個版本的hello函數已經沒有了,變成了hello(parm,parm1),那么就會導致編譯不通過。
targetSdkVersion代表著目標版本,在編譯的時候會將該版本的api編譯進apk中。
compileSdkVersion代表著編譯的時候,會采用該api的規范進行代碼檢查和警告,但是并不會編譯進apk中。
為什么 compileSdkVersion 并不會影響真實運行的 API Version 呢,因為 android.jar 只是為了讓我們寫的代碼能夠成功生成 class 文件,真實運行的其實是設備上 的 ROM 包,我們可以看到 android.jar 有很多類其實就只是一個空方法,并沒有具體的實現
buildToolsVersion
顧名思義,就是構建工具的版本。所謂的構建工具其實就是指我們 sdk 下面的 build-tools 目錄。
這個 build-tools 里面包含了我們打包構建所需要的一些工具,比如:
- aapt: Android Asset Packaging Tool,也就是資源打包工具,將資源文件打包成 R.java 以及 .arsc資源文件
- aidl: 將 aidl 文件 編譯為 java 接口類
- dx: 將 class 文件打包成 dex 文件
- apksigner: 將 打包成的 apk 文件進行簽名
- zipalign: 將 簽名后的 apk 文件進行 zip 對齊,加快訪問速度
buildToolsVersion 就是指定這些構建工具的版本
targetSdkVersion
targetSdkVersion 是 Android 系統提供前向兼容的主要手段。隨著 Android 系統的升級,某個系統的 API 或者模塊的行為可能會發生改變,但是為了保證老 APK 的行為還是和以前兼容。只要 APK 的 targetSdkVersion 不變,即使這個 APK 安裝在新 Android 系統上,其行為還是保持老的系統上的行為,這樣就保證了系統對老應用的前向兼容性。
比如有個API在SDK1.0的時候,是一個樣子
到了SDK2.0的時候, google 對這個API方法更新了,為了保持兼容性,
就可以在使用的時候,先判斷配置的 targetSdkVersion,如果這個版本比較新大于等于 當前的SDK2.0,就調用新的打印方法,否則就用舊的打印方式。
遇到的另一個問題:
AS---->Build---->Make Project 會生成APK,



浙公網安備 33010602011771號