Plugin de maven de Android: renameManifestPackage resultados en Resources $ NotFoundException

Encontré el siguiente problema: La aplicación que implemente incluye otro proyecto como una dependencia (de tipo aar). Ambos proyectos comparten el mismo padre pom. La dependencia incluye recursos, que la aplicación está utilizando. Para acceder a los recursos dentro del proyecto de biblioteca, el identificador de recursos se obtiene llamando context.getResources().getIdentifier(resourceKey, resourceType, packageName) . Recibo el nombre del paquete llamando a getPackageName() en el objeto de context dado. Antes de cambiar los nombres de los paquetes de los proyectos

 <renameManifestPackage>com.example.newpackagename</renameManifestPackage> 

El acceso a los recursos de la biblioteca funcionó bien. Pero después de renombrar el nombre del paquete de la aplicación obtengo un android.content.res.Resources$NotFoundException porque la llamada getIdentifier() todavía espera el nombre del paquete antiguo de la aplicación y llamando getPackageName() devuelve el nuevo (como se esperaba).
Ahora me pregunto si me estoy perdiendo algo o si esto es un error en el complemento android maven? Https://github.com/simpligility/android-maven-plugin

La respuesta es: echaba de menos algo. He abierto un boleto con respecto a este problema en el sitio del proyecto ( https://github.com/simpligility/android-maven-plugin/issues/736 ). Resultó que lo que he visto como un problema es el comportamiento esperado de la configuración renameManifestPackage , ya que renombrar no sólo el paquete de manifiesto, sino también los recursos está fuera de alcance para esta configuración.

Hay, sin embargo, una solución no demasiado fea para esto:

En lugar de recuperar el nombre del paquete desde el objeto Context , es posible recuperarlo desde el objeto Resources . Aquí viene la parte donde se pone un poco feo: Un recurso con el único propósito de recuperar el nombre del paquete necesita ser agregado ya que otros recursos suelen ser temas a cambiar:

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- The only purpose of this resource is to retrieve the resource package name --> <item name="used_for_package_name_retrieval" type="id"/> </resources> 

Ahora puede recuperar el nombre del paquete de recursos de la siguiente manera:

 Resources resources = context.getResources(); String packageName = resources.getResourcePackageName(R.id.used_for_package_name_retrieval); 

El crédito va a: http://www.piwai.info/renaming-android-manifest-package/

  • ¿Cómo publicar una biblioteca de Android como un artefacto Maven en Bitbucket?
  • MAVEN SDK no válido: Nivel de plataforma / API 16 no disponible
  • Java.lang.UnsatisfiedLinkError después de actualizar a Android 5.0
  • Error de ejecución de la tarea ': bintrayUpload'.
  • ¿Cómo puedo hacer mi proyecto de Android disponible desde el control remoto usando gradle como Picasso, Volley, etc?
  • ¡Está faltando android.compileSdkVersion! Error gradle build
  • Maven archétype para un proyecto android
  • Android + Maven "No se encontró ningún identificador de recurso para el atributo 'installLocation' en el paquete 'android'"
  • Plugin de Android Maven apklib Mojo no incluye R compilado en apklib resultante
  • Android - Proguard con httpcore y httpmime con Android Studio y Gradle
  • AdMob de Android y Maven
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.