2012-07-02 13 views
8

Sigo volviendo a este problema, ya que no parece haber una solución limpia. ¿Alguien tiene una buena estrategia para excluir recursos de un proyecto secundario en Android?Inclusión/exclusión de recursos condicional para Android apk build

Tengo dos escenarios:

1 - proyecto de la biblioteca Base tiene archivos de localización para en, es, etc.

proyecto --Child 1 utiliza todas las localizaciones, y todo es bueno

- -Child project 2 está localizado solo en inglés, pero el .apk final tendría una localización parcial debido a los recursos principales (aunque ADT19 más o menos agregó reglas de Lint para advertirte/evitar que lo hagas).

La única solución que tengo para esto ahora es tener una biblioteca principal independiente para la localización, y solo incluirla en el proyecto secundario 1. Esto es un gran problema si tiene muchos proyectos de biblioteca.

2 - Exclusión de recursos específicos de compilación. Tengo algunas imágenes que solo son necesarias para mis compilaciones específicas de Nook de mis aplicaciones, que se desencadenan mediante un indicador. El código condicional funciona muy bien, pero los recursos siempre están incluidos.

Preferiría no crear otro proyecto secundario para CADA UNA de mis aplicaciones. ¿Hay alguna manera de establecer un indicador de compilación/compilación para eliminar recursos de imágenes específicos para que no entren en el .apk final?

El segundo problema puede ser específico para mí, pero me sorprende que no pueda encontrar una buena discusión sobre el primer punto. ¿No hay otros desarrolladores que solo encuentren algunas aplicaciones? ¿O la mayoría de la gente simplemente ignora el problema?

+0

He visto hablar sobre cómo agregar archivos a una.apk, pero estoy buscando algo un poco más parecido a ProGuard: automático e integrado en las herramientas en lugar de piratear el .apk final. – ProjectJourneyman

+0

Sus escenarios son factibles mediante el uso de herramientas de compilación externa como Ant o Maven, ambos proporcionan habilidades para controlar cada paso durante el proceso de compilación (compilación, dex, empaquetado, etc.). si utiliza Maven, excluir recursos es bastante fácil a través de [maven-resource-plugin] (http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html). – yorkw

+0

Es posible que tenga que ir por ese camino. Esperaba una solución más limpia (e idealmente más simple). – ProjectJourneyman

Respuesta

3

1 - proyecto de la biblioteca Base tiene archivos de localización para en, es, etc.

Tiene dos proyectos que usan esta biblioteca, y sólo uno de ellos tiene todas las traducciones. Por lo tanto, esas traducciones podrían estar en el proyecto usando la biblioteca y necesitando las traducciones, no en la biblioteca misma. Esto no es diferente de cualquier otro proyecto que personalice recursos de una biblioteca (por ejemplo, reemplazar iconos, reemplazar diseños).

Ahora, una vez que empiezas a entrar en mezclas más complicadas (por ejemplo, dos proyectos necesitan las traducciones y un tercero no), entonces comienzas a tener problemas.

Exclusión de recursos específicos de compilación. Tengo algunas imágenes que solo son necesarias para mis compilaciones específicas de Nook de mis aplicaciones, que se desencadenan mediante un indicador. El código condicional funciona muy bien, pero los recursos siempre están incluidos.

Xav y yo hablamos un poco acerca de los recursos condicionales in this issue. Su atención se centra en la depuración frente a la producción (recurso equivalente a BuildConfig.DEBUG), pero parece que es una posibilidad algo más flexible.

Ambas cosas podrían manejarse mediante un script de compilación de lanzamiento personalizado. En construcciones de depuración normales, lo dejarías todo solo; en una compilación de producción, haga que una secuencia de comandos Ant procese una copia del proyecto, recorte los directorios que no son necesarios, antes de compilar, firmar y zipaligning.

+0

Eso es lo que he hecho para project3, que tiene una traducción única al italiano (y por lo tanto algunos pocos archivos strings_libx.xml correspondientes a libs padre). Sin embargo, mi árbol de bibliotecas y aplicaciones se está volviendo más complejo y no me agrada agregar complejidad (complejidad de mantenimiento debido a archivos de cadenas duplicados o complejidad del espacio de trabajo con LibX para dividir recursos de idiomas). Sin embargo, creo que la escritura puede estar en la pared: necesito profundizar en las herramientas y escribir algunas acciones para reducir la producción. – ProjectJourneyman

+0

Todavía no he encontrado el tiempo para construir algunos scripts Ant, pero estoy empezando a pensar que realmente es la solución correcta. A medida que mis necesidades se vuelven más complejas, no hay sustituto para la flexibilidad de mis propios scripts. No creo que la bandera DEBUG ofrecerá suficiente capacidad de configuración. Además, si espero lo suficiente, se finalizará el nuevo sistema de compilación de Android con Gradle y puedo aprenderlo: http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman