在Android应用程序中使用预编译的lib构建Ant问题

时间:2014-08-25 06:36:51

标签: java android eclipse ant

我正在尝试用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中这样做的那样?

1 个答案:

答案 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>
相关问题