首页 > 其他分享 >android 打包版本说明

android 打包版本说明

时间:2023-04-21 15:59:06浏览次数:41  
标签:API TARGET PROP VERSION 版本 android 打包 SDK

个人经验之谈, 不对之处,也不用留言,我的知识都是实战中积累,别给我整那么多虚的理论

#编译应用程序所采用的版本
# 人话: 你的安卓包包含什么样的字节码, 不做兼容,可能会崩溃
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

相关文章

  • 【汇智学堂】docker+springboot+mysql之二(springboot打包发送至Ubuntu dockermysql目
    IDEA:DockerfileContent:FROMjava:8VOLUME/tmpADDhellodocker-0.0.1-SNAPSHOT.jar/app.jarRUNsh-c'touch/app.jar'ENVJAVA_OPTS=""ENTRYPOINT["sh","-c","java$JAVA_OPTS-Djava.security.egd=file:/dev/.......
  • python脚本打包与请求带session的区别
    pyinstaller-F-iD:\ico\123.icoXXX.py--key123456如何防止exe被反编译呢只需在打包命令后面加上--key命令即可,例如文章开头的命令可以更换为:pyinstaller-Fw--icon=h.icoauto_organize_gui.py--add-data="h.ico;/"--key123456123456是你用来加密的密钥,可以随......
  • 启动springboot项目指定jdk版本以及设置控制台中文
    代码:@echoofftitle=javaServerchcp936setJAVA_HOME=D:\Tools\JDK8setPATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\binsetCLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;lib/run.jarjava-Dfile.encoding=GBK-Xms64m-Xmx1000......
  • android系统adb对时//京鸿通信/www.kyohoon.com/15507589165
    目录1、远程连接设备2、设置地区3、设置对时服务器4、重启设备5、查看对时服务器是否设置成功1、远程连接设备adbconnectxxx.xxx.xxx.xxx2、设置地区adbshellsetproppersist.sys.timezoneAsia/Shanghai3、设置对时服务器adbshellsettingsputglobalntp_server172.16.......
  • Android性能优化—StrictMode的使用
    原文地址zhuanlan.zhihu.com残枫cps原文地址juejin.cnStrictMode是Android开发过程中一个必不可缺的性能检测工具,他能帮助开发检测出一些不合理的代码块。策略分类StrictMode分为线程策略(ThreadPolicy)和虚拟机策略(VmPolicy)线程策略(ThreadPolicy)线程策略主要包含了以......
  • Android-自定义控件
    原文地址zhuanlan.zhihu.com残枫cps​目录收起framelayout触发覆盖页面的点击事件SurfaceView自定义控件1.构造函数2.测量View大小(onMeasure)注意:3.确定View大小(onSizeChanged)4.确定子View布局位置(onLayout)5.绘制内容(onDraw)Android自定义控件之自定义组合控件前言:使......
  • Sudo 版本升级
    安全漏洞CVE-2021-3156,受影响的Sudo版本:Sudo版本1.7.7到1.7.10p9、1.8.2到1.8.31p2和1.9.0到1.9.5p1受到影响。sudo官网:https://www.sudo.ws/sudo下载地址:https://www.sudo.ws/getting/download/当前升级系统版本Centos7.91.查看本机sudo版本]#sudo......
  • android-开机自启动
    原文地址zhuanlan.zhihu.com残枫cps​目录收起跳过锁屏界面直接显示到界面广播判断包名所对应的应用是否安装在SD卡上获取自启动管理页面的Intent由于安全原因,自2021年开始,所有的EMUI都不再支持"应用启动"设置的意图了Android10(API级别29)及更高版本对后台应用可启......
  • Android-service
    原文地址zhuanlan.zhihu.com残枫cpsService是一种可在后台执行长时间运行操作而不提供界面的应用组件。AndroidServiceAndroidService是组件,既不能说它是单独的进程也不能说它是单独的线程。如果非要从通俗的语言层面来理解的话,姑且将其理解为对象。这个Service对象本......
  • 如何通过Android studio 安装卸载apk
    原文地址zhuanlan.zhihu.com残枫cps​目录收起adb配置安装删除apkadb配置自己在安装AndroidStudio的adb时遇到了配置好了环境变量,在cmd中可以执行adb命令行,而在AndroidStudio中的Terminal中却无法执行,显示adb不是内部或外部命令.一、配置环境变量首先要找到adb.exe的......