minSdkVersion:項目支持的最低版本具垫,新的api的發(fā)布總會帶來一些新的特性碉碉,大部分是向前兼容的边苹,但也有不兼容的狱窘,如果手機(jī)的系統(tǒng)低于這個版本是不能運(yùn)行這個APP的杜顺。
targetSdkversion:系統(tǒng)為了兼容舊版本,依然保持在舊版本上的行為效果蘸炸,例如設(shè)置此版本為23則需要對6.0的權(quán)限做適配哑舒,如果小于23則不用,andrid 7.0對 File 的分享啟動了 StrictMode幻馁,當(dāng)你想要通過 file:// 安裝一個私有目錄下的 apk 的時候洗鸵,會拋出FileUriExposedException錯誤,這個時候你就需要使用 Android 提供的 FileProvider 來對此進(jìn)行支持仗嗦。但是這樣重大的改動膘滨,只有在開發(fā)者主動將 targetSdkVersion 升級到 24 才會啟動,如果 targetSdkVersion 沒有被升級稀拐,會依然保持之前的行為效果火邓,并不用擔(dān)心 FileUriExposedException 異常。
compileSdkVersion: 是在開發(fā)和編譯期間德撬,給開發(fā)者使用的铲咨。用于告訴 Gradle ,使用那個 Android SDK 版本來進(jìn)行編譯和打包 App蜓洪,如果需要使用新的 Android SDK 中的 Api纤勒,就需要更新 compileSdkVersion 對應(yīng)的版本號。
而我們知道隆檀,android.jar 并不會被編譯進(jìn) Apk 中摇天,同時 compileSdkVersion 只是改變的編譯行為而不會改變運(yùn)行時的行為,也就是說恐仑,當(dāng) Apk 被安裝在設(shè)備上之后泉坐,它就是直接和系統(tǒng)的 Api 交互了,編譯時候的 android.jar 只是為了保證編譯能通過裳仆。
當(dāng) compileSdkVersion 被修改的時候腕让,可能會出現(xiàn)一些編譯時候的警告和編譯錯誤,這些錯誤應(yīng)該都會被編譯器的 Lint 檢測到歧斟。注意這些并不是 Error 纯丸,而是 Warning 司训。但是這些 Warning 的出現(xiàn)都是有原因的,一定要及時修復(fù)這些 Warning液南,哪怕需要使用@SuppressLint或者@TargetApi進(jìn)行標(biāo)記它壳猜,也只是我們在確定無礙的情況下的一種處理方式。