android - porque - ¿Por qué mi aplicación no aparece en las tabletas en Google Play?
porque no funciona google en mi celular (7)
Creo que la clave está en tus permisos. Al decir que su aplicación usa RECEIVE_SMS
y READ_PHONE_STATE
Google Play usa eso para filtrar los dispositivos que no pueden hacer esas cosas (tabletas) porque cree que su aplicación necesita usar esos permisos para funcionar. De acuerdo con el sitio del desarrollador de Android:
"Para evitar que esas aplicaciones estén disponibles involuntariamente, Google Play supone que ciertos permisos relacionados con el hardware indican que las características de hardware subyacentes son obligatorias por defecto. Por ejemplo, las aplicaciones que usan Bluetooth deben solicitar el permiso BLUETOOTH en un elemento: para aplicaciones heredadas , Google Play supone que la declaración de permiso significa que la aplicación requiere la función android.hardware.bluetooth subyacente y configura el filtrado según esa característica ".
Además, mira esto:
Telefonía 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
Tienes RECEIVE_SMS
y READ_PHONE_STATE
por lo que tienes automáticamente android.hardware.telephony
. Puedes arreglar esto haciendo
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Todo esto se explica con más profundidad aquí .
Acabo de lanzar mi aplicación para teléfonos y tabletas, pero no aparece en Google Play para tabletas.
Comprobado en Nexus 7 y Asus eeeePad
Esto es lo que tengo en mi archivo de manifiesto
<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>
etiqueta uses-sdk
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
permisos
<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" />
Después de agregar explícitamente la etiqueta uses-feature a false, comenzó a aparecer para la tableta Asus eeeePad pero aún no aparece para nexus 7. Esto es lo que veo en la consola de desarrollador
Esta aplicación solo está disponible para dispositivos con estas características, tal como se define en el manifiesto de su aplicación. LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI
pantalla: LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI
Características del dispositivo requeridas
android.hardware.screen.portrait
android.hardware.touchscreen
De acuerdo con developer.android.com
Si la aplicación declara un elemento < compatible-screens > en el manifiesto, el elemento debe incluir atributos que especifiquen todas las combinaciones de tamaño y densidad para pantallas de tableta compatibles con la aplicación.
Tenga en cuenta que, si es posible, debe evitar usar el elemento < compatible-screens > en su aplicación.
Por lo tanto, hago las siguientes tareas,
1- REMOVEDO < pantallas-compatibles > del manifiesto
<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- AÑADIDO < supports-screens > atributo en el manifiesto
<supports-screens
android:xlargeScreens="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"
/>
3- ADDED android: required = "false" atributo en < uses-feature > (según mi requisito de aplicación) en el manifiesto
<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"/>
Documentación oficial de Android sobre permisos que implican requisitos de características
Una explicación más detallada acerca de android: required false está presente en ATRIBUTOS: android: required false
Cuando declara android: required = "false" para una característica, significa que la aplicación prefiere usar la característica si está presente en el dispositivo, pero que está diseñada para funcionar sin la función especificada, si es necesario (es decir, permiso de telefonía en caja de tabletas).
Al hacer los cambios anteriores,
MÁS DE 2000 DISPOSITIVOS se agregaron en la lista de Dispositivos Android compatibles
Espero que eso ayude
La documentación nos indica que evitemos usar
<compatible-screens>
ver here
en su lugar deberías usar
<supports-screens
android:anyDensity="true"
android:xlargeScreens="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
Muchas de las otras respuestas proporcionadas en esta página también son respuestas efectivas. Los he implementado yo mismo. Gracias a todos.
Obtengo ayuda de responder esta pregunta.
¿Cómo hacer que Phonegap para Android esté disponible para tabletas?
Sí. El problema fue con permisos. Elimino todos los permisos de AndroidManifest.xml en vez de probar la aplicación y agregar el permiso uno por uno al obtener el error de permiso faltante. Ahora mi aplicación es compatible con teléfonos Android y tabletas.
Por último, agregué un caso especial para Nexus 7 con la etiqueta <compatible-screens>
funcionó para mí. Como Nexus 7 tiene densidad 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>
ACTUALIZAR:
Para dispositivos xxhdpi puede usar 480 como un valor int
<screen android:screenSize="normal" android:screenDensity="480" />
<screen android:screenSize="large" android:screenDensity="480" />
<screen android:screenSize="xlarge" android:screenDensity="480" />`
Tengo que hacer estas tres cosas para que funcione en Nexus 7. Una vez que hayas cargado tu apk, puedes verificar la configuración activando primero la nueva aplicación, ve a los detalles del producto y busca los dispositivos compatibles. Si Nexus 7 no se encuentra en "Dispositivos no compatibles debido a su configuración de manifiesto", es bueno.
Nota: una vez que cargues tu apk, Google Play traducirá 213 densidad a tvdpi. No estoy seguro de por qué no es una opción en la herramienta de manifiesto de 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" />
Esta página identifica tu problema.
Cuando use <uses-feature>
lugar de <uses-permission>
, Market no filtrará su aplicación, pero espera que maneje dispositivos que no admitan esa característica en el nivel de código.
Para cualquiera de los permisos en esa página anterior, puede desactivar el filtrado basado en la característica implícita al declarar explícitamente la característica implícita explícitamente, en un elemento <uses-feature>
, con un atributo android:required="false"
. Por ejemplo, para desactivar cualquier filtrado basado en el permiso CAMERA, debe agregar esta declaración al archivo de manifiesto:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Sin embargo, cuando especifica <uses-permission>
, se filtran todos los dispositivos que no tienen acceso a esa función.