compileSdkVersion, minSdkVersion 和 targetSdkVersion的选择

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后,是运行时权限,但是想要实现运行时权限需要满足下面两个条件:

  1. android版本6.0以上的手机

  2. targetSdkVersion更新到23以上


support 路径以及版本号

D:\AppData\Local\Android\sdk\extras\android\m2repository\com\android\support

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值