2012-04-05 12 views
6

私はアンドロイドプロジェクトを持っています。プロジェクトはA ..今このプロジェクトプロジェクトは、AndroidのlibプロジェクトのLibXに依存しています。現在、LibXは別のアンドロイドライブラリプロジェクトLibYに依存しています。どうすればantを使ってプロジェクトをビルドできますか?ここでは、から始まって、ant/teamcityを使用してアンドロイドプロジェクトを参照するアンドロイドプロジェクトを構築する

ビルド時に

、ライブラリが一度にアプリケーションのものにマージされていると言うものだ

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

- ここ

は、私が参照していますアンドロイドドキュメントです最低優先度から最高優先度まで。 ライブラリは別のライブラリを参照することはできません。また、ビルド時には、ライブラリはアプリケーションとマージされる前に互いにマージされません。

方法はありますか? Androidデベロッパーサイトによって

+0

に生成されますあなたはこれをする必要がありますか? – yorkw

+0

+1私は同じ問題を抱えています –

+0

私はこのために持っているユースケースはActionBarSherlockです。私は、Web接続とstuffと基本的なUIを行うライブラリを持っています。それはActionBarSherlockを参照します。それから私は図書館プロジェクトの上級UIを行う他のプロジェクトを持っています。私が想定する合理的な使用例です。 –

答えて

0

:図書館プロジェクトでhttp://developer.android.com/tools/projects/index.htmlソース、セクションは:

」...構造的には、ライブラリプロジェクトには、標準のAndroid アプリケーションプロジェクトに似ていますたとえば、それはマニフェストを含んでいます。 プロジェクトルートのsrc /、res /などのディレクトリにある プロジェクトには、同じ方法で保存された 標準Androidプロジェクトと同じ種類のソースコードとリソースを含めることができます。たとえば、ソース ライブラリプロジェクトのコードは、R クラスを介して独自のリソースにアクセスできます。

しかし、ライブラリプロジェクトは、標準のAndroidアプリケーション プロジェクトとは異なり、独自の.apkファイルに直接コンパイルしてAndroidデバイス上で を実行することはできません。同様に、真の ライブラリの場合と同様に、ライブラリ プロジェクトを自己完結型のJARファイルにエクスポートすることはできません。代わりに、 によって、ライブラリを間接的にコンパイルする必要があります。 は、そのアプリケーションのライブラリを参照して、 アプリケーションを構築します。

SDKツールは、ライブラリを一時的なJARファイルにコンパイルし、それを メインプロジェクトで使用し、結果を使用して.apkを生成します。アプリケーションと ライブラリの両方でリソースIDが定義されている の場合は、 アプリケーションで宣言されたリソースが優先され、ライブラリプロジェクト のリソースがアプリケーション.apkにコンパイルされないことが確認されます。これにより、任意のリソースビヘイビアを使用または再定義する柔軟性や、任意のライブラリで定義されている の値がアプリケーションに与えられます( )。

さらにコードを整理するには、アプリケーションで 複数のライブラリプロジェクトへの参照を追加し、各ライブラリの リソースの相対優先度を指定します。これにより、アプリケーション内で実際に累積的に使用されているリソース を構築できます。アプリケーションから参照される2つの ライブラリが同じリソースIDを定義する場合、 ツールは、より高い優先度の を持つライブラリからリソースを選択し、他方を廃棄します。

ライブラリプロジェクトへの参照をAndroid プロジェクトに追加したら、相対優先度を設定できます。ビルド時には、 ライブラリは、一度に1つずつアプリケーションとマージされます。 から最低優先度の順にマージされます。

ライブラリプロジェクトは他のライブラリプロジェクトを参照でき、通常の方法で外部ライブラリ(JAR) をインポートできます。 ... "

ライブラリRajawali(バージョン0.9)を使用しているときに同様の問題が発生しました。ファイルを配布する必要がありました。単一のjarとアプリケーションは、このJARを使用して3D画面を表示します。私たちのライブラリは、ライブラリリソースRajawaliを使ったカスタマイズだったので、2つのプロジェクト構造が作成されました(ライブラリプロジェクトなど)。生成時にリソースを使ったJARアプリケーションが上で説明した理由で動作しませんでした。画像のRajawali機能を使用して、対象アプリケーションのバージョンで認識されなかったIDをロードする。

単一のJARの解決方法は、Rajawal私はR.raw.X(Androidアプローチ)を使ってフォルダ資産/ を使い、Rajawali AsseptManagerを使用してリソースを開きます。ソリューションは内部資産とバイトコード(クラス)とLIB Rajawaliを持つJARフォルダにエクスポートされました。

Fat-JAR Eclipseプラグイン(または0.0.31 +)[更新サイトhttp://kuruczgrafika.de/fatjar]は、単一のJARを生成し、ターゲットアプリケーションで使用する可能性があります。以下のXMLを実行するためにANTスクリプトが使用され、JARファイルが生成されました。ファイル「lib3d_NAME_HERE.jar」(.JAR)は、別のライブラリプロジェクトでライブラリプロジェクトを参照するあなたの目的は何ですか、あなたは理由についてもう少し説明することができ/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> 
関連する問題