不针对最新版本的安卓

57

当我尝试在最新的Android SDK包4.2上测试主题时,出现了一个警告。

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.themetest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme" >
        <activity
            android:name="com.example.themetest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

本版本不针对最新版的Android;应用兼容模式。建议测试并更新此版本。有关详细信息,请参阅android.os.Build.VERSION_CODES javadoc文档。AndroidManifest.xml / ThemeTest第7行存在Android Lint问题。

我正在使用一个名为“AppBaseTheme”的自定义主题。我的问题是什么意思:Consult the android.os.Build.VERSION_CODES javadoc,我该如何解决这个问题?

6个回答

102

这是因为targetSdkVersion="16"。API 16是Jellybean 4.1和4.1.1,而Jellybean 4.2是API 17。

尝试使用:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

还要记住这只是一个Lint警告。这些警告存在是为了帮助您改进代码,使其易于维护,并与最新的Android更改兼容。忽略它不会立即造成任何问题。

编辑:随着Android 4.3的推出,最新的SDK版本现在是18,因此您应该使用:

...
        android:targetSdkVersion="18" />

编辑2:使用Android 4.4时,最新SDK版本现在是19,因此您应该使用:

...
        android:targetSdkVersion="19" />

编辑3:在Android L中,您必须使用以下值,如此处所述:

compileSdkVersion="android-L"
minSdkVersion="L"
targetSdkVersion="L"

编辑4:随着Android L的公开发布,您必须使用21:

...
        android:targetSdkVersion="21" />

使用20适用于4.4W,或者适用于Android Wear

编辑5:随着Android M的公开发布,您必须使用23:

...
        android:targetSdkVersion="23" />

未来请参考官方Android文档,以便了解最新的Android API级别。


我应该如何定位L? - Joshua G
请注意,此处内容将被您的 build.gradle 文件中的任何内容覆盖! - Gautham C.
为了持久性和长期维护答案,增加一个。 - Thecave3
我在十年后再次查看这个答案,它仍然对我的使用有帮助。谢谢。 - Muhammad Afzal

7

您不应该使用android:maxSdkVersion="17",因为这意味着如果某个使用您的应用程序的人将其Android操作系统更新到大于17的版本,则您的应用程序将被删除。


3
确实,这个属性不应该被使用。然而,自API 7(包括)以来,即Android 2.1及以上版本,系统不会对该属性进行检查。 仅在Android 2.0.1及更低版本中,如果当前版本大于maxSdkVersion属性,则系统将删除您的应用程序;否则忽略它。 谷歌播放商店使用它来过滤显示在设备上的应用程序,如这里所述 - Leeeeeeelo
此属性用于拆分 APK 的目标,即您希望为 Froyo 和 Gigerbread+ 分发不同的 APK,因为它们使用了不同的 Play Services SDK。 - sherpya
如果平台的API级别高于您的应用程序的targetSdkVersion声明的版本,则系统可能会启用兼容性行为,以确保您的应用程序继续按照您的期望工作。 - Dimitri Dewaele
OP 没有询问 maxSDKVersion,而是 targetSDKVersion - xmen

3
这个lint消息告诉你,对于任何你使用但在目标SDK版本16之后版本中不可用的功能,兼容模式将自动应用(同时,它还告诉你有这样的后续版本,例如17)。
这些自动的兼容模式调整可能不如你自行使用稍后版本添加的功能来替换可能使用的级别16的功能理想(如果有),这些功能已在以后的版本中被删除。但是由于适用于运行在高于目标SDK版本的API级别上的自动应用的兼容代码所做的调整,一切都应该继续在以后的版本中工作;只是可能不像你自己定制检测和使用新功能时(当你的应用程序检测到它在具有这些功能的后续版本中运行时)那样好用。
此处讨论了minSdkLevel与targetSdkLevel的差异,并提供了示例:Android Min SDK Version vs. Target SDK Version
另一个需要考虑的因素是项目构建目标与目标SDK级别之间的关系(用于编译应用程序的SDK级别)。请参考以下链接,了解“Eclipse中的构建目标SDK”和“AndroidManifest.xml中的android:targetSdkVersion”之间的区别:在Eclipse中构建目标SDK和AndroidManifest.xml中的android:targetSdkVersion有何不同?

1

这是一个警告消息,如果你想解决它,你可以设置 android:maxSdkVersion="17",但是你必须注意以下事实:如果有人正在使用你的应用并升级他的 Android 操作系统到大于17的版本,那么你的应用将会自动移除,因为不支持该版本。所以也要注意这个事实。


1

始终选择最新的 Android 版本作为目标 SDK,以获得更多的好处。

针对最近的 API 级别还允许您的应用程序利用平台的最新功能来取悦您的用户。此外,自 Android 10(API 级别 29)起,如果应用程序的目标为 Android 5.1(API 级别 22)或更低版本,则用户在首次启动应用程序时会看到警告。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="29" />

请参考开发者网站了解更多详细信息。

https://developer.android.com/distribute/best-practices/develop/target-sdk


0

添加xmlns:tools="http://schemas.android.com/tools" tools:ignore="OldTargetApi"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.themetest"
    android:versionCode="1"
    android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools" tools:ignore="OldTargetApi">

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

来自:为什么我的安卓应用无法运行?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接