2012-04-05 18 views
6

Tengo un proyecto android diga proyecto A ... ahora este proyecto proyecto A depende de un proyecto lib de Android, digamos LibX. Ahora LibX depende de otro proyecto de biblioteca de Android, LibY. ¿Cómo puedo construir mi proyecto usando hormiga?Creando un proyecto android haciendo referencia al proyecto de la biblioteca android usando ant/teamcity

Aquí está la documentación androide estoy Hacer referencia a -

http://developer.android.com/guide/developing/projects/projects-cmdline.html

Esto es lo que dice

Al tiempo de construcción, las bibliotecas se combinan con la aplicación de una en una, a partir de la prioridad más baja a la más alta. Tenga en cuenta que una biblioteca no puede hacer referencia a otra biblioteca y que, en tiempo de compilación, las bibliotecas no se fusionan entre sí antes de fusionarse con la aplicación.

¿Hay alguna forma de evitar esto?

+0

¿Cuál es su propósito en incluir Proyecto Biblioteca en otro proyecto de Biblioteca, se puede explicar un poco más acerca de por qué necesitas hacer esto? – yorkw

+0

+1 Estoy teniendo el mismo problema –

+0

El caso de uso que tengo para esto es ActionBarSherlock. Tengo una biblioteca que hace las conexiones web y cosas y UI básica. Hace referencia a ActionBarSherlock. Luego tengo otros proyectos que hacen una interfaz de usuario avanzada en el proyecto de la biblioteca. Un caso de uso razonable que asumiría. –

Respuesta

0

por sitio para desarrolladores de Android: fuente de http://developer.android.com/tools/projects/index.html, la sección en proyectos de bibliotecas:

" ... Estructuralmente, un proyecto de biblioteca es similar a un proyecto estándar aplicación de Android Por ejemplo, se incluye un manifiesto. archivo en el directorio raíz del proyecto , así como src /, res/y directorios similares. El proyecto puede contener los mismos tipos de código fuente y recursos que un proyecto estándar de Android , almacenado de la misma manera. Por ejemplo, fuente el código en el proyecto de biblioteca puede acceder a sus propios recursos a través de su clase R .

Sin embargo, un proyecto de biblioteca difiere de un proyecto estándar de Android aplicación en que no se puede compilar directamente a su propia apk y ejecutar que en un dispositivo Android. Del mismo modo, no puede exportar el proyecto de la biblioteca a un archivo JAR independiente, como lo haría con una verdadera biblioteca . En su lugar, debe compilar la biblioteca indirectamente, por haciendo referencia a la biblioteca en la aplicación dependiente y compilando esa aplicación .

Cuando se construye una aplicación que depende de un proyecto de biblioteca, las herramientas de SDK compilar la biblioteca en un archivo JAR temporal y lo utiliza en el proyecto principal, a continuación, utiliza el resultado para generar el apk. En los casos donde se define un ID de recurso tanto en la aplicación como en la biblioteca , las herramientas garantizan que el recurso declarado en la aplicación tenga prioridad y que el recurso en el proyecto de biblioteca no se compile en la aplicación .apk. Esto le da a su aplicación la flexibilidad para usar o redefinir cualquier comportamiento de recursos o valores que están definidos en cualquier biblioteca.

Para organizar aún más su código, su aplicación puede agregar referencias a proyectos de biblioteca múltiple, luego especifique la prioridad relativa de los recursos en cada biblioteca. Esto le permite acumular los recursos realmente utilizados en su aplicación de forma acumulativa. Cuando dos bibliotecas a las que se hace referencia desde una aplicación definen la misma ID de recurso, , las herramientas seleccionan el recurso de la biblioteca con mayor prioridad y descartan la otra.

Una vez que haya agregado referencias a proyectos de biblioteca a su proyecto Android , puede establecer su prioridad relativa. En tiempo de compilación, las bibliotecas se fusionan con la aplicación de a una por vez, comenzando en con la prioridad más baja hasta la más alta.

Los proyectos de la biblioteca pueden hacer referencia a otros proyectos de la biblioteca y pueden importar una biblioteca externa (JAR) de la forma habitual. ... "

Tuve un problema similar al usar la biblioteca Rajawali (versión 0.9). Hubo una necesidad de distribuir un archivo. Un solo contenedor y las aplicaciones usarían este JAR para visualizar pantallas 3D. fue que nuestra biblioteca era una personalización que usaba los recursos de la biblioteca Rajawali. Así que se crearon dos estructuras de proyecto (como el proyecto de la biblioteca). Al generar, la aplicación JAR que usó los recursos no funcionó por las razones explicadas anteriormente, esto porque la biblioteca utiliza las características Rajawali de las imágenes que se cargarán con identificadores que no fueron reconocidos en la versión de la aplicación de destino.

La solución de la única JAR se puede validar modificando el código para no usar el Rajawal recursos a través de R.raw.X (enfoque de Android) para usar los activos de la carpeta/, y hacer que el componente use Rajawali AsseptManager para abrir recursos. La solución se exportó a la carpeta JAR con los activos internos/y el bytecode (. Class) y nuestro LIB Rajawali.

Por Fat-JAR Eclipse PlugIn (o 0.0.31 +) [sitio de actualización http://kuruczgrafika.de/fatjar] podría generar un único JAR y usarlo en la aplicación de destino. El script ANT se usó para ejecutar el XML a continuación y se generó un archivo JAR. El archivo "lib3d_NAME_HERE.jar" (JAR) se generará en el /build/lib3d_NAME_HERE.jar

<?xml version="1.0"?> 
<project name="lib3d_NAME_HERE" default="main" basedir="."> 

    <property name="projectPath" value="D:\Development\lib3d_NAME_HERE"/> 


    <!-- this file was created by Fat-Jar Eclipse Plug-in --> 
    <!-- the ANT-Export is in a very early stage, so this --> 
    <!-- is only experimental, ANT 1.6 or above is  --> 
    <!-- required, feedback is always welcome:   --> 
    <!--  http://sourceforge.net/projects/fjep  --> 
    <!-- uncomment the following lines if using ANT outside Eclipse --> 
    <!-- 
     <property name="fjepPath" value="reference:file:plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/> 
     <taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/> 
     <typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/> 
    --> 
    <!-- uncomment the above lines to use ANT outside of Eclipse --> 
    <target name="main"> 
     <fatjar.build output="build/lib3d_NAME_HERE.jar"> 
      <fatjar.manifest/> 
      <fatjar.filesource path="${projectPath}/bin/classes" relpath=""/> 
      <fatjar.filesource path="${projectPath}/assets/" relpath="assets"/> 
     </fatjar.build> 
    </target> 
</project> 
Cuestiones relacionadas