我正在尝试用Ant构建我的Android项目。我有一些参考库,我在 build.xml 中定义,如下面this question所述:
<target name="-pre-compile">
<!-- HACK to add the android-support-v4.jar to the classpath directly from the SDK -->
<echo>ORIGINAL jars.path : ${toString:project.all.jars.path}</echo>
<path id="project.all.jars.path.hacked">
<path path="${toString:project.all.jars.path}"/>
<path path="${sdk.dir}/extras/android/support/v4/android-support-v4.jar"/>
</path>
<path id="project.all.jars.path">
<path path="${toString:project.all.jars.path.hacked}"/>
</path>
<echo>HACKED jars.path : ${toString:project.all.jars.path}</echo>
</target>
使用我的外部jar进行编译时没有问题,并且正确构建了apk。
当我使用具有类似于系统包的精确包的外部库时,我的问题就开始了。
例如,我有一些自定义的frameworks.jar,我已经按照上面提到的相同方式将它链接到我的项目。但ANT考虑了系统框架并忽略了我的frameworks.jar。
当我订购时,这在Eclipse中工作正常,并将我的自定义frameworks.jar保存在系统Android库之上(Eclipse&gt;项目&gt;右键单击&gt;构建路径&gt;配置构建路径&gt;订单和导出)
有什么方法可以定义在ANT编译时要考虑的库的顺序。就像我们在Eclipse中这样做的那样?
答案 0 :(得分:0)
只需替换javac bootclasspath param即可解决此问题。
原始bootclasspath是platform / android-xx / android.jar,此类路径具有最高优先级。
所以我们必须用你自己的外部jar替换它,并在编译完成后将其替换回来以防止proguard将platform / android-xx / android.jar添加到obfuscated.jar。
代码如下:
<path id="project.org.path" >
</path>
<path id="project.org.android.jar" >
</path>
<target name="-pre-compile" >
<path id="project.org.path" >
<path path="${toString:project.all.jars.path}" />
</path>
<path id="project.org.android.jar" >
<path path="${toString:project.target.class.path}" />
</path>
<path id="project.all.jars.path.hacked" >
<path path="${toString:project.target.class.path}" />
<path path="${toString:project.all.jars.path}" />
</path>
<path id="project.all.jars.path" >
<path path="${toString:project.all.jars.path.hacked}" />
</path>
<path id="project.target.class.path" >
<path path="./framework.jar" />
</path>
</target>
<target name="-post-compile">
<path id="project.all.jars.path" >
<path path="${toString:project.org.path}" />
</path>
<path id="project.target.class.path" >
<path path="${toString:project.org.android.jar}" />
</path>
</target>