【问题标题】:Ant build issue with pre-compiled libs in Android appAndroid 应用程序中预编译库的 Ant 构建问题
【发布时间】:2015-05-14 18:17:24
【问题描述】:

我正在尝试使用 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。

当我订购它并将我的自定义 frameworks.jar 保留在系统 Android 库之上时,这在 Eclipse 中运行良好(Eclipse > 项目 > 右键单击​​ > 构建路径 > 配置构建路径 > 订购和导出)

有什么方法可以定义在 ANT 编译时要考虑的库的顺序。就像我们在 Eclipse 中的做法一样?

【问题讨论】:

    标签: java android eclipse ant


    【解决方案1】:

    只需替换 javac bootclasspath 参数即可解决此问题。

    原来的bootclasspath是platform/android-xx/android.jar,这个classpath的优先级最高。

    所以我们必须将它替换为你自己的外部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>
    

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2012-01-14
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2014-02-19
      • 1970-01-01
      相关资源
      最近更新 更多