繁体   English   中英

使用 ant/teamcity 构建引用 android 库项目的 android 项目

[英]Building an android project referencing android library project using ant / teamcity

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

这是我引用的 android 文档 -

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

这是它说的

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

有没有解决的办法?

作者:Android 开发者网站:来源http://developer.android.com/tools/projects/index.html ,图书馆项目部分:

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

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

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

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

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

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

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

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

通过 Fat-JAR Eclipse 插件(或 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM