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

我刚刚发布了适用于手机和平板电脑的应用程序,但不会显示在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" /> 

明确添加使用function标记为false后,它开始出现在华硕eeeePad平板电脑,但仍然没有出现nexus 7.这是我看到的开发人员控制台

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

 android.hardware.screen.portrait android.hardware.touchscreen 

最后,在<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作为整型值

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

此页面标识您的问题。

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

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

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

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

我相信关键在于你的权限。 通过说您的应用使用了READ_PHONE_STATEREAD_PHONE_STATE Google Play会使用它来过滤掉那些无法执行这些操作的设备(平板电脑),因为它认为您的应用需要使用这些权限才能正常工作。 根据android开发者网站:

“为了防止这些应用程序无意中被使用,Google Play假定某些与硬件相关的权限表明默认情况下,底层硬件function是必需的,例如,使用蓝牙的应用程序必须在元素中请求BLUETOOTH权限 – 对于传统应用程序,Google Play假定权限声明意味着应用程序需要底层的android.hardware.bluetoothfunction,并根据该function设置过滤。“

另外,看看这个:

电话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

你有READ_PHONE_STATEREAD_PHONE_STATE所以你自动有android.hardware.telephony 。 你可以通过这个来解决这个问题

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

所有这一切都在这里更深入的解释。

我必须做所有这三件事情才能使Nexus 7工作。一旦你上传你的apk,你可以通过首先激活新的apk来validation设置,去产品细节和search支持的设备。 如果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" /> 

文档指导我们避免使用

 <compatible-screens> 

看到这里
相反,你应该使用

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

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

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

在清单中的< 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"/> 

有关权限的官方Android文档暗示function要求

有关android的更详细的解释:required在ATTRIBUTES:android:required false中出现

当您为某个function声明android:required =“false”时,这意味着应用程序倾向于使用该function(如果该function在设备上),但是它被devise为在没有指定function的情况下运行(如果需要 )案例的片剂)。


通过上述的改变,

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

添加了2000多个设备

我希望有帮助

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

如何使android phonegap可用于平板电脑?

是。 问题是有权限。 我从AndroidManifest.xml中删除所有的权限,比testing应用程序,并获得权限错误时,逐一添加权限。 现在我的应用程序兼容Android手机以及平板电脑。