Permisos duplicados del manifiesto de Android
Tenemos una aplicación que consiste en una biblioteca de terceros (altbeacon), una librería Android construida localmente y un componente de aplicación. Los tres componentes tienen un AndroidManifest.xml que se fusionan durante la compilación. La aplicación se crea utilizando gradle.
Esta aplicación se publicó por mucho tiempo en Google Play Store. En la última iteración actualizamos desde el nivel API 22 hasta 25. Todo construido sin errores, el APK fue instalado y probado en dispositivos reales sin error, pero cuando llegamos a actualizar la aplicación en Google Play, la carga del APK falló el error:
- Obtener el conteo de descarga de la aplicación del mercado de android
- ¿Cuál es el costo de ingreso / membresía en el Marketplace de Android?
- Cómo averiguar por qué un dispositivo Android no es compatible con un APK
- ¿Cómo forzar PhoneGap Android aplicación para realizar la actualización automática?
- ¿Por qué mi aplicación no aparece en tablets en Google Play?
Subida fallida
Declaraciones duplicadas de permiso android.permission.ACCESS_COARSE_LOCATION con diferentes maxSdkVersions.
Anaylyzing el AndroidManaifest.xml encontramos org.altbeacon.beacon tiene el siguiente permiso:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="23" /> <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
Nuestro módulo de biblioteca local de Android, el targetSdkVersion se establece en 25 en build.gradle y el AndroidManifest.xml contiene:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
En el módulo de aplicación, la variable targetSdkVersion se establece en 25 en build.gradle.
El AndroidManifest.xml generado en el módulo de la aplicación contiene:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
Y sólo para confirmar, buscando en el propio APK y extraer el manifiesto binario:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE E: uses-permission (line=62) A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION") -- E: uses-permission-sdk-23 (line=76) A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
Así que hay una etiqueta duplicada, y creo que la fusión manifiesto debería haber reconocido que y eliminado el de la biblioteca altbeacon. Mi pregunta es ¿cómo puedo eliminar el permiso de la biblioteca altbeacon?
He intentado lo siguiente en el módulo de aplicación AndroidManifest.xml:
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" tools:selector="org.altbeacon.beacon"/>
Esto resulta en:
AndroidManifest.xml:12:5-15:48 Warning: uses-permission-sdk-23 was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
y
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" tools:selector="org.altbeacon.beacon"/>
Esto resulta en:
AndroidManifest.xml:12:5-15:48 Warning: uses-permission was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
Lo siguiente funciona, pero elimina la etiqueta errónea, elimina la de la biblioteca local de Android que creamos como parte de nuestra aplicación.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
Se deja el permiso org.altbeacon.beacon:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE E: uses-permission-sdk-23 (line=72) A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
Lo cual es insatisfactorio porque si el permiso en la biblioteca org.altbeacon.beacon chamge, o se elimina en el futuro, ACCESS_COARSE_PERMISSION faltará en nuestra aplicación.
¿Alguna sugerencia sobre cómo arreglar esto correctamente?
- Obtener un ID de usuario de Google Play Services?
- Facturación de Google Play en aplicaciones que ofrece un elemento de forma gratuita
- Aplicación de Android que debe instalarse sólo en el teléfono y no en las tabletas
- ¿Estoy consiguiendo los pasos correctos para verificar la suscripción de Android de un usuario en la aplicación?
- ¿Es posible depurar localmente la facturación en la aplicación de Google Play en Android Studio?
- API de Valoración de KitKat de Android 4.4
- ¿Cómo enlazar la cuenta de usuario de la aplicación pagada con el sistema?
- Determine el país Play Store
En el archivo de manifiesto de la aplicación, agregue la regla de fusión de abajo.
<uses-permission-sdk-23 tools:node="removeAll" />
Asegúrese de haber añadido el permiso de ubicación.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Simplemente reemplace debajo de la línea a su permiso de uso existente resolvería los problemas.
Lo que esto causa porque agregó el permiso duplicado en el manifiesto pero por debajo de la línea divide el permiso.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="22"/>
- Picasso java.lang.IllegalStateException: La llamada al método no debería ocurrir desde el hilo principal
- La mejor manera de ejecutar periódicamente AsyncTasks en Android