12

新しい APK ファイルをアップロードするときに、マニフェスト ファイルを多くの新しい携帯電話と互換性を持たせるのに問題があり、その理由がわかりません。新品のHTC Evo Vでテストしていますが、何らかの理由で、そのデバイスは互換性リストに表示されません。

私は API 10 の最小サポートで API 17 に対してコンパイルしているので、電話の大部分を網羅する必要があります。

私が試したこと:

  • すべての権限を削除しました。変化なし
  • WIFIを不要にしてみました。変化なし
  • 違いがあるかどうかを確認するために削除installLocationしました。変化なし
  • 小さな画面のサポートを追加して、表示されるかどうかを確認してみました。変化なし

私が読んだもの:

私のマニフェストファイル:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.somecompany.appname"
      android:versionCode="10"
      android:versionName="1.0"
      android:installLocation="preferExternal">

    <!-- For expansion pack downloads -->
    <!-- Required to access Android Market Licensing -->
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
    <!-- Required to download files from Android Market -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- Required to poll the state of the network connection and respond to changes -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Required to check whether Wi-Fi is enabled -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- Required to read and write the expansion files on shared storage -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/>
    <supports-screens android:normalScreens="true"/>
    <supports-screens android:largeScreens="true"/>
    <supports-screens android:xlargeScreens="true"/>

    <compatible-screens>
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="large" android:screenDensity="hdpi" />
        <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
    </compatible-screens>                      
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:allowBackup="false">
        <activity android:name="somecompany.appname.SplashScreen"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar"
                  android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="somecompany.appname.SoundAndCallActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"/>
        <activity android:name="somecompany.appname.MainScreenActivity"   android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"/>
        <activity android:name="somecompany.appname.SettingsActivity"   android:screenOrientation="portrait" android:theme="@style/Theme.Transparent"/>
    </application>
</manifest>
4

1 に答える 1

22

この質問と回答を投稿したかったのは、最初は理解するのがとてもイライラすることがわかったからです。ただし、これにより、サポートされているデバイスの数が 499 から 1968 に変更されました。あいまいなトピックのように思われるため、これが将来より多くの人々に役立つことを願っています.

手法 1:より多くのデバイスが表示されない理由は、<compatible-screens>タグを使用すると Google がより積極的にフィルタリングするためです。私の場合、さまざまな画面サイズと密度の組み合わせが十分になかったので、除外したものをすべて除外しました (以下の手法 2 を参照)。

代わりに<supports-screens />タグのみを使用すると、より多くのデバイスでアプリを見つけられるようになります。<compatible-screens>したがって、ブロック内の他のタグをすべて削除してください。

次のようなショートフォームを使用できます。

<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true"></supports-screens>

元の記事から引用:

Google Play は、デバイスの画面サイズと密度が "compatible-screens" 要素の画面構成 ("screen" 要素で宣言) のいずれにも一致しない場合、アプリケーションをフィルタリングします。

注意: 通常、このマニフェスト要素は使用しないでください。この要素を使用すると、リストにない画面サイズと密度のすべての組み合わせが除外されるため、アプリケーションの潜在的なユーザー ベースを大幅に減らすことができます。代わりに、「supports-screens」マニフェスト要素 (上記の表 1 で説明) を使用して、代替リソースで説明していない画面構成の画面互換モードを有効にする必要があります。

テクニック 2:使用できるもう 1 つのテクニックは、タグをより具体的にして、<compatible-screens>タグを取り除くこと<supports-screens />です。これらの決定は、アプリの要件と、最新のデバイスの配布数に基づいて行うことができます。

ldpi以下の例では、小さい画面や、通常、大きい、または特大の画面の密度をサポートしたくないので、それらを省略しました。

<compatible-screens>
    <!-- all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />
    <!-- all xlarge size screens -->
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
</compatible-screens>
于 2012-12-24T05:59:10.933 に答える