为啥我的应用没有显示在 Google Play 的平板电脑上?

Posted

技术标签:

【中文标题】为啥我的应用没有显示在 Google Play 的平板电脑上?【英文标题】:Why my App is not showing up on tablets in Google Play?为什么我的应用没有显示在 Google Play 的平板电脑上? 【发布时间】:2012-07-26 08:47:40 【问题描述】:

我刚刚发布了适用于手机和平板电脑的应用,但它没有出现在平板电脑的 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>

使用-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 后,它开始出现在 Asus 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

【问题讨论】:

您的清单的那部分似乎没有任何问题,因此您的问题出在其他地方(例如,permissions implying hardware feature requirements)。 您的应用是多久前发布的?如果不是很久以前,请等待一段时间,然后再次检查,如果市场说您的应用兼容,它应该可以工作。 现在已经超过24小时了 检查您的使用功能标签(例如,如果 android.hardware.telephone,请确保设置 required=false,并确保您有 我在清单中没有任何使用功能标签。使用了 标签,所以使用 没有意义 【参考方案1】:

最后为 Nexus 7 添加了一个特殊情况,带有&lt;compatible-screens&gt; 标签对我有用。由于 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" />`

【讨论】:

感谢您的回答。我遇到了这个问题,无法弄清楚为什么我的应用在 Nexus 7 上不可用。以下链接有更多信息。 plus.google.com/106300001086744879268/posts/Wa9xtQjZHJxcode.google.com/p/android/issues/detail?id=34076 我试过这个,但它删除了一些默认支持的尺寸。如何在保留所有默认尺寸的同时添加对 Nexus 7 的支持,或者有没有办法在上面发布的内容中添加所有尺寸(小+)? @Inator 我的应用程序没有小屏幕支持,这就是我省略这些的原因。您可以添加这些标签,即&lt;!-- all small size screens --&gt; &lt;screen android:screenSize="small" android:screenDensity="ldpi" /&gt; &lt;screen android:screenSize="small" android:screenDensity="mdpi" /&gt; &lt;screen android:screenSize="small" android:screenDensity="hdpi" /&gt; &lt;screen android:screenSize="small" android:screenDensity="xhdpi" /&gt; compatible-screens 代替 supports-screens 工作还是两者都需要? 我觉得应该是 【参考方案2】:

This page 识别您的问题。

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

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

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

但是,当您指定 &lt;uses-permission&gt; 时,所有无权访问该功能的设备都会被过滤掉。

【讨论】:

为了让我的应用可用于 nexus 7,我还必须进行此更改 这确实有效!我在使用电话许可时遇到了同样的问题,因此谷歌播放不会在没有电话收音机的平板电脑上显示该应用程序。我使用 android:required="false" 添加了 uses-feature 元素,现在我可以在平板电脑上查看 Google Play 上的应用了。【参考方案3】:

我相信关键在于您的权限。通过说您的应用程序使用RECEIVE_SMSREAD_PHONE_STATE Google Play 使用它来过滤不能执行这些操作的设备(平板电脑),因为它认为您的应用程序需要使用这些权限才能工作。根据android开发者网站:

“为了防止这些应用程序无意中可用, Google Play 假定某些与硬件相关的权限表明 默认情况下需要底层硬件功能。为了 例如,使用蓝牙的应用程序必须请求蓝牙 元素中的权限 - 对于旧版应用程序,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进行了更深入的解释。

【讨论】:

那么标签和标签有什么区别? 查看编辑:您可以使用权限但不能使用该功能,但您必须手动输入 uses-feature=false。 显式添加 标记为 false 后,它开始出现在华硕 eeeePad 平板电脑上,但仍然没有出现在 nexus 7 上。请参阅编辑 我认为更好的答案【参考方案4】:

我必须完成所有这三件事才能让它在 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" />

【讨论】:

【参考方案5】:

文档指示我们避免使用

<compatible-screens>

见here 相反,您应该使用

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

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

【讨论】:

【参考方案6】:

根据developer.android.com

如果应用在清单中声明了 compatible-screens> 元素,则该元素应包含指定应用支持的平板电脑屏幕的所有尺寸和密度组合的属性。

请注意,如果可能,您应该避免在您的应用中使用 compatible-screens> 元素。


因此,我执行以下任务,

1- 已从清单中删除 compatible-screens>

<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- 在清单中添加 supports-screens> 属性

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

3- 在清单中的 uses-feature> (根据我的应用程序要求)中添加了 android:required="false" 属性 >

<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="false" 时,这意味着应用程序更喜欢使用该功能(如果设备上存在该功能),但 如果需要,它被设计为在没有指定功能的情况下运行(在平板电脑的情况下是电话许可)。


通过上述更改,

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

希望对你有帮助

【讨论】:

【参考方案7】:

我从回答这个问题中得到帮助。

How to make android Phonegap available for tablets?

是的。问题出在权限上。我从 AndroidManifest.xml 中删除了所有权限,而不是测试应用程序并在缺少权限错误时一一添加权限。现在我的应用程序兼容安卓手机和平板电脑。

【讨论】:

以上是关于为啥我的应用没有显示在 Google Play 的平板电脑上?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的google play一直显示网络连接失败?

为啥google在我的电脑总显示安装错误求大神帮助

为啥 Google Play 商店应用不显示预览视频

google play 控制台应用程序状态草稿为啥?

我的应用在 2 天后未在 Google Play 中显示

为啥我的应用在 Google Play 中被“隐藏”了?