Dudo en hacer esta pregunta, porque parece que muchas personas tienen un problema similar y, sin embargo, no he encontrado una solución que resuelva mi caso particular.
Desarrollé una aplicación para Android ( enlace a la aplicación real ) y la cargué en Play Store. La Play Store dice
"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."
Por supuesto, ese es el teléfono en el que desarrollé la aplicación, por lo que debería ser compatible. Algunas personas con otros dispositivos dicen que informa que es compatible, otras dicen que informa que es incompatible, pero no encuentro ninguna tendencia. (Aparentemente, no conozco a mucha gente con dispositivos Android).
He probado lo siguiente:
mover un archivo de gran tamaño fuera del
res/raw
directorio como lo sugiere esta respuesta . El único archivo allí era un archivo de texto de ~ 700 kB, pero lo movíassets/
sin cambios aparentes.agregando las siguientes dos afirmaciones de características:
<uses-feature android:name="android.hardware.faketouch" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
pensando que tal vez mi teléfono no pretende admitir la
android.hardware.touchscreen
función habitual , pero nuevamente, sin cambios aparentes.
Al cargar el APK en Play Store, el único filtro que informa como activo es la android.hardware.faketouch
función.
El siguiente es el resultado de aapt dump badging bin/NZSLDict-release.apk
:
package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
sdkVersion:'4'
targetSdkVersion:'4'
uses-feature:'android.hardware.faketouch'
uses-feature-not-required:'android.hardware.touchscreen'
application-label:'NZSL Dictionary'
application-icon-160:'res/drawable/icon.png'
application: label='NZSL Dictionary' icon='res/drawable/icon.png'
launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary' label='NZSL Dictionary' icon=''
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--'
densities: '160'
y para completar, mi archivo de manifiesto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hewgill.android.nzsldict"
android:versionCode="3"
android:versionName="1.0.2">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
<uses-feature android:name="android.hardware.faketouch" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<application android:label="@string/app_name"
android:icon="@drawable/icon">
<activity android:name="NZSLDictionary"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".WordActivity" />
<activity android:name=".VideoActivity" />
<activity android:name=".AboutActivity" />
</application>
</manifest>
En la sección "Disponibilidad del dispositivo" de Play Store, puedo ver que todos los dispositivos HTC, incluido el Wildfire S, son compatibles, excepto "G1 (trucha)" y "Touch Viva (ópalo)", sean los que sean. En realidad, veo que tanto "Wildfire S (marvel)" como "Wildfire S A515c (marvelc)" se enumeran como compatibles, pero mi "Wildfire S A510b" no se menciona específicamente. ¿Puede ser tan importante este tipo de identificador de submodelo? He podido descargar varias otras aplicaciones de Google Play a mi teléfono sin problemas.
Lo único que no he hecho en este momento es esperar de 4 a 6 horas después de cargar la última versión (como en este comentario ) para ver si todavía dice que es incompatible con mi teléfono. Sin embargo, la página de Play Store muestra actualmente 1.0.2, que es la última que he subido.
fuente
handleSilentException
método para informar en silencio. Al menos le dirá en qué hardware está trabajando la aplicación.Respuestas:
La respuesta parece estar relacionada únicamente con el tamaño de la aplicación. Creé una aplicación simple de "hola mundo" sin nada especial en el archivo de manifiesto, la cargué en Play Store y se informó que era compatible con mi dispositivo.
No cambié nada en esta aplicación, excepto agregar más contenido al
res/drawable
directorio. Cuando el.apk
tamaño alcanzó los 32 MB, Play Store comenzó a informar que mi aplicación no era compatible con mi teléfono.Intentaré ponerme en contacto con el servicio de asistencia para desarrolladores de Google y solicitar una aclaración sobre el motivo de este límite.
ACTUALIZACIÓN : Aquí está la respuesta de soporte para desarrolladores de Google a esto:
Terminé resolviendo mi problema convirtiendo todos los archivos PNG a JPG, con una pequeña pérdida de calidad. los
.apk
archivo ahora tiene 28 MB, que está por debajo del umbral que Google Play está imponiendo para mi teléfono.También eliminé todas las
<uses-feature>
cosas, y ahora solo tengo esto:fuente
También me encontré con esto: hice todo mi desarrollo en un Lenovo IdeaTab A2107A-F y pude ejecutar compilaciones de desarrollo en él, e incluso lanzar APK firmados (instalados con
adb install
) sin problemas. Una vez que se publicó en el modo de prueba Alfa y estuvo disponible en Google Play, recibí el mensaje de error "incompatible con su dispositivo".Resulta que había colocado en mi
AndroidManifest.xml
lo siguiente de un tutorial:Bueno, el Lenovo IdeaTab A2107A-F no tiene una cámara de enfoque automático (que aprendí de http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611 , en Contras: carece de cámara de enfoque automático). Independientemente de si estaba usando esa función, Google Play dijo que no. Una vez que se eliminó, reconstruí mi APK, lo cargué en Google Play y, efectivamente, mi IdeaTab estaba ahora en la lista de dispositivos compatibles.
Por lo tanto,
<uses-feature>
vuelva a verificar cada y si ha estado haciendo algo de copiar y pegar desde la web, vuelva a verificar. Lo más probable es que hayas solicitado alguna función que ni siquiera estás usando.fuente
También he experimentado este problema mientras desarrollaba una aplicación para un cliente que quería tener videos sin conexión disponibles desde su aplicación. Escribí una publicación de blog sobre por qué la aplicación en la que trabajé durante meses no aparecía en Play Store para mi dispositivo (la publicación se puede encontrar aquí ). Encontré lo mismo que encontró @Greg Hewgill: limitaciones de partición de caché en algunos dispositivos .
El viaje no se detuvo allí para mí. El cliente quería tener estos videos en la aplicación y no quería que se redujera la calidad del video. Después de investigar un poco, descubrí que usar archivos de expansión era la solución perfecta a nuestro problema.
Para compartir mis conocimientos con la comunidad de Android, realicé una charla en droidconNL 2012 sobre archivos de expansión. Creé una presentación y un código de muestra para ilustrar lo fácil que puede ser comenzar a usar archivos de expansión. Para cualquiera de ustedes que desee usar archivos de expansión para resolver este problema, no dude en consultar la publicación que contiene la presentación y el código de muestra.
fuente
Es posible que desee probar y establecer el atributo soportes-pantallas:
El Wildfire tiene una pantalla pequeña y, de acuerdo con la documentación, este atributo debería ser "verdadero" en todos los casos, pero hay problemas conocidos con la configuración de pantallas de soporte en diferentes teléfonos, por lo que probaría esto de todos modos.
Además, como sugiere David, siempre compile y apunte a la versión más actual de la API de Android, a menos que tenga fuertes razones para no hacerlo. Prácticamente todos los SDK anteriores a la 2.2 tienen problemas graves o comportamientos extraños; la ayuda de este último SDK para resolver o encubrir muchos (aunque no todos) de ellos. Puede (y debe) utilizar la herramienta Lint para comprobar que su aplicación sigue siendo compatible con API 4 al preparar una versión.
fuente
Finlay, he enfrentado el mismo problema en mi solicitud. He desarrollado la aplicación Phone Gap para
android:minSdkVersion="7" & android:targetSdkVersion="18"
que es una versión reciente de la plataforma Android.He encontrado el problema al usar Google Docs
El problema puede ser que escribí alguna función JS que funciona
KEY-CODE
para validar solo alfabetos y números, pero el teclado tiene un código de tecla diferente, especialmente para el teclado de computadora y el teclado móvil. Así que ese era mi problema.No estoy seguro de si mi respuesta es correcta o no y es posible que pueda sonreír más a la respuesta anterior, pero intentaré enumerar algunos puntos que deben tenerse en cuenta mientras creamos la aplicación. resolver este tipo de problema.
Utilice el
android:minSdkVersion="?"
según sus requisitos yandroid:targetSdkVersion="?"
debe ser el último al que se dirigirá su aplicación. ver másIntente agregar solo los permisos que se usarán en su aplicación y elimine todos los que sean innecesarios.
Consulte la pantalla compatible por aplicación
Es posible que haya implementado algún código de vestuario o widget de vestuario que no pudo ejecutarse en algún dispositivo o pestaña tarde, así que antes de escribir el código largo, primero intente escribir un código beta y pruébelo si su código se ejecutará en todos los dispositivos o no .
Y espero que Google publique una herramienta que pueda validar su código antes de cargar la aplicación y también diga que debido a alguna razón específica no podemos ejecutar su aplicación en algún dispositivo para que podamos resolverlo fácilmente.
fuente
Tengo un par de sugerencias:
En primer lugar, parece que está utilizando API 4 como su objetivo. AFAIK, es una buena práctica compilar siempre con el último SDK y configurarlo en
android:minSdkVersion
consecuencia.Con eso en mente, recuerde que el
android:required
atributo se agregó en API 5 :Por lo tanto, le sugiero que compile con el SDK 15, que también lo configure
targetSdkVersion
en 15, y proporcione esa funcionalidad.También se muestra aquí, en el sitio de Play, como incompatible con cualquier dispositivo que tenga que sea (¿coincidencia?) Gingerbread (Galaxy Ace y Galaxy Y aquí). Pero parece compatible con mi Galaxy Tab 10.1 ( Honeycomb ), Nexus S y Galaxy Nexus (ambos en ICS ).
Eso también me dejó preguntándome, y esta es una suposición muy descabellada, pero dado que
android.hardware.faketouch
es API11 + , ¿por qué no intentas eliminarlo solo para ver si funciona? O tal vez todo eso esté relacionado de todos modos, ya que está tratando de usar las funciones (faketouch
) y elrequired
atributo que no están disponibles en la API 4. Y en este caso debería compilar con la última API.Lo intentaría primero y quitaría el
faketouch
requisito solo como último recurso (por supuesto) --- dado que funciona durante el desarrollo, diría que es solo una cuestión de que la aplicación compilada no reconozca la función (debido a los requisitos del SDK) , lo que deja problemas de filtrado inesperados en Play.Lo siento si esta suposición no responde a su pregunta, pero es muy difícil diagnosticar ese tipo de problemas y determinar la solución sin probarlo. O al menos para mí sin el conocimiento adecuado de cómo Play realmente filtra las aplicaciones.
Buena suerte.
fuente
<uses-feature>
etiqueta, eso fue un intento de hacerlo compatible con más dispositivos en lugar de menos. Intentaré cambiar las etiquetas de la versión del SDK, que parece ser el enfoque más probable. Debo agregar que uséminSdkVersion="4"
porque esa versión ya no implicaba algunos permisos (leer el estado del teléfono, modificar la tarjeta SD) que mi aplicación no necesita.android:minSdkVersion="5" android:targetSdkVersion="15"
tampoco ayudó. Me he puesto en contacto con el servicio de asistencia para desarrolladores de Google Play y espero que me puedan decir por qué. Seguro que sería bueno si el motivo del filtrado se mostrara en la página de la aplicación Play.faketouch
comorequired= false
?<uses-feature>
etiquetas porque el soporte de Google me dijo que la razón por la que no estaba disponible para mi dispositivo era debido a laandroid.hardware.faketouch
función. Eso parece ridículo, especialmente porque una de mis versiones anteriores tampoco tenía las<uses-feature>
etiquetas, pero lo que sea. Estoy esperando su respuesta y no quiero confundirlos subiendo otra versión. Sería bueno si hubiera una forma de probar esto sin cargar y publicar nuevos APK repetidamente.Permisos que implican requisitos de funciones
Por ejemplo, la función android.hardware.bluetooth se agregó en Android 2.2 (API nivel 8), pero la API de bluetooth a la que se refiere se agregó en Android 2.0 (API nivel 5). Debido a esto, algunas aplicaciones pudieron usar la API antes de poder declarar que requieren la API a través del sistema.
Para evitar que esas aplicaciones estén disponibles involuntariamente, Google Play asume que ciertos permisos relacionados con el hardware indican que las funciones subyacentes del hardware son necesarias de forma predeterminada. Por ejemplo, las aplicaciones que usan Bluetooth deben solicitar el permiso BLUETOOTH en un elemento; para las aplicaciones heredadas, Google Play asume que la declaración de permiso significa que la aplicación requiere la función android.hardware.bluetooth subyacente y configura el filtrado en función de esa función .
La siguiente tabla enumera los permisos que implican requisitos de funciones equivalentes a los declarados en los elementos. Tenga en cuenta que las declaraciones, incluido cualquier atributo android: required declarado, siempre tienen prioridad sobre las características implícitas en los permisos a continuación.
Para cualquiera de los permisos a continuación, puede deshabilitar el filtrado basado en la característica implícita declarando explícitamente la característica implícita explícitamente, en un elemento, con un atributo android: required = "false". Por ejemplo, para deshabilitar cualquier filtrado basado en el permiso CÁMARA, agregaría esta declaración al archivo de manifiesto:
http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions
fuente
Para dar una solución adicional al problema anterior 'Esta aplicación es incompatible con su ...', permítame compartir mi solución para una causa diferente del problema. Intenté instalar una aplicación en un dispositivo Samsung Galaxy Y (GT-S6350) de gama baja y obtuve este error en Play Store. Para probar varias configuraciones de AndroidManifest, creé una cuenta y seguí la rutina como se describe en https://stackoverflow.com/a/5449397/372838 hasta que mi dispositivo apareció en la lista de dispositivos compatibles.
Resultó que muchos dispositivos se vuelven incompatibles cuando usa el permiso de la cámara:
<uses-permission android:name="android.permission.CAMERA" />
Cuando eliminé ese permiso específico, la aplicación estaba disponible para 1180 dispositivos en lugar de 870. Espero que ayude a alguien
fuente
Típico, lo encontré justo después de publicar esta pregunta desesperado; la herramienta que estaba buscando era:
fuente
Aunque ya hay bastantes respuestas, pensé que mi respuesta podría ayudar a algunos que tienen exactamente el mismo problema que el mío. En mi caso, el problema es causado por los siguientes permisos agregados por sugerencia de una red publicitaria:
La consecuencia de los permisos anteriores es que las siguientes funciones se agregan automáticamente:
El motivo es que "Google Play intenta descubrir los requisitos de funciones implícitos de una aplicación examinando otros elementos declarados en el archivo de manifiesto, específicamente, elementos". Dos de mis dispositivos de prueba no tienen las funciones anteriores, por lo que la aplicación se volvió incompatible con ellas. Eliminar esos permisos resolvió el problema de inmediato.
fuente
Encontré una forma adicional en la que ocurre este problema:
el sistema operativo original de mi teléfono LG era Froyo (Android 2.2) y se actualizó a ICS (Android 4.0.4). Pero la consola de desarrolladores de Google Play muestra que detecta mi teléfono como un dispositivo Froyo. (Google Play no permitió la descarga de la aplicación debido a la falsa 'incompatibilidad', pero de alguna manera aún detecta la instalación).
La configuración del teléfono, en 'software', muestra ICS V4.0.4. Parece que la información del servidor de Google Play para el teléfono no se actualiza para reflejar la actualización de ICS en el dispositivo. El manifiesto de la aplicación minSDK está configurado en Honeycomb (3.0), por lo que, por supuesto, Google Play filtra la aplicación.
De interés adicional:la aplicación utiliza In-app Billing V3. La primera vez a través de IabHelper permite que la aplicación realice compras a través del servicio Google Play. Pero después de que se realiza la compra, la compra NO se coloca en el inventario e IabHelper informa que no se posee ningún artículo. Los mensajes de depuración muestran un resultado de "compra fallida" a pesar de que la ventana de Google Play anuncia "compra exitosa".
fuente
Yo tuve el mismo problema. Fue causado por tener diferentes códigos de versión y números en mi manifiesto y script de compilación de Gradle. Lo resolví eliminando el código de versión y el número de versión de mi manifiesto y dejando que Gradle se encargara de ello.
fuente
También tuve el mismo problema. Publiqué una aplicación en modo de prueba creada con React Native 59. No era compatible con ciertos probadores. El mensaje no estaba claro sobre por qué la aplicación no es compatible, después de que descubrí que restringí la aplicación para que estuviera disponible solo para ciertos países. ese era el problema, pero como dije, el mensaje no era claro. en Play Store WebApp el mensaje es: "esta aplicación no es compatible con su dispositivo". en la aplicación móvil el mensaje "Esta aplicación no está disponible en su país"
fuente
Si está aquí en 2020 y cree que el dispositivo que recibe el mensaje de error debería ser compatible:
[ https://support.getupside.com/hc/en-us/articles/226667067--Device-not-compatible-error-message-in-Google-Play-Store]
Aquí hay un enlace a la página de soporte oficial de Google que puede vincular a sus usuarios sobre cómo borrar el caché: https://support.google.com/googleplay/answer/7513003
fuente