6

我有一个android项目说项目A ..现在这个项目项目A依赖于一个Android lib项目说LibX。现在 LibX 依赖于另一个 android 库项目 LibY。如何使用 ant 构建我的项目。

这是我引用的android文档-

http://developer.android.com/guide/developing/projects/projects-cmdline.html

这就是它所说的

在构建时,这些库一次一个地与应用程序合并,从最低优先级到最高优先级。请注意,库本身不能引用另一个库,并且在构建时,库在与应用程序合并之前不会相互合并。

有没有解决的办法?

4

1 回答 1

0

由 Android 开发者网站提供: http: //developer.android.com/tools/projects/index.html中的源代码,Library Projects 部分:

"... 从结构上看,库项目类似于标准的Android应用项目。例如,它在项目根目录下包含一个manifest文件,以及src/、res/等目录。项目可以包含相同的类型源代码和资源作为一个标准的Android项目,以同样的方式存储。例如,库项目中的源代码可以通过其R类访问自己的资源。

但是,库项目与标准 Android 应用程序项目的不同之处在于,您不能将其直接编译为自己的 .apk 并在 Android 设备上运行。同样,您不能将库项目导出到自包含的 JAR 文件,就像对真正的库所做的那样。相反,您必须通过在依赖应用程序中引用库并构建该应用程序来间接编译库。

当您构建依赖于库项目的应用程序时,SDK 工具会将库编译为临时 JAR 文件并在主项目中使用它,然后使用结果生成 .apk。如果在应用程序和库中都定义了资源 ID,这些工具会确保应用程序中声明的资源获得优先权,并且库项目中的资源不会编译到应用程序 .apk 中。这使您的应用程序可以灵活地使用或重新定义在任何库中定义的任何资源行为或值。

为了进一步组织您的代码,您的应用程序可以添加对多个库项目的引用,然后指定每个库中资源的相对优先级。这使您能够以累积的方式构建应用程序中实际使用的资源。当从应用程序引用的两个库定义相同的资源 ID 时,工具会从具有较高优先级的库中选择资源并丢弃另一个。

将库项目的引用添加到 Android 项目后,您可以设置它们的相对优先级。在构建时,这些库一次一个地与应用程序合并,从最低优先级到最高优先级。

库项目可以引用其他库项目,并且可以以正常方式导入外部库(JAR)。……”

我在使用库 Rajawali(0.9 版)时遇到了类似的问题。需要分发文件。单个 jar 和应用程序将使用此 JAR 来显示 3D 屏幕。问题是我们的图书馆是使用图书馆资源 Rajawali 的定制。因此创建了两个项目结构(例如库项目)。生成时。由于您上面解释的原因,使用资源的 JAR 应用程序无法工作),这是因为该库使用图像的 Rajawali 功能来加载目标应用程序版本中无法识别的 ID。

单JAR的解决方案可以通过R.raw.X(Android方式)修改代码不使用Rajawali资源去使用文件夹assets/ ,使组件使用Rajawali AsseptManager打开资源来验证。解决方案是导出 JAR 文件夹,其中包含内部资产 / 和字节码 ( . 类) 以及我们的 LIB Rajawali。

通过 Fat-JAR Eclipse PlugIn(或 0.0.31 +)[更新站点 http://kuruczgrafika.de/fatjar] 可以生成单个 JAR 并在目标应用程序中使用它。ANT 脚本用于运行下面的 XML,并生成了一个 JAR 文件。将在 /build/lib3d_NAME_HERE.jar 中生成文件“lib3d_NAME_HERE.jar”(.JAR)

<?xml version="1.0"?>
<project name="lib3d_NAME_HERE" default="main" basedir=".">

    <property name="projectPath" value="D:\Development\lib3d_NAME_HERE"/>


    <!-- this file was created by Fat-Jar Eclipse Plug-in -->
    <!-- the ANT-Export is in a very early stage, so this -->
    <!-- is only experimental, ANT 1.6 or above is        -->
    <!-- required, feedback is always welcome:            -->
    <!--       http://sourceforge.net/projects/fjep       -->
    <!-- uncomment the following lines if using ANT outside Eclipse -->
    <!--
        <property name="fjepPath" value="reference:file:plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/>
        <taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/>
        <typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/>
        <typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/>
        <typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/>
        <typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/>
    -->
    <!-- uncomment the above lines to use ANT outside of Eclipse -->
    <target name="main">
        <fatjar.build output="build/lib3d_NAME_HERE.jar">
            <fatjar.manifest/>
            <fatjar.filesource path="${projectPath}/bin/classes" relpath=""/>
            <fatjar.filesource path="${projectPath}/assets/" relpath="assets"/>
        </fatjar.build>
    </target>
</project>
于 2013-09-11T11:54:45.290 回答