web-dev-qa-db-ja.com

Androidの最新バージョンをターゲットにしない

最新の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 Problem

「AppBaseTheme」というカスタムテーマを使用しています。私の質問は正確に何ですかAndroid.os.Build.VERSION_CODES javadocを参照してください。この問題をどのように解決できますか?

53
Edy Developer

これは、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レベル

98
Raghav Sood

Android:maxSdkVersion="17"は使用しないでください。アプリを使用しているユーザーがAndroid OSを17より新しいバージョンに更新すると、アプリが削除されます。

7
ClCfe

このlintメッセージは、16の宣言されたtargetSdkVersionよりも新しいバージョンでは使用できない機能に、互換モードが自動的に適用されることを示しています(また、are =そのような新しいバージョン-例えば、17)。

これらの自動互換性モードの調整は、(レベル16以降の)バージョンで追加された機能を使用して、使用していた可能性のあるレベル16の機能を置き換えることで達成できるほど理想的ではない場合がありますそれ以降のバージョン(ある場合)。ただし、宣言されたtargetSdkVersionのAPIレベルよりも高いバージョンでの実行に自動的に適用される互換性コードによって行われた調整により、すべてが引き続き新しいバージョンで機能するはずです。新しい機能の独自のカスタム検出および使用と同様に機能しない場合があります(それらの機能を備えた最新バージョンで実行されていることをアプリが検出した場合)wouldは機能しました。

以下に、minSdkLevelとtargetSdkLevelの説明と例を示します。

Android Min SDKバージョンとターゲットSDKバージョン

もう1つ考慮すべきことは、Project Build Target(アプリのコンパイルに使用されるSDKのレベル)とtargetSdkLevelの関係です。

Eclipseの「Build Target SDK」とAndroidManifest.xmlのtargetSdkVersionの違い?

3
Carl

私に同じ問題が発生しましたが、マニフェストに新しい(通常は未使用の)パラメーターがあり、これも使用することがわかりました。下記のように、uses-sdkにAndroid:maxSdkVersion = "16"を追加します。

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

保存すると警告は表示されません(バージョン17がSDKの現在の最大バージョンであるため)

MaxSdkVersionは必要ありませんが、バージョン17の何かが変更された場合に役立ちます。標準のADKプラットフォームコンポーネントを使用している場合、maxSdkVersionは必要ありません。

2
David D

解決したい場合は警告メッセージが表示されます。Android:maxSdkVersion = "17"を設定できますが、現在アプリを使用しているユーザーがAndroid OSを17よりも大きいバージョンにすると、サポートされていないバージョンのため、アプリは自動的に削除されます。この事実にも注意してください。

0
Anil Chahal

追加 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" />

From: なぜAndroidアプリが動作しないのか?

0
kangear