为什么我的应用程序没有出现在Google Play的平板电脑上?

Saq*_*qib 38 android tablet google-play

我刚刚发布了我的手机和平板电脑的应用程序,但它没有出现在谷歌播放平板电脑上.

检查Nexus 7和华硕eeeePad

这是我在清单文件中的内容

<compatible-screens>
    <!--no small size screens -->

    <!--Only hdpi and xhdpi for 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="ldpi" />
    <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="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
</compatible-screens>
Run Code Online (Sandbox Code Playgroud)

uses-sdk标签

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
Run Code Online (Sandbox Code Playgroud)

权限

<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<permission android:name="com.myapp.something.permission.C2D_MESSAGE" android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)

在明确地将uses-feature标签添加到false后,它开始出现在华硕eeeePad平板电脑上,但仍然没有出现在nexus 7中.这是我在开发者控制台中看到的内容

此应用程序仅适用于具有这些功能的设备,如应用程序清单中所定义.屏幕密度:LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI 所需的设备功能

android.hardware.screen.portrait
android.hardware.touchscreen
Run Code Online (Sandbox Code Playgroud)

Saq*_*qib 40

最后为Nexus 7添加了一个带有<compatible-screens>标签的特殊情况.由于Nexus 7具有tvdpi密度

<compatible-screens>
    <!--no small size screens -->


    <!--all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="ldpi" />
    <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="ldpi" />
    <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="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

    <!-- Special case for Nexus 7 -->
    <screen android:screenSize="large" android:screenDensity="213" />

</compatible-screens>
Run Code Online (Sandbox Code Playgroud)

更新:

对于xxhdpi设备,您可以使用480作为int值

     <screen android:screenSize="normal" android:screenDensity="480" />
     <screen android:screenSize="large" android:screenDensity="480" />
     <screen android:screenSize="xlarge" android:screenDensity="480" />`
Run Code Online (Sandbox Code Playgroud)


Ero*_*rol 35

此页面标识您的问题.

当您使用<uses-feature>而不是使用时<uses-permission>,您的应用程序将不会被Market过滤掉,但是您希望在代码级别处理不支持该功能的设备.

对于上述页面中的任何权限,您可以通过在<uses-feature>元素中使用android:required="false"属性显式声明隐含功能,基于隐含功能禁用过滤.例如,要禁用基于CAMERA权限的任何过滤,您可以将此声明添加到清单文件中:

<uses-feature android:name="android.hardware.camera" android:required="false" />
Run Code Online (Sandbox Code Playgroud)

但是,在指定时<uses-permission>,将过滤所有无权访问该功能的设备.

  • 这实际上有效!我有同样的问题,我使用了TELEPHONY权限,所以谷歌播放不会在没有电话收音机的平板电脑上显示应用程序.我在android:required ="false"中添加了uses-feature元素,现在我可以在平板电脑上查看Google Play上的应用了. (5认同)

nin*_*nge 19

我相信密钥是在你的权限.通过说您的应用使用RECEIVE_SMS并且READ_PHONE_STATEGoogle Play使用它来过滤掉无法执行这些操作的设备(平板电脑),因为它认为您的应用需要使用这些权限才能工作.根据android开发者网站:

"为防止这些应用无意中提供,Google Play假定某些与硬件相关的权限表明默认情况下需要基础硬件功能.例如,使用蓝牙的应用必须在元素中请求BLUETOOTH权限 - 对于旧版应用,Google Play假定权限声明意味着应用程序需要底层的android.hardware.bluetooth功能,并根据该功能设置过滤功能."

另外,看看这个:

电话CALL_PHONE android.hardware.telephony CALL_PRIVILEGED android.hardware.telephony MODIFY_PHONE_STATE android.hardware.telephony PROCESS_OUTGOING_CALLS android.hardware.telephony READ_SMS android.hardware.telephony RECEIVE_SMS android.hardware.telephony RECEIVE_MMS android.hardware.telephony RECEIVE_WAP_PUSH android.hardware.telephony SEND_SMS android.hardware.telephony WRITE_APN_SETTINGS android.hardware.telephony WRITE_SMS android.hardware.telephony

你有RECEIVE_SMS,READ_PHONE_STATE所以你自动拥有android.hardware.telephony.你可以通过这样做解决这个问题

<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)

所有这些都在这里进行了更深入的解释.


小智 10

我必须做所有这三件事才能让它适用于Nexus 7.一旦你上传了你的apk,你可以通过首先激活新的apk,转到产品细节并搜索支持的设备来验证设置.如果在"由于您的清单设置而不支持的设备"下找不到Nexus 7,那么您就是好的.

注意:上传apk后,Google Play会将213密度转换为tvdpi.不确定为什么不是eclipse清单工具中的一个选项...

<compatible-screens>
    ....
    <screen android:screenSize="large" android:screenDensity="213" />
</compatible-screens>

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)


use*_*891 5

文档指示我们避免使用

<compatible-screens>
Run Code Online (Sandbox Code Playgroud)


请参阅此处,
您应该使用

<supports-screens
        android:anyDensity="true"
        android:xlargeScreens="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true" />
Run Code Online (Sandbox Code Playgroud)


此页面上提供的许多其他答案也是有效的答案。我自己实现了它们。谢谢大家。