【问题标题】:Building an android project referencing android library project using ant / teamcity使用 ant / teamcity 构建一个引用 android 库项目的 android 项目
【发布时间】:2013-09-11 19:54:45
【问题描述】:

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

这是我参考的 android 文档 -

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

这就是它所说的

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

有没有办法解决这个问题?

【问题讨论】:

  • 你在另一个图书馆项目中引用图书馆项目的目的是什么,你能解释一下你为什么需要这样做吗?
  • +1 我也有同样的问题
  • 我的用例是 ActionBarSherlock。我有一个库,可以处理网络连接和东西以及基本的 UI。它引用了 ActionBarSherlock。然后我有其他项目在图书馆项目上做高级 UI。我会假设一个合理的用例。
  • 只要你能用ant在本地构建你的项目,TeamCity就可以做到。你能在本地构建你的 LibY -> LibX -> A 链吗?
  • 仅供参考,对于那些仍然有这个问题的人,我现在切换到基于 Maven 的构建系统以使其正常工作。我正在使用 Teamcity 运行 Maven 构建。

标签: android ant teamcity


【解决方案1】:

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

"... 在结构上,库项目类似于标准的 Android 应用项目。例如,它在 项目根目录,以及 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 文件夹,其中包含内部资产 / 和字节码(.Class)以及我们的 LIB Rajawali。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2012-05-21
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2012-09-14
    相关资源
    最近更新 更多