minSdkVersion: app運行要求的手機最低安卓版本,比如安卓手機版本是19(安卓4.4),minSdkVersion是21(安卓5.0),那么編譯出來的apk將無法安裝到該手機上
compileSdkVersion :參與編譯的sdk版本,比如想要使用安卓10的5g,需要將compileSdkVersion改為>=29(安卓10),否則無法在代碼當中找到相關api
targetSdkVersion:目標版本,兼容舊版本的api,雖然由compileSdkVersion編譯通過了,但是最終運行到手機上的運行效果(表現形式)由targetSdkVersion決定
targetSdkVersion詳解
- 何時生效?
targetSdkVersion>=xx(安卓手機系統版本)
比如新系統要用andriod6.0的動態權限,要想該部分api生效,那么目標版本targetSdkVersion也需要大于6.0,
-
為何要引入targetSdkVersion?
如果goole在高版本中修改了api,同一方法有了新的代碼邏輯,執行該方法依照原來的條件會報錯,那么如何避免呢?
如果有個引數targetSdkVersion,大于執行新代碼邏輯否則執行舊代碼邏輯,可以想象下andirod里面sdk的偽代碼:
if( getApplicationInfo().targetSdkVersion>26){//26為安卓版本號
//新的API邏輯
}else {
//舊的API邏輯
}
如果開發者要用新版本里的方法(需要對新版本api做適配),則更新targetSdkVerison,這樣運行時就走新版本api的邏輯,如不需要則可用原targetSdkVerison,
-
舉例:
app使用了透明的activity且固定了方向,在Android 8.0版本以下運行正常,當運行在Android 8.0/8.1系統上,直接crash,(Android 8.0/8.1 系統規定了透明的ativity 不能固定方向,否則拋出例外),
如果使用者,更新了手機系統,使用了8.0/8.1以上的,如何避免更新手機系統后app報錯呢?
通過引入目標版本targetSdkVersion來區分同一api在不同系統上的行為,如果目標版本大于8.0那么走新的邏輯,小于走原來邏輯,開發者要使用8.0/8.1該版本的新特性,就需要修改targetSdkVersion,并且做適配避免報錯,
三者聯系
- compileSdkVersion>=targetSdkVersion>minSdkVersion
- 最佳compileSdkVersion=targetSdkVersion>minSdkVersion
參考
https://www.jianshu.com/p/12e42558378a
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/244692.html
標籤:其他
上一篇:微信登錄分享 如何優雅的構建專案
