Android Manifest之<uses-sdk>元素中文注释

本文深入探讨了Android应用开发中使用整数型APILevel来指定应用兼容性的核心概念,包括minSdkVersion、targetSdkVersion和maxSdkVersion属性的作用及用法,帮助开发者确保应用在不同Android版本设备上的稳定运行。

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

语法

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

父元素

    <manifest>

描述

    通过整数型的API Level,采用一个或多个Android版本来让你指定应用的兼容性。这个由应用定义的API Level将同特定Android系统的API Level进行比较,它可以在不同的Android设备间变化。

    通过名称我们可以看出,这个元素用来指定的是API Level,而不是SDK(software development kit)或Android的版本。这个API Level始终是整数。你不能从和它相关的Android版本号来派生出API Level(例如,它同主版本号或主次版本的总和是不一样的)。

    你也可以阅读关于Versioning Your Applications的文档。

属性

    android:minSdkVersion

        应用运行所需的最小API Level。如果系统的API Level比在这个属性中指定的值更低,那么Android系统将阻止用户安装这个应用。你应当始终声明这个属性。

        注意:如果你没有声明这个属性,那么系统将分配一个默认值“1”,这意味着你的应用将兼容所有的Android版本。如果你的应用不兼容所有Android版本(例如,它使用的是API Level 3),而且你也没有声明minSdkVersion的话,那么当在API Level 3以下的系统中安装时,应用会在运行时期间尝试访问不可用的APIs时出现崩溃。正因如此,最好在minSdkVersion属性中声明相关的API Level。

    android:targetSdkVersion

        定义应用的目标API Level。如果没有设置,那么它的默认值同minSdkVersion给定的值相等。

        这个属性通知系统你已经在这个target version上测试了你的应用,系统不应该再启用任何兼容性动作来维持你应用的向下兼容性。这个应用仍旧能够在更老的版本(minSdkVersion以上)运行。

        随着Android新版本的不断演变,某些动作可能改变。然而,如果由你应用的targetSdkVersion定义的版本没有平台的版本高,那么系统可能启用兼容性动作来确保你的应用继续以你期望的方式工作。在应用运行时,你能通过指定targetSdkVersion匹配当前平台的API Level来禁用这个兼容性动作。例如,将这个值设为“11”或更高,那么当应用在Android 3.0或更高版本中运行时,就会允许系统应用新的默认主题(Holo)到你的应用,而且也能在运行在larger屏幕(因为对API Level 11的支持就隐含了支持larger屏幕)上时禁用screen compatibility mode

        有很多系统能启用的基于你为这个属性设置的值的兼容性动作。在Build.VERSION_CODES引用中,这些动作中的某些由对应的平台版本号来描述。

        为了保证你的应用能在每个Android发布的版本上运行,你应当增加这个值以匹配最新的API Level,然后在相应的平台上测试你的应用。

        出处:API Level 4

    android:maxSdkVersion

        设计的应用能运行的最大API Level。

        在Android 1.5,1.6,2.0和2.0.1中,当安装应用时,以及当系统更新后重新验证这个应用时,系统会检查这个属性的值。有一种情况,如果应用的maxSdkVersion属性比使用的系统API Level低,那么系统就不会允许这个应用安装。在系统更新后重新验证时,这会有效地从设备中回收你的应用。

        为了说明在系统更新后这个属性能如何影响你的应用,请看下面的例子:

        在Google Play中发布的在manifest中声明maxSdkVersion="5"的应用。一个正在运行Android 1.6的用户设备下载和安装这个应用。几周后,用户收到更新系统到Android 2.0(API Level 5)的通知。在更新安装后,系统会检查这个应用的maxSdkVersion并且成功的重新验证它。这个应用的功能正常。然而,一段时间后,设备收到另一个系统更新,这次是更新到Android 2.0.1(API Level 6)。在这次更新后,由于系统自身的API Level (6)现在比应用(5)支持的最大 API Level更高,系统就不再能重新验证应用。系统会阻止用户看见这个应用,进而有效的从设备回收。

         警告:不推荐声明这个属性。首先,当新版本发布时,不需要通过设置这个属性来阻止你的应用部署在Android平台的新版本上。在设计上,平台的新版本完全可以向下兼容。通过只使用标准APIs以及按照最佳开发实践这种手段,你的应用能正常的工作在新版本上。其次,注意下述情况,声明这个属性能导致你的应用在系统更新到更高的API Level后从用户的设备上回收。你应用很可能安装在大部分接收定期更新的设备上,因此你应当在设置这个属性之前考虑它所带来的影响。

         出处:API Level 4

        在安装或重新验证时,Android的未来版本将不再检测或执行这个maxSdkVersion属性。然而,当为用户提供可供下载的应用时,Google Play则会继续使用这个属性进行过滤。

出处

     API Level 1

   

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hik.netsdk.SimpleDemo"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- <uses-permission--> <!-- android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"--> <!-- tools:ignore="ProtectedPermissions" />--> <!-- <uses-permission--> <!-- android:name="android.permission.READ_LOGS"--> <!-- tools:ignore="ProtectedPermissions" />--> <application > <activity android:name=".View.MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".View.VideoDecoder" /> <!-- 其他活动声明 --> <!-- <activity android:name=".View.BusinessUI.Fragment.FragTest2.FragTest2Activity" />--> <!-- <activity android:name=".View.DevMgtUI.AddDevActivity" />--> <!-- <activity android:name=".View.DevMgtUI.DevInfoActivity" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.Preview.FragPreviewBySurfaceView" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.Preview.FragPreviewByTextureView" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackByTime" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackByFile" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackTheSelectFile"></activity>--> </application> </manifest> 解决报错:`VideoDecoder` must extend android.app.Activity
06-23
<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dw.Dating.lua" android:versionName="22" android:versionCode="1" android:installLocation="preferExternal"> <!-- 添加必要的Unity兼容配置 --> <uses-feature android:glEsVersion="0x20000" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> <!-- 权限优化 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 移除Unity 5.3.8不支持的权限 --> <!-- 已移除:MOUNT_UNMOUNT_FILESYSTEMS, CHANGE_NETWORK_STATE, CHANGE_WIFI_STATE, INTERACT_ACROSS_USERS_FULL, android.webkit.permission.PLUGIN, com.android.launcher.permission.INSTALL_SHORTCUT --> <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true" android:isGame="true" android:banner="@drawable/app_banner" android:hardwareAccelerated="true" <!-- 启用硬件加速提升性能 --> android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <!-- 添加全屏主题 --> <!-- 关键Unity兼容配置 --> <activity android:name="com.unity3d.player.UnityPlayerActivity" <!-- 使用Unity标准Activity --> android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> <!-- 支付相关Activity保留 --> <activity android:name="com.fanwei.jubaosdk.cashier.CashierActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" /> <activity android:name="com.fanwei.jubaosdk.wap.WapActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTop" android:screenOrientation="portrait" /> <activity android:name="com.pay.sdk.usage.PayActivity" android:screenOrientation="portrait" /> <activity android:name="sdk.pay.PayWebViewActivity" android:screenOrientation="portrait" /> <activity android:name="com.switfpass.pay.activity.QQWapPayWebView" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity android:name="com.dw.Dating.lua.wxapi.WXEntryActivity" android:exported="true" android:launchMode="singleTop" android:theme="@android:style/Theme.NoDisplay" /> <!-- 文件提供器配置修正 --> <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.dw.Dating.lua.fileProvider" <!-- 使用包名确保唯一性 --> android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> <!-- 添加实际资源引用 --> </provider> <!-- 元数据配置 --> <meta-data android:name="URL_VALUE" android:value="http://fishgame.xin" /> <meta-data android:name="CHANNEL" android:value="AgentID-0" /> <meta-data android:name="FW_VALUE" android:value="FW-30855784" /> <meta-data android:name="AppID" android:value="wx401c37330dd3e92e" /> <meta-data android:name="UMENG_APPKEY" android:value="111" /> <meta-data android:name="UMENG_CHANNEL" android:value="Test" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </application> <!-- SDK版本设置 --> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" /> <!-- 最低支持4.4 --> <!-- 屏幕兼容性 --> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" /> </manifest>帮我把这个配置文件修改在Unity5.3.8下可以正常使用
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值