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:

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?

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"/> 
  • Esta aplicación no se ejecutará a menos que actualice el error de Google Play Services
  • ¿Cómo cambiar una aplicación de Android para pagar después de configurar la cuenta de Google Merchant?
  • No se puede encontrar la aplicación en Play Store por nombre
  • Asegúrate de que la aplicación de Android se haya instalado desde Play-Store
  • MGoogleApiClient no se puede lograr en otra actividad
  • ¿Puedo validar completamente las renovaciones de suscripción en la aplicación de Google Play por el servidor?
  • ¿Cómo hacer que la aplicación android esté disponible para tablets y pre 11 sdk?
  • El manifiesto de Android utiliza permisos contra las especificaciones de dispositivos Android
  • Cómo publicar la tableta solo la aplicación de Android con elementos de dibujo vectorial
  • Subir la aplicación de Android a Google Play paso a paso ...?
  • Aplicación Android no disponible para descarga en Isla de Man
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.