12

當我上傳一個新的APK文件並且我不明白爲什麼時,我遇到的問題是我的清單文件與很多新手機兼容。我正在使用全新的HTC Evo V進行測試,但無論出於何種原因,該設備都不會顯示在兼容性列表中。爲最大數量的支持設備優化Android清單文件

我對API 17進行了編譯,最低支持API 10,所以應該包含大部分手機。

我已經試過:

  • 刪除所有權限;沒有變化
  • 試圖讓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> 

回答

20

我想發佈這個問題,答案,因爲我發現這是如此令人沮喪的第一個弄清楚。但是,這將我的支持設備數量從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> 

original article引用:

谷歌Play篩選器應用程序,如果在設備屏幕尺寸和 密度不匹配任何屏幕「compatible-screens」元素中的配置(由 「屏幕」元素聲明)。

注意:通常情況下,您不應該使用此清單元素。使用 此元素可以通過排除未列出的屏幕尺寸和密度 的所有組合來顯着減少潛在的用戶基數。您應該使用 「支持屏幕」清單元素(如上表1中所述) 爲屏幕配置啓用屏幕兼容性模式,但屏幕配置 不包含替代資源。

技術2:你可以使用另一種技術是更具體<compatible-screens>標籤和擺脫<supports-screens />標籤。您可以根據您的應用需求以及latest device distribution numbers來做出這些決定。

在下面的示例中,我不想支持小屏幕或正常,大型或xlarge屏幕的密度,所以我將它們排除在外。

<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> 
+1

似乎有幫助Thx –

+1

@Arash我剛剛過渡到Android的世界,所以希望這會幫助一些其他人也是如此。 – iwasrobbed

+1

感謝您的提示,這真的很有幫助 –