当前位置: 首页 > news >正文

minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析

        minSDK和targetSDK,这两者相当于一个区间。你能够用到targetSDK中最新的API和最酷的新功能,但又需要向后(向下)兼容到minSDK,保证这个区间内的设备都能够正常的执行你的APP。换句话说,想使用Android刚刚推出的新特性,但这对于你的APP又不是必须的。此时就能够做如下处理:

  • targetSDK设置为想使用新特性的SDK版本号;
  • minSDK设置成低版本号保证全部人都能够使用此APP。

eg:假如你想给你的app增加大量的手势操作(sdk 7才引入的),然而这些手势操作能够被Button啊或menu等取代,在这样的情况下,手势操作就是一个额外的加分功能,而不是一个必须的功能,因此你就须要把targetSDK设置为7,把minSDK设置为3(这是举个样例,如今没人还在用这么老的设备了)这样即使是使用老设备的用户也能够用你的app了。

然后你所要做的就是要在代码里推断版本号,假设是大于等于7的版本号中就使用手势操作,小于7的版本号中就使用button等取代,这样使用了新手机的用户就能够体验到你app中酷炫的新功能了。

eg:假设你想给你的项目增加Android 5.0的Material Design,有一些用户可能会升级到5.0而使用到你的新特性,而有一部分用户的手机硬件太老,不支持升级到5.0。那么你就要为他们进行向后(向下)兼容,不至于损失这部分用户,至此APP的targetSDK设置为21。minSDK能够设置为8(不是固定非要这个值)

minSDKVersion
minSdkVersion限制安装application所需要的系统最低版本,低于该版本的系统都不可以安装该application。
同时不能使用该level版本SDK所不具备的API,
例如在minSdkVersion为8的application中调用【this.getActionBar()】
就会出现Call requires API level 11 (current min is 8): android.app.Activity#getActionBar的错误。
这是因为ActionBar是在Android 11才出现的新功能(new API)。
targetSDKVersion
targetSdkVersion是Android提供向前兼容的主要依据,
表明该application已经兼容从minSdkVersion至tartgetSdkVersion之间所有api的变化。
在targetSdkVersion更新之前系统不会应用最新的行为变化。
compileSDKVersion
targetSdkVersion是Android提供向前兼容的主要依据,
表明该application已经兼容从minSdkVersion至tartgetSdkVersion之间所有api的变化。
在targetSdkVersion更新之前系统不会应用最新的行为变化。
三者关系
minSdkVersion <= targetSdkVersion <= compileSdkVersion
理想情况
minSdkVersion (lowest possible) <=targetSdkVersion == compileSdkVersion (latest SDK)理想情况下:用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。
Android主Module与依赖Module之间targetSDKVerion关系
Android项目以主Module的targetSDKVersion为准。也即是说,依赖Module targetSDKVersion的设置是无效的。
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;@Overrideprotected 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.setTitle("选择照片");builder.create().show();}
}

参考文献:

compileSdkVersion, minSdkVersion 和 targetSdkVersion详解

彻底明确怎样设置minSdkVersion和targetSdkVersion-CSDN博客

minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析_android module targetsdkversion-CSDN博客

向原创致敬🫡

相关文章:

  • [Qt] Qt Creator中配置 Vs-Code 编码风格
  • 算法第八天:leetcode 35.搜索插入位置
  • TVBOX 最新版下载+视频源教程
  • 深入理解Java中的并发编程
  • 【LeetCode215】数组中的第K个最大元素
  • 爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
  • Ant-Design-Vue动态表头并填充数据
  • vue3写一个定时器
  • Kantana和The Sandbox联手打造元宇宙娱乐的未来
  • Android开启HTTP服务
  • 微服务必备容器化技术
  • LUA移植到STM32F4,移植REPL,通过RTT Viewer交互
  • GraogGNSSLib学习
  • 医学人工智能在“免疫组化”领域的最新研究进展|顶刊速递·24-06-19
  • 美业人专用宝藏系统、Java收银系统源码分享-美业SAAS系统的应用价值分析
  • @angular/forms 源码解析之双向绑定
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • C++11: atomic 头文件
  • exif信息对照
  • extract-text-webpack-plugin用法
  • java2019面试题北京
  • js正则,这点儿就够用了
  • Python语法速览与机器学习开发环境搭建
  • swift基础之_对象 实例方法 对象方法。
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 突破自己的技术思维
  • 我是如何设计 Upload 上传组件的
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 优秀架构师必须掌握的架构思维
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ‌内网穿透技术‌总结
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (undone) MIT6.824 Lecture1 笔记
  • (二)windows配置JDK环境
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (简单) HDU 2612 Find a way,BFS。
  • (四)c52学习之旅-流水LED灯
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一) storm的集群安装与配置
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • ./configure,make,make install的作用(转)
  • .bat批处理(六):替换字符串中匹配的子串