54

尝试在最新的 Android SDK Package 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 line 7 Android Lint 问题

我正在使用一个名为“AppBaseTheme”的自定义主题。我的问题是究竟是什么请参阅 android.os.Build.VERSION_CODES javadoc。. 我该如何解决这个问题?

4

6 回答 6

100

之所以这么说是因为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 级别。

于 2012-11-17T14:57:15.890 回答
7

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

于 2012-12-20T23:28:42.047 回答
3

此 lint 消息告诉您,兼容模式将自动应用于您可能使用过的任何功能,这些功能在您声明的 targetSdkVersion 16 之后的更高版本中不可用(并且,它还告诉您有这样的更高版本 - 例如, 17).

这些自动兼容模式调整可能不如您自己完成的理想,方法是使用更高版本(高于 16 级)中添加的任何功能来替换您可能使用的 16 级功能的功能,这些功能已在更高版本(如果有)。但是在以后的版本中一切都应该继续工作(由于兼容性代码所做的调整,自动应用在高于您声明的 targetSdkVersion 的 API 级别的版本上运行);它可能不如您自己对新功能的自定义检测和使用(当您的应用检测到它在具有这些功能的更高版本中运行时)有效

下面是关于 minSdkLevel 与 targetSdkLevel 的讨论和示例:

Android Min SDK 版本与目标 SDK 版本

您需要考虑的另一件事是项目构建目标(用于编译应用程序的 SDK 级别)与 targetSdkLevel 的关系:

Eclipse 中的“构建目标 SDK”和 AndroidManifest.xml 中的 android:targetSdkVersion 之间的区别?

于 2013-03-21T02:45:57.177 回答
0

如果你想解决它,它是一条警告消息,那么你可以设置 android:maxSdkVersion="17" 但你必须注意一个事实,如果有人当前使用你的应用程序并将他的 android 操作系统升级到高于17的版本,那么你的应用程序由于不支持的版本会自动删除..所以也要注意这个事实..

于 2013-03-11T08:42:56.473 回答
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" />

来自:为什么我的 android 应用程序无法运行?

于 2014-09-19T09:04:26.347 回答
0

始终使用最新的 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

于 2020-01-05T07:05:32.800 回答