Pasar propiedades al archivo de compilación del proyecto de la biblioteca de Android

Tengo un proyecto de aplicación de Android que se divide en una versión gratuita y una de pago. Todo lo que es común a ambos proyectos reside en un proyecto de biblioteca de Android llamado "núcleo". Entonces tengo proyectos reales de la aplicación de Android tanto para el pago y la versión gratuita.

Estoy usando scripts Ant para construir estos dos APK. La versión de pago establece una propiedad que indica el proyecto "núcleo" que la versión de pago está creando. La versión gratuita le dice al proyecto central que la versión gratuita está construyendo.

Eso funcionaba perfectamente hasta que Google decidió lanzar ADT 22. Ahora el proyecto "core" no recupera estas propiedades de construcción.

Sospecho que los proyectos de biblioteca se construyen ahora en un entorno / proceso de creación de hormigas independiente.

Así que aquí está mi pregunta: ¿cómo puedo definir las propiedades de los proyectos de bibliotecas de referencia en el archivo build.xml de un proyecto de la aplicación? ¿Cómo pasar las propiedades a estas compilaciones de proyectos de bibliotecas?

¿Y dónde está compilado el archivo build.xml del SDK? Supongo que sería el lugar adecuado para mirar.

Gracias por tu tiempo.

EDIT para aclaración

Tienes que crear una copia modificada del archivo build.xml original desde el SDK de Android (véase SDK-Folder/tools/ant ) y mantenerla actualizada de vez en cuando cuando Google libera una actualización de ADT fusionando las diferencias ( Y mantener las propias modificaciones por supuesto).

El archivo build.xml genera proyectos de biblioteca utilizando una tarea <subant> , que básicamente inicia un entorno de compilación independiente que no ve automáticamente las propiedades del ámbito de llamada (que sería el entorno de compilación del proyecto de la aplicación).

Sin embargo, dentro de esa etiqueta de subant , puede exportar las propiedades del ámbito de la persona que llama a la compilación de la biblioteca utilizando una etiqueta <propertyset> . Busque el siguiente bloque de código en su copia de build.xml y realice una modificación como se muestra a continuación:

 .... <echo level="info">Building Libraries with '${project.libraries.target}'...</echo> <!-- no need to build the deps as we have already the full list of libraries --> <subant failonerror="true" buildpathref="project.library.folder.path" antfile="build.xml"> <!-- *** ADD THIS: *** --> <propertyset id="project.library.buildargs"> <propertyref prefix="project.library.buildargs" /> </propertyset> <target name="nodeps" /> <target name="${project.libraries.target}" /> <property name="emma.coverage.absolute.file" location="${out.absolute.dir}/coverage.em" /> </subant> .... 

El ejemplo anterior hace que todas las propiedades de proyecto de proyecto build.xml tengan el prefijo project.library.buildargs. Visible para todos los scripts de compilación de la biblioteca Android.

Una solución alternativa que he encontrado para proporcionar diferentes valores para mi versión gratuita vs mi versión de pago es utilizar [recursos]. La cadena de compilación de Android permite que los proyectos de aplicación sobrescriban los valores de recursos establecidos en el proyecto de biblioteca compartida.

Por ejemplo, puede tener un recurso booleano en cualquier archivo XML en res/values :

 <bool name="paid_version">false</bool> 

Por supuesto, la versión de pago tiene el mismo recurso en su propio subdirectorio res/values con un valor de true .

A continuación, desde una subclase de Activity o cualquier otra clase con un Context , puede hacer lo siguiente:

 if (getResources().getBoolean(R.id.paid_version)) { // Do the paid version code here } 

Esto tiene la ventaja de que es bastante fácil de implementar. En el lado negativo, se trata de un control de tiempo de ejecución basado en código dinámico. Esto significa que el código no puede ser optimizado por el compilador o cualquier otra herramienta de análisis estático cuando el valor del recurso se establece en false .

  • SDK.DIR falta? Android proyecto de actualización?
  • La cobertura externa de Api de Android no viene
  • ¿Cómo convertir un proyecto Eclipse Android para usar Ant para construir?
  • NoClassDefFoundError - Eclipse y Android
  • Android Ant Build
  • Excluyendo eclipse excluye en un script de hormigas
  • Diferencia entre build.xml y project_name.xml
  • Construir y ejecutar el proyecto android teniendo un subproyecto en la línea de comandos usando ant depuración
  • Referencia android.target.classpath no encontrada
  • ¿Cómo incluir JAR en APK sin Eclipse?
  • ¿Cómo hago referencia a los archivos jar externos en un directorio común (no libs) para construir el proyecto android usando hormiga?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.