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
- Compatibilidad con versiones anteriores del diseño del material: colorAccent requiere el nivel 21 de API cuando se utiliza appcompat7
- Cómo crear una biblioteca de Android desde el código que tienen gradle dependencia?
- Clases duplicadas R & BuildConfig después de "Reimport All Maven Projects"
- Android Studio gradle sync no pudo encontrar la biblioteca
- Cómo obtener cobertura de código en Android usando Maven (android-maven-plugin)
- Bintray: No se pueden cargar archivos: el grupo Maven, el artefacto o la versión definidos en el archivo pom no coinciden
- Android: Nombre del archivo final de Maven
- Adición de dependencias de Maven a Gradle en Android Studio
- Error de compilación de Gradle: No se pueden cargar metadatos de Maven desde https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml
- Adición de un proyecto Eclipse "Biblioteca Android" y construcción a través de Maven
- ¿Cómo hacer que Android Studio descargue fuentes de dependencias y javadoc?
- Error de compilación de Android en Crosswalk
- Error en la compilación de Android Gradle: no se pudo encontrar com.google.android:support-v4:r18
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/
- Realm: cómo cerrar una instancia de dominio con una transacción asíncrona
- Menú Android: dos grupos de una sola comprobación en el mismo menú