compileSdkVersion, minSdkVersion 和 targetSdkVersion詳解


API level

API level是一個整數,它指的是我們使用的框架(Framework)的版本,也就是我們使用的sdk中的各個平台下的android.jar。
但是這個API level又和Android系統的版本有着對應關系,並且每個系統都會在內部記錄它所使用的API level。
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#provisional

compileSdkVersion(Eclipse中叫做build target)

1.在eclipse中位於項目根目錄中的project.properties文件中
2.在studio中位於項目中的build.gradle中
作用:用哪個 Android SDK 版本編譯你的應用
強烈推薦總是使用最新的 SDK 進行編譯(默認就是最新的)
修改 compileSdkVersion 不會改變運行時的行為。當你修改了 compileSdkVersion 的時候,可能會出現新的編譯警告、編譯錯誤,
但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用。
注意:如果使用 Support Library ,那么使用最新發布的 Support Library 就需要使用最新的 SDK 編譯。

minSdkVersion

指明應用程序運行所需的最小API level。如果不指明的話,默認是1。也就是說該應用兼容所有的android版本。我們應該總是聲明這個屬性。
如果系統的API level低於android:minSdkVersion設定的值,那么android系統會阻止用戶安裝這個應用
如果指明了這個屬性,並且在項目中使用了高於這個API level的API, 那么會在編譯時報錯。(下面會講解解決方法)
請記住:你所使用的庫,如 Support Library 或 Google Play services,可能有他們自己的 minSdkVersion 。你的應用設置的 
minSdkVersion 必需大於等於這些庫的 minSdkVersion 。

targetSdkVersion

targetSdkVersion 是 Android 提供向前兼容的主要依據
將 target 更新為最新的 SDK 是所有應用都應該優先處理的事情。但這不意味着你一定要使用所有新引入的功能,也不意味着你可以不
做任何測試就盲目地更新 targetSdkVersion ,請一定在更新 targetSdkVersion 之前做測試!
如果平台的API Level高於你的應用程序中的targetSdkVersion屬性指定的值,系統會開啟兼容行為來確保你的應用程序繼續以期望的
形式來運行。你可以通過指定targetSdkVersion來匹配運行程序的平台的 API level來禁用這種兼容性行為。舉例來說,設置這個值為11
或更高,當你的應用運行在Android3.0或更高的系統上時,系統會為你的應用使用新的默認主題(Holo主題),並且當運行在大屏幕的設
備上時會禁用屏幕兼容模式(screen compatibility mode),因為支持了 API level 11就暗示了支持大屏幕。

Android 高版本API方法在低版本系統上的兼容性處理

1.用@TargeApi($API_LEVEL) 使可以編譯通過, 不建議使用@SuppressLint("NewApi");
區別:
@SuppressLint("NewApi")屏蔽一切新api中才能使用的方法報的android lint錯誤
@TargetApi() 只屏蔽某一新api中才能使用的方法報的android lint錯誤
舉個例子,某個方法中使用了api9新加入的方法,而項目設置的android:minSdkVersion=8,此時在方法上加@SuppressLint("NewApi")
和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情況。
而當你在此方法中又引用了一個api11才加入的方法時,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又報錯了,而
@SuppressLint("NewApi")不會報錯,這就是區別。
2.判斷運行時版本,在低版本系統不調用此方法,同時為了保證功能的完整性,需要提供低版本功能實現
例如:
public class MainActivity extends AppCompatActivity {
   private  AlertDialog.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //如果API level大於11 大於11的時候能夠指定主體
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
             builder = new AlertDialog.Builder(this,
                    AlertDialog.THEME_HOLO_LIGHT);

        }else {
             builder = new AlertDialog.Builder(this);

        }
        builder.setItems(new String[] { "拍照","選擇" },
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        builder.setTitle("選擇照片");
        builder.create().show();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM