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

SaK*_*Ket 6 ant teamcity android

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

这是我引用的android文档 -

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

这就是它所说的

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

有没有解决的办法?

Dou*_*ari 0

通过 Android 开发者站点:来源位于http://developer.android.com/tools/projects/index.html,库项目部分:

“......在结构上,库项目类似于标准的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>
Run Code Online (Sandbox Code Playgroud)