0

我有一个主要的 android 应用程序,它的 libs 文件夹中有 2 个罐子。这个 android 应用程序包括一个 Java 源项目,它的 libs 文件夹中有大约 4 个 jars。

在 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 中。我如何也包括它们?

附言。将它们复制到 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>任务中指定多个类路径文件夹。您可以通过删除命令的classpathorclasspathref参数来做到这一点<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 回答
0

在大卫的解决方案中建立一条额外的路径对我有用。我添加了一个 if 条件来检查是否需要额外的 lib 路径。

<condition property="android.additional.libdir.enabled" value="true" else="false">
    <and>
       <isset property="android.additional.lib.dir" />
    </and>
</condition>

<if condition="${android.additional.libdir.enabled}">
   <then>
      <path id="project.javac.classpath">
           <path refid="project.all.jars.path" />
           <path refid="tested.project.classpath" />
           <fileset dir="${android.additional.lib.dir}">
               <include name="**/*.jar"/>
           </fileset>
      </path>
   </then>
   <else>
      <path id="project.javac.classpath">
          <path refid="project.all.jars.path" />
          <path refid="tested.project.classpath" />
      </path> 
   </else>
</if>

在 ant.properties 文件中,指定附加的 lib 目录路径。

android.additional.lib.dir=yourpath

于 2014-08-02T04:12:33.627 回答