我尝试在最新的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 for 细节。 AndroidManifest.xml / ThemeTest第7行Android Lint问题
我正在使用名为“AppBaseTheme”的自定义主题。我的问题是什么咨询android.os.Build.VERSION_CODES javadoc。。我怎么能解决这个问题?
答案 0 :(得分:98)
这是因为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,您必须使用以下值here:
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" />
将来请咨询official Android documentation,了解最新的Android API级别。
答案 1 :(得分:7)
您不应该使用android:maxSdkVersion="17"
,因为这意味着如果有人使用您的应用将其Android操作系统更新为大于17的版本,您的应用将被删除。
答案 2 :(得分:3)
此lint消息告诉您兼容模式将自动应用于您可能已使用的任何功能,这些功能在您声明的targetSdkVersion 16之后的版本中不可用(并且,它还告诉您是此类更高版本 - 例如,17)。
这些自动兼容模式调整可能不如您可以通过使用稍后(16级以上)版本中添加的任何功能来替换您可能已使用的16级功能,已在更高版本中删除(如果有)。但是所有内容仍应继续在更高版本中运行(由于兼容性代码所做的调整会自动应用于高于声明的targetSdkVersion API级别的版本上运行);它可能不如您自己的自定义检测和使用新功能(当您的应用程序检测到它在具有这些功能的更高版本中运行时)将工作。
以下是minSdkLevel与targetSdkLevel的讨论示例:
Android Min SDK Version vs. Target SDK Version
您需要考虑的另一件事是项目构建目标(用于编译应用程序的SDK级别)与targetSdkLevel的关系:
答案 3 :(得分:2)
我遇到了同样的问题,事实证明清单中现在还有一个新的(通常是未使用的)参数,你也想要使用它。将android:maxSdkVersion =“16”添加到您的uses-sdk中,如下所示:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"
android:maxSdkVersion="17" />
保存时不会发出警告(因为版本17是SDK的当前最高版本)
maxSdkVersion不是必需的,但如果版本17中的某些内容发生更改,则会有所帮助。如果您使用的是标准ADK平台组件,则不需要maxSdkVersion。
答案 4 :(得分:0)
如果您想要解决它,它会发出警告信息,然后您可以设置android:maxSdkVersion =“17”但是您必须注意这样一个事实:如果有人正在使用您的应用并将其Android操作系统升级到比<强> 17 然后你的应用会因为不支持的版本而自动删除..所以也要照顾这个事实..
答案 5 :(得分: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" />
答案 6 :(得分: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