compileSdkVersion,minSdkVersion 和 targetSdkVersion
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();
}
}
compileSdkVersion,minSdkVersion 和 targetSdkVersion的更多相关文章
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
对这几个概念模模糊糊,看到一篇文章就记录下来. 当你发布一个应用之后,(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本.这对你的应用意味着什么,所有东西都不能用了?别担心 ...
- Android之 compileSdkVersion, minSdkVersion, and targetSdkVersion
在一年之中,也有可能只是几个月后,你会发布你的Android应用程序.但是这中间有可能会发布新的版本的Android系统,比如:6.0+. 你肯定希望你的应用可以向前兼容,当用户升级到新的Androi ...
- compileSdkVersion, minSdkVersion 和 targetSdkVersion的选择(copy)
英文原文:Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion 作者:Ian Lake,Google Android ...
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
API level API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和An ...
- Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 (转载)
本文参考了谷歌开发者文档:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#provisional 如果 ...
- Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分
Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分 标签: build targetminSdkVersiont ...
- Android的minSdkVersion,targetSdkVersion,maxSdkVersion
参考http://developer.android.com/guide/topics/manifest/uses-sdk-element.html API Level 是一个整型值,表示Androi ...
- Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分
问题引入: 有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%. 问题排查发现,是sdk的target设置为23导致,修改为21则 ...
- 彻底明确怎样设置minSdkVersion和targetSdkVersion
minSdkVersion和targetSdkVersion相信非常多人都不太理解.我在网上也看了很多关于这两者差别的文章,感觉说的都非常模糊.直到我在stackOverFlow看到Android M ...
随机推荐
- 做错的题目——给Array附加属性
- TODO monkey笔记,PC端执行和手机端执行
微博不给力啊 吞我笔记,还好我有txt... 1.环境准备:安装Android sdk, 配置环境变量:platfrom_tools,tools,aapt;java:2.查询当前apk信息: aapt ...
- 以太网 ------ Auto-Negotiation(自动协商)
说起自动协商(Auto-negotiation),我想很多人都不会陌生.当你把你PC机器上的网卡通过一段双绞线连接到某个交换机的某个端口的时候,如果你的网卡和交换机都支持自动协商功能的话,一件有趣的事 ...
- vbox的桥接网络
直接连接到了外网上,宿主机可以访问虚拟机,但是虚拟机不可以访问宿主机.缺点:宿主机没有网络时,将不能ping通. 宿主机:win10 网络:无线 虚拟机系统:centos6.5 vbox版本:6.0. ...
- qml: 自定义输入框
import QtQuick 2.7 Rectangle { width:; height:; border.width:; border.color: "#E7E7E7" rad ...
- CentOS 6.5 64位 安装Nginx, MySQL, PHP
此篇文章参考了一些网站找的教程,自己遇到了很多坑,写一下自己的安装全过程. 服务器是腾讯云的.安装了centos 6.5系统. 一. 安装Nginx 1.首先安装GCC,make,C++编译器 yum ...
- data_type
import logging logger = logging.getLogger("simple_example") logger.setLevel(logging.DEBUG) ...
- tmux用法【常用】
类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括: Ctrl+b 激活控制台:此时以下按键生效 系统操作 ? 列出所有快捷键:按q返回 d 脱离当前会话:这样可以暂时返回Shell界面, ...
- PHP7 网络编程(一)多进程初探
准备 我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守 ...
- 获取ArcMap窗口句柄,通过WinAPI获取工作空间中点击要素的系统桌面坐标实现窗体跟随
这里用了个“桌面坐标”,是希望区分一下ArcGis的“屏幕坐标”(与之对应的还有一个“地理坐标”). 什么是“屏幕坐标”呢?使用ITool接口的OnMouseDown方法获取的“x,y”值即是,其原点 ...