【问题标题】:Play Store reports APK not designed for tablets, all permissions set as not requiredPlay 商店报告 APK 不是为平板电脑设计的,所有权限都设置为不需要
【发布时间】:2015-09-08 23:39:59
【问题描述】:

我在这里看到的针对此问题的每个解决方案都只涉及在每次使用权限后编写“androidrequired="false"”,这可能在平板电脑上不可用。我对清单中的每一个使用权限都执行了此操作(很多,我知道),但仍然在 Google Play 发布者的控制台上获得“您的 APK 只需要平板电脑上通常可用的硬件功能”,平板电脑仍然无法下载我的应用程序。这是什么原因造成的?

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp.app"
    android:versionCode="21"
    android:versionName="1.01R" >

    <!-- My App requires Android APK Level 16 (4.1) or above -->
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="24" />

    <!-- GCM connects to Internet Services. -->
    <uses-permission android:name="android.permission.INTERNET" android:required="false" />

    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" android:required="false" />

    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" android:required="false" />

    <!-- Creates a custom permission so only this app can receive its messages. -->
    <permission
        android:name="com.myapp.app.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.myapp.app.permission.C2D_MESSAGE" android:required="false" />

    <!-- This app has permission to register and receive data message. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" android:required="false" />

    <!-- Network State Permissions to detect Internet status -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:required="false" />

    <!-- Core function permissions -->
    <uses-permission android:name="android.permission.CALL_PHONE" android:required="false" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" android:required="false" />
    <uses-permission android:name="android.permission.VIBRATE" android:required="false" />
    <uses-permission android:name="android.permission.CAMERA" android:required="false" />
    <uses-permission android:name="android.hardware.camera" android:required="false" />
    <uses-permission android:name="android.permission.READ_CONTACTS" android:required="false" />
    <uses-permission android:name="android.permission.READ_SMS" android:required="false"/>
    <uses-permission android:name="android.permission.READ_CALL_LOG" android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:required="false" />
    <uses-permission android:name="android.permission.FLASHLIGHT" android:required="false" />
    <uses-permission android:name="android.permission.SEND_SMS" android:required="false" />
    <uses-permission android:name="android.permission.WRITE_SMS" android:required="false" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" android:required="false" />
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" android:required="false"  />
    <uses-permission android:name="android.permission.RECORD_AUDIO" android:required="false" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:required="false" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" android:required="false" />

    <!-- Main activity. -->
    <application
        android:icon="@drawable/newlogo2"
        android:label="@string/app_name"
        android:allowBackup="false"

         >
         <!-- Google Play Services Library. -->
        <meta-data 
            android:name="com.google.android.gms.version" 
            android:value="@integer/google_play_services_version" />

        <!-- Register Activity -->
        <activity
            android:name="com.myapp.app.RegisterActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Main Activity -->
        <activity
            android:name="com.myapp.app.MainActivity"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name" >
        </activity>



        <!-- Google Cloud Messaging Receiver -->
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>

                <!-- Receives the actual messages. -->
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <!-- Receives the registration id. -->
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="com.myapp.app" />
            </intent-filter>
        </receiver>

        <!-- Device Administration Receiver -->
        <receiver
            android:name="com.myapp.app.DeviceAdmin"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data android:name="android.app.device_admin"
                       android:resource="@xml/device_admin" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED" />
                <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLED" />
            </intent-filter>           
        </receiver>

        <!-- GCM Heartbeat Alarm Receiver -->
        <receiver
            android:name="com.myapp.app.GCMHeartbeatAlarm"
            android:permission="com.google.android.c2dm.permission.SEND"
            android:process=":remote"> 
        </receiver>

        <!-- Receiver called on successful device reboot  -->
        <receiver android:name="com.myapp.app.BootReceiver"
                  android:enabled="true">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                </intent-filter>
        </receiver>


        <service android:name="com.myapp.app.GCMIntentService" />
        <service android:name="com.myapp.app.LocationService" />
        <service android:name="com.myapp.app.AudioPlayer" />
        <service android:name="com.myapp.app.SoundRecorder" />

    </application>

</manifest>

【问题讨论】:

    标签: android


    【解决方案1】:

    我在这里看到的每个解决方案都只是在每次使用权限后写“androidrequired="false"”,这可能在平板电脑上不可用

    没有任何解决方案应该表明,如there is no android:required attribute on &lt;uses-permission&gt;

    但仍会在 Google Play 发布者的控制台上显示“您的 APK 只需要平板电脑上通常可用的硬件功能”,平板电脑仍无法下载我的应用程序。这是什么原因造成的?

    您拥有的几个&lt;uses-permission&gt; 元素(并且,$DEITY,您确实拥有很多&lt;uses-permission&gt; 元素...)暗示您需要某些硬件功能.例如,CALL_PHONE 表示您需要设备具有电话功能。大多数平板电脑都没有这个。

    对于这些权限,如果您愿意在没有该硬件功能的情况下过关,您可以添加&lt;uses-feature&gt; 元素(可以具有android:required 属性)来表示这些硬件功能是不需要。

    相关权限表以及相应的隐含硬件功能可在the documentation 中找到。

    另外,请删除:

    <uses-permission android:name="android.hardware.camera" android:required="false" />
    

    因为没有这样的权限。

    【讨论】:

    • 感谢您的回答。需要澄清的几个问题: 1. 由于 'android:required' 不是 '' 上的属性,它们都不应该具有该属性吗? 2. 我需要 才能打电话。如果我将 '' 'android.hardware.telephony' 与 'android:required="false" 以及权限一起包含在内,Google Play 会声明该应用与平板电脑兼容吗?
    • 另外,你说的“$DEITY”是什么?
    • @user3878723: “既然 'android:required' 不是 '' 的一个属性,它们都不应该有那个属性吗?” - 正确的。 “Google Play 会宣布该应用与平板电脑兼容吗?” ——肯定会有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多