个人经验之谈, 不对之处,也不用留言,我的知识都是实战中积累,别给我整那么多虚的理论
#编译应用程序所采用的版本
# 人话: 你的安卓包包含什么样的字节码, 不做兼容,可能会崩溃
PROP_COMPILE_SDK_VERSION=31
#应用程序对系统的要求最低21
# 人话:你的应用对设备的最低要求
PROP_MIN_SDK_VERSION=21
#应用程序对系统的要求最高28,这里的最高并不是在29的系统上运行不了,而是使用不了29的新特性。 总之就是设备安卓版本28的时候,就是完美状态
# 人话:什么版本用的人多就设置啥, 项目初期统计不了?那么直接Google查一下最新版,然后大概减1-3个版本, 差不多就行,这个值也没有多么重要
PROP_TARGET_SDK_VERSION=28
# gradle编译工具版本
# 人话:生成apk的工具,包括编译NDK和SDK
PROP_BUILD_TOOLS_VERSION=28.0.3
假设有一个手机,Android版本对应API版本是20, 那么它就装不了安卓包
假设有一个手机,Android版本对应API版本是25, 那么它可以装安卓包, 但是部分API用不了, (指26, 27, 28版本新增的API)
假设有一个手机,Android版本对应API版本是28, 那么它可以装安卓包,并且程序的所有功能都能正常用
假设有一个手机,Android版本对应API版本是31, 那么它可以装安卓包,并且程序的所有功能都能正常用
总结一点,设备的安卓版本低于target版本,也可以用。 需要自己做兼容,没做好兼容可能会闪退了。
设备的安卓版本高于target版本,也可以用,程序员是否要兼容取决编译版本。 这个是有闪退风险的
问题来了,讲了这么多貌似安卓包体运行只跟minSDK 和 targetSDK有关, 那么PROP_COMPILE_SDK_VERSION是个什么玩意?
这个参数确实跟运行没啥关系,但是它却影响你生成安卓包。 如果不设置默认等于PROP_TARGET_SDK_VERSION
如果设置的值低于PROP_TARGET_SDK_VERSION,例如设置27,也可以, 但是你要保证代码里没有28的API,否则程序编译报错, 也就生成apk失败。现在的构建工具貌似禁止低于TARGET_SDK
如果设置的值高于PROP_TARGET_SDK_VERSION,例如设置30,也可以, 但是你要保证代码里最好不要出现29,30版本的API, 如果出现了,要通过
Build.VERSION.SDK_INT做好兼容。 你以为完了,这种情况。 如果不做兼容,在低于30版本的系统会有闪退的风险。
如果没有一定要使用的新版API,我的建议是PROP_COMPILE_SDK_VERSION和PROP_TARGET_SDK_VERSION最好一致。 降低崩溃风险。
反过来分析,其实只要做好兼容,PROP_TARGET_SDK_VERSION的值是啥无所谓, 因为只要能出包,安卓包就可以在大于minSdk的设备上运行了,顶多是没有使用新特性或者运行没有达到最优。
我建议设置PROP_COMPILE_SDK_VERSION的值, 用PROP_MIN_SDK_VERSION到PROP_TARGET_SDK_VERSION直接的每个版本都尝试编译一下,看看有没有编译不通过的。
一般系统都会向下兼容,就怕使用了牛逼的API,但是又在垃圾的设备跑
标签:API,TARGET,PROP,VERSION,版本,android,打包,SDK From: https://www.cnblogs.com/dzqdzq/p/17340656.html