AndroidManifest配置之uses-sdk

本文详细介绍了Android应用的uses-sdk配置,包括android:minSdkVersion、android:targetSdkVersion和android:maxSdkVersion的含义、选取原则及对应用安装、开发阶段的影响。通过设置这些属性,开发者可以确保应用在不同版本的Android系统上正常运行,同时考虑兼容性和用户体验。一般建议将android:minSdkVersion设为9,targetSdkVersion保持最新,而maxSdkVersion通常无需设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uses-sdk配置

uses-sdk用来设置app对android系统的兼容性。它包含三个可选的配置项,分别为android:minSdkVersion,android:targetSdkVersion和android:maxSdkVersion,例如:

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="23"
        android:maxSdkVersion="23" />

配置项的值是一个代表Android API Level的整数。每个API Level对应一个Android系统的版本。API Level和Android版本的最新对应关系如图所示(截止2015年9月30日)。
这里写图片描述

android:minSdkVersion配置项含义

此选项表示应用运行时所需要的最低的API版本。也就是说,在低于android:minSdkVersion指定的API Level的Android系统上,应用无法正常运行。Android系统在安装一个应用时会首先检查此项配置,如果当前系统的API Level低于这里指定的API Level,则应用无法被安装到系统中。
如果在AndroidManifest.xml中不指定android:minSdkVersion,则会默认其值为1,也就是说应用能够被安装到所有的Android系统中。如果应用中使用了高版本系统中才有的API,会导致应用在低版本系统中运行时崩溃。因此,一般来说所有的应用都应当指定合适的android:minSdkVersion值。即使应用确实能够兼容到Android 1.0,也应当显式的指定android:minSdkVersion为1,以明确的告知项目的其他开发者,这是一个需要兼容到Android 1.0的项目。
android:minSdkVersion配置除了在应用安装时会使用外,在开发阶段还会影响到Android lint。如果在代码中调用了一个高于android:minSdkVersion指定的API Level的API,Android lint会给出一个Lint error。例如android.content.res.Resources的getDrawable(int id, Theme theme)方法是在API Level21后才开始有的,如果指定了android:minSdkVersion低于21,会就给出如下的编译警告。

这里写图片描述

android:minSdkVersion配置项选取

通常一个应用在开发前就应当确定该应用能够兼容的最低的Android版本。显然一个应用能够兼容的Android版本越低,就越能够安装在更多的Android设备上,获得最大的用户群体。但是兼容越低的Android版本,同时也意味着无法利用高版本API带来的各种便利和效果,虽然Android推出了V4和V7兼容包,将一些高版本才能使用的组件放到兼容包中,但这并不能解决所有兼容性问题。此外,兼容更低版本意味着应用需要适配更多的低端机型,需要有更多的兼容性代码,应用发布前需要做更多的兼容性测试,这些都会带来开发成本的提高。
根据Google官方的统计(http://developer.android.com/about/dashboards/index.html),使用Android 2.2版本的设备在全部Android设备中只占0.2%,Android 2.2以下版本的设备占比均低于0.1%。如果应用能够兼容到Android 2.3(API Level 9),那么可以就可以覆盖99%以上的Android设备。因此,一般应用设置android:minSdkVersion为9就可以覆盖绝大多数的用户了。
此外,一款应用是否能够在一款机器上运行,除了受应用的最低兼容版本限制外,还受到应用的硬件需求的限制。所有的应用在运行时都会设备的硬件上有一定的要求,对一些特定类型的应用来说,需要较高的硬件性能才可以满足其正常运行的需要。例如,游戏类型的应用在运行时需要较高的CPU和GPU资源,包含大量图片的应用需要占用较高的内存。通常来说,运行越低版本的Android设备意味其硬件性能越低,如果硬件性能不能满足应用的需要,即使软件上能够兼容,应用也无法正常运行。
最后一点,所有应用在开发前都应当有目标用户群体的设定,如果设备的用户根本不会接触或使用这种类型的应用,那么即使软硬件上都能够兼容,也是没有意义的。通常来说,持有越低版本的Android设备意味着年龄段越大,或消费能力越低。
一般来说,对大多数类型的应用,能够兼容到Android 4.0就已经可以了。

android:targetSdkVersion配置项含义

此选项表示应用的目标系统版本,如果在AndroidManifest.xml中不指定android:targetSdkVersion,则会默认其值等于android:minSdkVersion。
对开发者来说,此选项意味着应用在开发阶段能够支持到的目标系统版本,结合minSdkVersion,开发者需要对minSdkVersion到targetSdkVersion之间的所有系统版本上进行细致的测试,保证没有任何兼容性问题。
对系统来说,应用在运行时,系统会检查其targetSdkVersion配置,如果当前系统版本低于或等于此项配置,表示应用开发者已经在当前系统上进行了全面的测试,无需做任何兼容性处理。如果当前系统版本高于此项配置,表示此应用开发时没有在当前系统版本上进行测试(这通常是因为当前系统版本发布时间晚于应用的发布时间),这时系统就会执行一系列的兼容性策略,保证应用能够在当前系统上正确的运行。这类似于Windows上的”以兼容模式运行这个程序”的功能,只是Android会自动根据当前版本和targetSdkVersion设置来选择是否使用兼容模式,以及兼容的目标版本。

android:targetSdkVersion配置项选取

targetSdkVersion配置项通常始终保持为当前最新的Android系统版本。如果应用发布后,Android系统版本又有新的更新,则下次应用更新时,应当将targetSdkVersion更新到最新的Android系统版本(当前还需要在新的系统上进行一些兼容性开发和测试)。

android:maxSdkVersion配置项含义

此选项的含义和android:minSdkVersion相反,它表示应用所能运行的最高的API版本。在Android 2.0.1及其以下的Android系统上,安装一个应用时会先检查此项配置,如果当前系统的API Level高于这里指定的API Level,则应用无法被安装到系统中。在Android 2.0.1以上的系统上,安装应用不会检查此项配置,也就是说在Android 2.0.1以上的系统上 android:maxSdkVersion会被忽略。
由于目前绝大多数设备都运行在Android2.2以上系统中,这项配置已经没有任何必要去设置了。

三个配置项的意义和影响范围小结

这里再对三个配置项的意义和影响范围进行一下小结。可以看到,这三个选项对主要影响的是Android Lint和应用的安装,对代码编译没有任何影响,对程序的运行也基本没有影响。

影响范围minSdkVersiontargetSdkVersionmaxSdkVersion
Android lint如果使用了高于minSdkVersion指定版本的API,则会给出Lint error没有影响没有影响
代码编译没有影响没有影响没有影响
应用安装如果当前系统版本低于minSdkVersion指定版本,则拒绝安装没有影响对Android 2.0.1及其以下系统,如果当前系统版本高于maxSdkVersion指定版本,则拒绝安装,对Android 2.0.1以上版本没有影响
程序运行没有影响如果当前系统版本高于targetSdkVersion指定版本,则应用会自动在兼容模式下运行没有影响

Library工程中三个配置项的影响

在Android Library工程的AndroidManifest.xml文件中也可以配置android:minSdkVersion,android:targetSdkVersion和android:maxSdkVersion,不过这三个配置对引用它的工程没有任何影响,最终生成应用的这三个配置都只和应用本身所在工程配置有关,和它引用的Library工程中的配置无关。例如,有一个Library工程为A,它被一个能编译成apk的非Library工程B引用,B工程编译成的apk为B.apk。A工程下AndroidManifest.xml文件中的这三个配置项,无论如何配置,对B工程的编译,以及B.apk的安装和运行都没有任何影响。
虽然Library工程的android:minSdkVersion,android:targetSdkVersion和android:maxSdkVersion配置对应用的安装和运行没有影响,但并不表示这三个配置没有作用。他们的作用主要有如下几点。
1. Library工程在开发时,Android lint同样会根据此项配置来检查应用中是否在代码中使用了高版本的API,如果代码中使用了高于minSdkVersion指定版本的API,则会给出Lint error。
2. Library工程开发完成后是需要给其他开发者使用的,当一个应用的开发者需要使用一个Library工程的时候,看到Library工程的android:minSdkVersion,android:targetSdkVersion和android:maxSdkVersion这几项配置,就可以知道此Library工程能够稳定运行的版本范围,例如Library工程中android:minSdkVersion设置为11,表示Library工程能够在在API Level11及其以上的Android版本中运行,这意味着很可能Library工程中使用了API Level11及其以上版本中的API,这时如果引用它的工程对应的android:minSdkVersion设置为9,则虽然编译后的apk能够在API Level9对应的Android2.3系统上安装,但很可能出现应用在调用Library工程的某个接口时出现找不到API的异常。所以,应用开发者必须要保证应用的android:minSdkVersion设置大于等于其所引用的每一个Library工程中的android:minSdkVersion设置。

参考:
1. http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
2. http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#M
3. http://stackoverflow.com/questions/9503705/for-android-library-projects-is-uses-sdk-meaningful-in-manifest

### 正确配置 `uses-permission` 标签的方法 在 Android 应用开发中,`<uses-permission>` 是用于声明应用所需权限的关键标签。它告诉操作系统该应用程序需要哪些功能访问权,例如网络、存储或其他敏感操作。 #### 添加 `<uses-permission>` 到 `AndroidManifest.xml` 要在 `AndroidManifest.xml` 文件中添加权限,需将其放置在根节点 `<manifest>` 下方,但在任何其他子节点(如 `<application>`, `<activity>`, 或 `<receiver>`)之前[^3]。以下是标准语法: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <!-- 声明所需的权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application> ... </application> </manifest> ``` 上述代码片段展示了如何请求互联网访问和外部存储读取权限[^5]。 #### 使用带有条件的权限 某些情况下可能希望基于设备 API 版本有条件地申请权限。这可以通过设置属性 `maxSdkVersion` 实现。例如,对于旧版本 Android 设备可以单独指定特定权限的最大支持 SDK 级别: ```xml <!-- 对于低于等于API Level 18的设备启用写入外存权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> ``` 注意,同一权限不可重复定义不同 `maxSdkVersion` 属性值的情况,因为这是非法配置。 #### 权限的作用范围 当自定义权限被创建并应用于广播接收器时,只有拥有相应权限的应用才能向此广播发送消息。例如,在以下 XML 配置中,`INSTALL_SHORTCUT` 自定义权限确保仅具有该权限的应用程序能够触发安装快捷方式的行为[^2]: ```xml <receiver android:name="com.android.launcher2.InstallShortcutReceiver" android:permission="com.android.launcher.permission.INSTALL_SHORTCUT"> <intent-filter> <action android:name="com.android.launcher.action.INSTALL_SHORTCUT"/> </intent-filter> </receiver> ``` 这里需要注意的是,`android:permission` 属性指定了哪个权限控制对该组件的访问,而 `<uses-permission>` 节点则表示当前应用本身需要什么权限去执行某些动作。 #### 动态权限管理 除了静态声明之外,针对运行时危险权限 (Dangerous Permissions),还需要通过 Java/Kotlin 编程实现动态授权机制。比如访问联系人列表或相机等功能均属于此类范畴。如果目标用户的 Android OS 处于 Marshmallow(API level 23) 及以上,则即使清单文件里已声明对应许可项仍需额外确认用户同意授予实际使用权。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值