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

时间:2012-07-27 16:19:38

标签: android tablet google-play

我刚刚发布了适用于手机和平板电脑的应用,但它并没有出现在Google Play平板电脑中。

检查Nexus 7和Asus 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>

使用-sdk标记

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />

权限

<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" />

在明确地将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

7 个答案:

答案 0 :(得分:40)

最后在<compatible-screens>标签中为Nexus 7添加了一个特殊情况。由于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>

更新:

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

     <screen android:screenSize="normal" android:screenDensity="480" />
     <screen android:screenSize="large" android:screenDensity="480" />
     <screen android:screenSize="xlarge" android:screenDensity="480" />`

答案 1 :(得分:34)

This page确定您的问题。

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

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

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

但是,当您指定<uses-permission>时,所有无法访问该功能的设备都会被过滤。

答案 2 :(得分:19)

我相信密钥在您的权限中。通过说您的应用使用RECEIVE_SMSREAD_PHONE_STATE Google 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_SMSREAD_PHONE_STATE,因此您自动拥有android.hardware.telephony。您可以通过执行

来解决此问题
<uses-feature android:name="android.hardware.telephony" android:required="false" />

所有这些都在更深入地解释here

答案 3 :(得分: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" />

答案 4 :(得分:4)

文档指示我们避免使用

<compatible-screens>


here   
相反,你应该使用

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


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

答案 5 :(得分:3)

根据developer.android.com

  

如果应用宣布&lt; compatible-screens &gt;清单中的元素,元素应包含指定应用支持的平板电脑屏幕的所有大小和密度组合的属性。

     

请注意,如果可能,您应 避免 使用&lt; 兼容屏幕&gt;你应用中的元素。

因此,我执行以下任务,

1- REMOVED&lt; compatible-screens &gt;从清单

<compatible-screens>
    <!-- all small size screens -->
    <screen android:screenSize="small" android:screenDensity="ldpi" />
    <screen android:screenSize="small" android:screenDensity="mdpi" />
    <screen android:screenSize="small" android:screenDensity="hdpi" />
    <screen android:screenSize="small" android:screenDensity="xhdpi" />

    <!--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" />

    <screen android:screenSize="normal" android:screenDensity="480" />
    <screen android:screenSize="large" android:screenDensity="480" />
    <screen android:screenSize="xlarge" android:screenDensity="480" />

</compatible-screens>

2- ADDED&lt; 支持屏幕&gt;清单中的属性

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

3- ADDED android:required =&#34; false&#34; &lt; 使用功能&gt;中的属性清单(根据我的申请要求)

<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
<uses-feature android:name="android.hardware.location.gps" android:required="false"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.nfc" android:required="false"/>

关于Permissions that Imply Feature Requirements

的官方Android文档

ATTRIBUTES: android:required false

中有关于android:required false的更详细说明
  

当你声明android:required =&#34; false&#34;对于某项功能,它表示该应用程序更喜欢使用该功能(如果设备上存在),但设计为在没有指定功能的情况下运行(如有必要)(即平板电脑的电话权限) )。

通过进行上述更改,

在支持的Android设备列表中添加了超过2000个设备

2000+ devices added

我希望有帮助

答案 6 :(得分:0)

我得到了回答这个问题的帮助。

How to make android Phonegap available for tablets?

是。问题在于权限。我删除AndroidManifest.xml中的所有权限,而不是测试应用程序,并在获取缺少权限错误时逐个添加权限。现在我的应用程序兼容Android手机和平板电脑。