Android中的targetsdkversioin
對於Android初學開發者來說,
可能會好奇 targetsdkversioin這個配置是用來幹嘛的。
也有很多一兩年開發經驗的 Android碼農會在面試中被問到這個問題。
Api Level是個什麼東西?
Android的api在版本間變化可能非常大,
有時候一個 api在低版本支援,到了高版本就被刪除了。
可以在 develop網站上看到 api level對應的 Android版本,
xxx.jpg
舉個例子,Activity.getActionBar()
xxxx.jpg
可以看到 api level 11,也就是說3.0之前是沒有這個api的,
3.0之前的機器執行不了用了這個api的app。
targetsdkversioin
以上面 getActionBar()的例子來說,
我們的app現在可以指定 targetsdkversioin = 11,
這意味著安裝時會通知系統,開發者已經在 3.0系統上測試過沒問題,
如果安裝的系統 api level高於11,則會開啟相容模式來執行app。
就像 Android 6.0引入的動態許可權申請,
如果你把 targetsdkversioin定位比6.0低的 api level的話,
其實是不需要動態去申請許可權,
在app安裝時,系統會以相容模式預設開啟這些許可權。
然而問題在於,
設定 targetsdkversioin = 21(比如5.0對應的 api level 21),
意味著向系統表明我們只在 5.0系統測試過,
如果是執行在6.0的機器而使用者手動關掉所需要的許可權的話,
我們的應用是會崩潰的,系統並不會幫我們處理掉相容性的問題。
@TargetApi
和 targetsdkversioin相對應的還有 @TargetApi這個註解,
還是以上 getActionBar()為例子來說明
如果我們預期app可以執行在 api level < 11的機器上,
而因為UI設計或者其他原因,非要用 getActionBar()方法的時候,
@TargetApi就有作用了
對於這種情況,
通常會在程式碼中用 Build.VERSION.SDK_INIT 來判斷,比如下面的程式碼,
if(Build.VERSION.SDK_INIT > 10) {
....
goWithActionBar();
} else {
....
}
@TargetApi(11)
public void goWithActionBar(){
....
}
這意味著 goWithActionBar()這個方法是在 api level以上可以使用的,
不加這個註解的話,編譯系統會提示相容性錯誤而導致編譯不過,
因此 @TargetApi主要是用來抑制編譯時的相容性問題的。
更多Android進階技術,面試資料系統整理分享,職業生涯規劃,產品,思維,行業觀察,談天說地。可以加Android架構師群;701740775。
相關文章
- Android中的NotificationAndroid
- Android中的VectorAndroid
- android中的ListViewAndroidView
- Android中的RecyclerViewAndroidView
- Android中的intentAndroidIntent
- android中的ViewPageAndroidView
- Android中的AOPAndroid
- Android中的BitmapAndroid
- Android中的ClassLoaderAndroid
- Android 中的 WindowAndroid
- Android解析ClassLoader(二)Android中的ClassLoaderAndroid
- Android進階(七)Android中的ClassLoaderAndroid
- Android中的Web ServiceAndroidWeb
- 聊聊Android中的ContextImplAndroidContext
- Android中SearchView的使用AndroidView
- Android中的分割線Android
- Android中的icon適配Android
- Android中的廣播使用Android
- Android程式中的時間Android
- Android中的ANR簡述Android
- Android中的懸浮框Android
- Cordova在Android中的使用Android
- Android面試題之Android中的設計模式Android面試題設計模式
- Android中的LruCache的原理和使用Android
- Android Studio在android Emulator中執行的專案黑屏Android
- Android 9.0中的新功能 - PrecomputedTextAndroid
- Android中Handler的正確使用Android
- android 中感測器的使用Android
- Android中的執行緒池Android執行緒
- Android中Lottie的簡單使用Android
- Android 中的特殊攻擊面Android
- Android中佈局的優化Android優化
- Android中WebView的使用指南:AndroidWebView
- Android 開發中的SSL pinningAndroid
- Android 中 WebView 的除錯方法AndroidWebView除錯
- Android中Retrofit的封裝使用Android封裝
- Android外掛化的相容性(中):Android P的適配Android
- Android中MediaRecorderAndroid