3

antツールを使用してAndroidライブラリプロジェクトをビルドしています。複数のソースディレクトリを指定する必要があります。

ant.propertiesファイルにこれらの行を交互に追加して、複数のソースディレクトリを指定しようとしました

source.dir=src:src2    
source.dir=src;src2

しかし、どちらの場合もビルドできません。どちらの場合も.classが生成されましたが、jarファイルの作成中にこのエラーが発生していました。

BUILD FAILED

C:\Program Files\Android\android-sdk\tools\ant\build.xml:681: The following error occurred while executing this line:

C:\Program Files\Android\android-sdk\tools\ant\build.xml:749:

C:\workarea\Android\Packages\test\src;src2 does not exist.

Androidライブラリプロジェクト をビルドするためにant.propertiesで複数のソースディレクトリを指定する方法を教えてもらえますか?

4

4 に答える 4

8

この問題をトリッキーな方法で解決しました。ここにあります

複数のソース ディレクトリを使用して Android でライブラリ プロジェクトをビルドするには、まずant.propertiesファイル (Linux の場合はbuild.properties ) に移動し、 source.dirを追加します。

    source.dir=first_source_dir ;second_source_dir ; third_source_dir

lib project の場合、antは、 ant.propertiesまたはbuild.propertiesファイルで指定された out.dir ディレクトリディレクトリbin/classesから、コンパイルされた.classファイルを 含むjarライブラリを作成します。

jarの作成 中に、antはすべての.javaソース ファイルをjarから削除します。コーダーが.javaソース ファイルをout.dirディレクトリに保持している場合は、 jarに含まれる可能性があり、そのディレクトリをsource.dirで指定します。

これらの.javaソースantを削除するには、次のコマンドを使用してsource.dirディレクトリに移動します。

        <property name="source.absolute.dir" location="${source.dir}" />
        dir="${source.absolute.dir}" 

このコマンドで ant実際にディレクトリに移動しようとしています

cd   <your_project_root_dir>/first_source_dir ;second_source_dir ; third_source_dir

存在しない...

解決:

ステップ 1. まず、ソース ディレクトリ(source.dir) とビルド ディレクトリ( out.dir ) が異なることを確認します。

ステップ 2. C:\Program Files\Android\android-sdk\tools\antに移動し、 build.xml を開き、jarタグに移動します。

    <jar destfile="${out.library.jar.file}">                        
       <fileset dir="${out.classes.absolute.dir}"
         includes="**/*.class"
         excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/Manifest.class ${project.app.package.path}/Manifest$*.class ${project.app.package.path}/BuildConfig.class"/>
       <fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />
   </jar>

ここで、 jarタグの最後のファイルセットタグをコメント化または削除します

    <jar destfile="${out.library.jar.file}">                        
       <fileset dir="${out.classes.absolute.dir}"
            includes="**/*.class"
            excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/Manifest.class ${project.app.package.path}/Manifest$*.class ${project.app.package.path}/BuildConfig.class"/>
       <!--fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" /-->
    </jar>

プロジェクトをビルドします。

于 2013-02-09T07:54:44.053 に答える
1
  1. プロジェクト ディレクトリにディレクトリ (build_src など) を作成します。
  2. そのディレクトリに移動します(cd build_src)
  3. 含めたいすべてのソース ディレクトリへのソフト リンク (ln -s TARGET リンク名) を build_src に作成します。
  4. source.dir=build_src で ant.properties を作成します

これは私にとってはうまく機能し、最もクリーンなアプローチだと思います(また、これらは実際のソースへのソフトリンクであるため、ソースの複数のコピーはありません)

  1. 私のプロジェクトの 1 つに .aidl ファイルがあり、AIDL が文句を言いました。src へのソフトリンクを作成する代わりに、src/com へのソフトリンクを作成して問題を修正しました。
于 2014-03-10T22:17:04.443 に答える
0

少なくともビルド ツールのそれ以降のバージョンでは、問題は、このプロパティに入力された値が に渡されること<property name="source.absolute.dirs" location="source.dirs"/>です。属性は、locationコロン/セミコロンで区切られたパスを処理する方法を知りません。

修正は非常に簡単です。次を使用するだけです。

source.absolute.dirs=src1:src2:src3

など、反対に:

source.dirs=src1:src2:src3
于 2014-01-10T06:48:19.300 に答える