0

libs フォルダーに 2 つの jar があるメインの Android アプリがあります。この Android アプリには、libs フォルダーに約 4 つの jar がある Java ソース プロジェクトが含まれています。

build.xml では、Android の build.xml から 'target name="-compile">' をコピーしました。

そしてこれを追加しました:

    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping..." >

        <!-- merge the project's own classpath and the tested project's classpath -->

        <path id="project.javac.classpath" >

            <path refid="project.all.jars.path" />

            <path refid="tested.project.classpath" />
        </path>
 <javac
  bootclasspathref="project.target.class.path"
  classpathref="project.javac.classpath"
  debug="true"
  destdir="${out.classes.absolute.dir}"
  encoding="${java.encoding}"
  extdirs=""
  fork="${need.javac.fork}"
  includeantruntime="false"
  source="${java.source}"
  target="${java.target}"
  verbose="${verbose}" >
  <src path="${source.absolute.dir}" />
  <src path="${gen.absolute.dir}" />
  <src path="${javaproject.dir}" /> #THIS IS WHAT I ADDED which is defined in ANT.PROPERTIES
  <compilerarg line="${java.compilerargs}" />
</javac>

したがって、Java ソース プロジェクトを参照します。この問題は、フォルダ libs にある Java ソース プロジェクトの jar ファイルで発生します。それらも含めるにはどうすればよいですか?

ps。それらをAndroidプロジェクトのlibsフォルダーにコピーすることはオプションではありません。

4

3 に答える 3

1

あなたは以下を持っています:

<javac
     bootclasspathref="project.target.class.path"
     classpathref="project.javac.classpath"
     debug="true"
     destdir="${out.classes.absolute.dir}"
     encoding="${java.encoding}"
     extdirs=""
     fork="${need.javac.fork}"
     includeantruntime="false"
     target="${java.target}"
     verbose="${verbose}"

     source="${java.source}">

     <src path="${source.absolute.dir}" />
     <src path="${gen.absolute.dir}" />
     <src path="${javaproject.dir}" /> #THIS IS WHAT I ADDED which is defined in ANT.PROPERTIES

    <compilerarg line="${java.compilerargs}" />
</javac>

sourceパラメータと<src path>サブエンティティの両方を指定したことに注意してください。また、への参照があることに注意してくださいjavaproject.dir。このディレクトリは何ですか?それは他のプロジェクトのソースですか、他のプロジェクトのメインディレクトリ、または他の何かですか?

まず、コマンドで<src path>srcdirパラメータの両方を使用しないでください<javac>。単一のソースディレクトリパスのみが必要な場合は、タスクのsrcdirパラメータまたはサブエンティティのいずれかを使用できます。複数ある場合は、を使用せず、サブエンティティのみを使用してください。<javac><src path>srcdir<src path>

さて、あなたの質問に戻りましょう...

私があなたを正しく理解しているなら、あなたはあなたの<javac>タスクで複数のクラスパスフォルダを指定したいと思うでしょう。これを行うには、コマンドのclasspathまたはclasspathrefパラメータを削除し、ソースディレクトリの場合と同じように複数のサブエンティティを指定するだけです。<javac><classpath path>

私はあなたがこのようなものが欲しいと思います:

<javac
     bootclasspathref="project.target.class.path"
     debug="true"
     destdir="${out.classes.absolute.dir}"
     encoding="${java.encoding}"
     extdirs=""
     fork="${need.javac.fork}"
     includeantruntime="false"
     target="${java.target}"
     verbose="${verbose}">

     <!-- Here I can specify multiple classpaths: -->
     <!-- Either classpath references, or classpath elements -->
     <classpath refid="project.javac.classpath"/>
     <classpath refid="some.other.classpath.reference"/>
     <classpath path="${some.actual.directory.with.jars}"/>

     <src path="${java.source}">
     <src path="${source.absolute.dir}" />
     <src path="${gen.absolute.dir}" />
     <!-- <src path="${javaproject.dir}" />  Is this correct? -->

     <compilerarg line="${java.compilerargs}" />
</javac>
于 2013-01-23T15:30:51.363 に答える
0

<path>プロジェクトがビルド時に依存するすべてのjarを含むようにビルドし、タスクでそれを参照できます<javac>。後者はすでに「project.javac.classpath」へのclasspathrefで機能しているので、そのパスにjarを含める必要があります。

例えば:

<path id="project.javac.classpath">
    <path refid="project.all.jars.path" />
    <path refid="tested.project.classpath" />
    <!-- include all the jar files under /path/to/your/jars" -->
    <fileset dir="/path/to/your/jars">
        <!-- the **/* pattern recurses subdirectories -->
        <include name="**/*.jar"/>
    </fileset>
</path>

そのパスには、「project.all.jars.path」への参照が含まれています。これは、追加のjarを取得するために私がメモした変更を実際に行いたい場所です。

于 2013-01-23T14:17:55.250 に答える