compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
来源:互联网 发布:网络代理打鱼怎么判 编辑:程序博客网 时间:2024/05/22 05:37
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(); }}
阅读全文
0 0
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
- compileSdkVersion、minSdkVersion、targetSdkVersion详解
- compileSdkVersion, minSdkVersion 和 targetSdkVersion
- minSdkVersion、compileSdkVersion和targetSdkVersion
- AndroidStudio --> compileSdkVersion, minSdkVersion 和 targetSdkVersion
- compileSdkVersion、buildToolsVersion、minSdkVersion和targetSdkVersion比较
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- E
- 对于vector初始化的问题
- 媒体元素
- [Leetcode] 306. Additive Number 解题报告
- linux 环境下 java环境安装(1.8 以上 solr需要)
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
- Springboot Redis分布式集群(1)- Linux下redis安装与使用
- 自己动手实现promise
- leetcode 28. Implement strStr()
- jQuery和javascript获取临近节点方法
- hdu 1507 Uncle Tom's Inherited Land*(奇偶建图+最大匹配)
- leetcode--32. Longest Valid Parentheses
- tensorflow/word2evc初步认识
- spring boot(12)-数据源配置原理