您的位置:首页 > 其它

compileSdkVersion, minSdkVersion 和 targetSdkVersion的选择

2016-11-21 16:55 363 查看

compileSdkVersion

指定apk编译时的用的哪个 Android SDK 版本, compileSdkVersion 不会改变apk运行时的行为,不会被编译到 APK 中:它只是在编译的时候使用。

minSdkVersion

apk只能运行在版本>=minSdkVersion的Android手机上,其中v4和v7包的 minSdkVersion 分别是 4和7 ,也就是说v4包只能在API 4以上的手机上才能运行,所以你的应用的minSdkVersion要>=4

targetSdkVersion

targetSdkVersion 是 Android 提供向前兼容的主要依据(md,什么意思啊),先看代码理解一下吧,源码来自AlarmManager.java,compileSdkVersion = 23

private final boolean mAlwaysExact;
private final int mTargetSdkVersion;

/**
* package private on purpose
*/
AlarmManager(IAlarmManager service, Context ctx) {
mService = service;

mTargetSdkVersion = ctx.getApplicationInfo().targetSdkVersion;
mAlwaysExact = (mTargetSdkVersion < Build.VERSION_CODES.KITKAT);
}

private long legacyExactLength() {
return (mAlwaysExact ? WINDOW_EXACT : WINDOW_HEURISTIC);
}

...

public void set(int type, long triggerAtMillis, PendingIntent operation) {
setImpl(type, triggerAtMillis, legacyExactLength(), 0, 0, operation, null, null);
}

private void setImpl(int type, long triggerAtMillis, long windowMillis, long intervalMillis,
int flags, PendingIntent operation, WorkSource workSource, AlarmClockInfo alarmClock) {
if (triggerAtMillis < 0) {
/* NOTYET
if (mAlwaysExact) {
// Fatal error for KLP+ apps to use negative trigger times
throw new IllegalArgumentException("Invalid alarm trigger time "
+ triggerAtMillis);
}
*/
triggerAtMillis = 0;
}

try {
mService.set(type, triggerAtMillis, windowMillis, intervalMillis, flags, operation,
workSource, alarmClock);
} catch (RemoteException ex) {
}
}


代码中可以看出当targetSdkVersion小于19时windowMillis = WINDOW_EXACT, 而大于等于19时windowMillis = WINDOW_HEURISTIC。也就是说当targetSdkVersion<19的时候,及时手机android版本>19,也不会运行最新的api。

即在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化

这里再多说一嘴,都知道android6.0后,是运行时权限,但是想要实现运行时权限需要满足下面两个条件:

android版本6.0以上的手机

targetSdkVersion更新到23以上

support 路径以及版本号

D:\AppData\Local\Android\sdk\extras\android\m2repository\com\android\support
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: