2012-04-05 15 views
6

Ho ottenuto un progetto Android dire progetto A .. ora questo progetto di progetto A dipende da un progetto di lib Android dire LibX. Ora LibX dipende da un altro progetto di libreria Android LibY. Come posso costruire il mio progetto usando formica.Creazione di un progetto Android che fa riferimento a un progetto di libreria Android utilizzando ant/teamcity

Ecco la documentazione Android sto referenziazione a -

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

Ecco cosa dice

al momento della compilazione, le librerie sono fusi con l'applicazione, uno alla volta, a partire dalla priorità più bassa al più alto. Si noti che una libreria non può riferirsi a un'altra libreria e che, al momento della compilazione, le librerie non vengono unite l'una con l'altra prima di essere unite con l'applicazione.

C'è un modo per aggirare questo?

+0

Qual è il vostro scopo a referenziare la Biblioteca di progetto in un altro progetto Biblioteca, si può spiegare un po 'di più sul perché hai bisogno di fare questo? – yorkw

+0

+1 Ho lo stesso problema –

+0

Il caso d'uso che ho per questo è ActionBarSherlock. Ho una libreria che fa le connessioni web e cose e l'interfaccia utente di base. Fa riferimento a ActionBarSherlock. Poi ho altri progetti che fanno l'interfaccia utente avanzata sul progetto della biblioteca. Un caso d'uso ragionevole che assumerei. –

risposta

0

dal sito dello sviluppatore Android: fonte in http://developer.android.com/tools/projects/index.html, sezione alla Biblioteca Progetti:

" ... Strutturalmente, un progetto di libreria è simile ad un progetto standard di Android applicazione, ad esempio, include un manifesto. file nella root del progetto e nelle directory src /, res/e simili Il progetto può contenere gli stessi tipi di codice sorgente e risorse di un progetto Android standard , memorizzato nello stesso modo. Ad esempio, source il codice nel progetto della biblioteca può accedere alle proprie risorse tramite la sua classe R .

Tuttavia, un progetto di libreria si differenzia da un progetto standard di Android applicazione in quanto non è possibile compilare direttamente alla propria .apk e correre su un dispositivo Android. Allo stesso modo, non è possibile esportare il progetto libreria in un file JAR autonomo, come si farebbe per una vera libreria . Invece, è necessario compilare la libreria indirettamente, tramite facendo riferimento alla libreria nell'applicazione dipendente e creando tale applicazione .

Quando si crea un'applicazione che dipende da un progetto di libreria, gli strumenti SDK compilare la libreria in un file JAR temporanea e la utilizza in il progetto principale, quindi utilizza il risultato per generare il .apk. Nei casi in cui un ID di risorsa è definito sia l'applicazione e la libreria , gli strumenti in modo che la risorsa dichiarata nella domanda ottiene la priorità e che la risorsa nel progetto di libreria non è compilato nella .apk dell'applicazione. Ciò dà all'applicazione la flessibilità di utilizzare o ridefinire qualsiasi comportamento di risorsa o valori definiti in qualsiasi libreria.

Per organizzare ulteriormente il codice, l'applicazione può aggiungere riferimenti a più progetti di libreria, quindi specificare la priorità relativa delle risorse in ciascuna libreria. Ciò consente di creare le risorse effettivamente utilizzate nell'applicazione in modo cumulativo. Quando due librerie a cui fa riferimento un'applicazione definiscono lo stesso ID risorsa, gli strumenti selezionano la risorsa dalla libreria con priorità più alta e scarta l'altra.

Una volta aggiunti i riferimenti ai progetti di libreria sul progetto Android , è possibile impostare la relativa priorità. Al momento della compilazione, le librerie vengono unite con l'applicazione una alla volta, a partire da la priorità più bassa alla più alta.

I progetti di libreria possono fare riferimento ad altri progetti di libreria e possono importare una libreria esterna (JAR) nel modo normale. ..."

ho passato un problema simile quando si utilizza la libreria Rajawali (versione 0.9). C'è stata una necessità di distribuire un file. Jar singolo e le applicazioni avrebbero usato questo JAR per visualizzare schermi 3D. Il problema era che la nostra libreria era una personalizzazione che usava le risorse della biblioteca Rajawali, quindi sono state create due strutture di progetto (come un progetto di libreria) .Quando si generava l'applicazione JAR che utilizzava le risorse non funzionava per i motivi che spiegavi sopra, questo perché la libreria utilizza le caratteristiche di Rajawali delle immagini da caricare con ID che non sono stati riconosciuti nella versione dell'applicazione di destinazione

La soluzione del singolo JAR può essere convalidata modificando il codice per non utilizzare il Rajawal Risorse via R.raw.X (approccio Android) per andare a utilizzare le risorse cartella/e rendere il componente utilizzare Rajawali AsseptManager per aprire risorse. La soluzione è stata esportata cartella JAR con le risorse interne/e il bytecode (. Classe) e la nostra LIB Rajawali.

di Fat-JAR Eclipse PlugIn (o 0.0.31 +) [sito di aggiornamento http://kuruczgrafika.de/fatjar] potrebbe generare un singolo JAR e utilizzarlo nell'applicazione di destinazione. Lo script ANT è stato utilizzato per eseguire l'XML di seguito e un file JAR è stato generato. Il file "lib3d_NAME_HERE.jar" (JAR) sarà generato nel /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> 
Problemi correlati