优化支持的设备数量最多的Android清单文件(Optimizing Android manifes

2019-07-17 12:45发布

我有让我的清单文件与很多较新的手机兼容的问题,当我上传新的APK文件,我不明白为什么。 我在一个全新的测试它HTC EVO V ,但是由于各种原因,该设备将不会在兼容性列表中显示出来。

我对编制API 17最小支持API 10的,所以应该涵盖大部分的手机。

我已经试过:

  • 删除所有权限; 没变
  • 试图使WIFI不是必需的; 没变
  • 删除installLocation ,看它是否发挥了作用; 没变
  • 甚至试图将小屏幕的支持,看看它是否会出现; 没变

我读过什么:

  • http://developer.android.com/google/play/filters.html
  • http://developer.android.com/guide/practices/screens-distribution.html
  • http://developer.android.com/guide/practices/compatibility.html
  • http://developer.android.com/guide/topics/manifest/manifest-intro.html

我的清单文件:

<?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>

Answer 1:

我想张贴此问题, 也是一个答案,因为我发现这是这么折腾首先要弄清楚。 然而,这改变了我支持的设备从499到1968年的数量希望这将帮助更多的人在未来,因为它似乎是一个不起眼的话题。

技巧1:为什么越来越多的设备将不会显示是因为当你使用谷歌过滤器更积极的原因<compatible-screens>标签。 就我而言,我没有足够的不同屏幕大小和密度的组合,所以它过滤掉所有我离开了那些(见下文技术2)的。

如果改为只使用<supports-screens />标签,那么你将让您的应用被更多的设备被发现。 所以,请你帮个忙,并删除所有其他标签的<compatible-screens>块。

您可以使用这样的简短版本:

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

从引用原文 :

谷歌Play筛选器中的“兼容屏”的元素,如果该设备的屏幕大小和密度不匹配任何的屏幕配置的应用程序(由“画面”元素声明)。

注意:通常情况下,你不应该使用这个清单元素。 使用这个元素可以通过排除您还没有上市的屏幕大小和密度的所有组合大大降低了潜在用户群为您的应用程序。 您应该改为使用“支持屏”清单元素(如表1如上所述),使你有没有与替代资源占的屏幕配置的屏幕兼容模式。

技巧2:您可以使用另一种技术是更具体与您的<compatible-screens>标签,并摆脱了<supports-screens />标签。 你可以在你的应用需求为基础的决策和也对最新的设备分配数量 。

在下面的例子中,我不想支持小屏幕或ldpi正常的,大的,或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>


文章来源: Optimizing Android manifest file for largest number of supported devices