Android Ant 包含 Java 库项目

2024-04-14

我正在尝试使用 Ant 编译一个 Android 项目,以便它可以与构建机器一起工作,但我遇到了问题。我总共有五个项目:三个只是 java 库项目,另外两个是实际的 Android 项目。实际上只有一个项目被编译和安装,但它从其他项目中提取以便编译。

我尝试过使用android update project --name <name> --target <target> --path <path>生成我的 build.xml 文件。它生成的 build.xml 很好,但是当我运行它时,它无法正确地将我的其他项目包含为依赖项。

然后,我尝试使用 Eclipse 导出 build.xml 文件,该文件将正确包含依赖项,但不会生成我的 R.java 文件。

我更喜欢第二种方法,因为 Eclipse 已经处理了我的依赖项设置,但是我可以在 build.xml 文件中添加一些内容来正确生成我的 R.java 文件吗?


我最终弄清楚了这一点。我最终做的是使用 Eclipse 导出工具导出三个 Java 库项目的 ant 构建脚本。然后,我创建了一个名为 build-custom.xml 的文件,其中包含用于复制 jar 的其他目标。

接下来,我在 Android 库项目上使用 android update lib-project 命令来生成该项目的 build.xml(如http://developer.android.com/tools/projects/projects-cmdline.html http://developer.android.com/tools/projects/projects-cmdline.html)。为了在构建中包含 Java 库项目,您必须将它们复制到 Android 项目的 libs 文件夹中。因此,我在 Android 库项目中创建了一个名为 custom_rules.xml 的构建文件,该文件将 jar 复制到 lib 文件夹中。重要提示:还要编写一条规则,在完成后删除 jar,否则当您尝试在 Eclipse 中运行时,您将收到 Davlik 错误 1。

您可能有也可能没有 Android 库项目,但主项目与库项目的步骤几乎相同。只需使用 android update project 命令,然后创建一个 custom_rules.xml 来复制适当的 jar。

Edit:

在使用 Eclipse 生成基本 Java 库项目的构建脚本后,我创建了一个 common.xml ant 构建文件。该文件基本上如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="common">     
    <target name="clean">
        <delete dir="build/libs" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./AndroidSubProject" target="clean" />
    </target>

    <target name="samplesublibrary1">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="all" />
    </target>

    <target name="samplesublibrary2">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2"     target="all" />
    </target>

    <target name="samplesublibrary3" depends="samplesublibrary2">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="all" />
    </target>

    <target name="android-sub-project-copy-jars" depends="samplesublibrary1, samplesublibrary2, samplesublibrary3">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="android-project-copy-jars" />
    </target>

    <target name="android-sub-project-debug" depends="android-project-copy-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="debug" />
    </target>

    <target name="android-sub-project-release" depends="android-project-copy-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="release" />
    </target>

    <target name="android-sub-project-remove-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="android-project-remove-jars" />
    </target>
</project>

然后在 Android-Sub-Project 中,我添加了一个 custom_rules.xml 文件,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse.ant.import?>
<project default="android-project-copy-jars" name="Copy required jars to lib folder">
  <target name="android-project-copy-jars">
    <copy file="../../build/libs/SampleSubLibrary1.jar" todir="libs"/>
    <copy file="../../build/libs/SampleSubLibrary2.jar" todir="libs"/>
    <copy file="../../build/libs/SampleSubLibrary3.jar" todir="libs"/>
  </target>
  <target name="android-project-remove-jars">
    <delete file="./libs/SampleSubLibrary1.jar" />
    <delete file="./libs/SampleSubLibrary2.jar" />
    <delete file="./libs/SampleSubLibrary3.jar" />
  </target>
</project>

然后,我在项目根目录中创建了一个主 build.xml,其中包含并运行所有其他子 build.xml 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="all">
    <target name="debug" depends="clean, main-debug, android-project-remove-jars" />
    <target name="release" depends="clean, main-release, android-project-remove-jars" />

    <import file="common.xml" />

    <target name="clean" depends="common.clean">
        <ant antfile="build.xml" dir="./Main" target="clean" />
    </target>

    <target name="main-debug" depends="android-sub-project-debug">
        <ant antfile="build.xml" dir="./Main" target="debug" />
        <copy file="./Main/bin/main-debug.apk" todir="./build/bin" />
    </target>

    <target name="main-release" depends="android-sub-project-release">
        <ant antfile="build.xml" dir="./Main" target="release" />
        <copy file="./Main/bin/main-release-unsigned.apk" todir="./build/bin" />
    </target>
</project>

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Ant 包含 Java 库项目 的相关文章

  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 有没有更简单的方法来部署到WebSphere?

    我见过这个问题 https stackoverflow com questions 4046 can someone give me a working example of a buildxml for an ear that deplo
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 当文本输入聚焦在 React Native for Android 的底部工作表上时,视图移出屏幕

    我正在使用图书馆 https github com osdnk react native reanimated bottom sheet https github com osdnk react native reanimated bott
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 如何使用InputConnectionWrapper?

    我有一个EditText 现在我想获取用户对此所做的所有更改EditText并在手动将它们插入之前使用它们EditText 我不希望用户直接更改中的文本EditText 这只能由我的代码完成 例如通过使用replace or setText
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 枚举是引用类型还是值类型?

    我在我的中使用了 Enum 属性实体框架 http msdn microsoft com en US data ef5级 但在数据库中该字段可以为空 Visual Studio 给出错误 指出该属性必须是可为 null 的属性 我的问题是
  • 为什么我们需要指定标准的 Lark 词法分析器才能捕获评论终端?

    我正在开发一个基于 Lark 的项目 我需要能够 捕获 正在解析的代码中的注释 但是 当使用标准词法分析器而不明确指定标准词法分析器时 它不起作用 我采取了第二个例子云雀食谱 https lark parser readthedocs io
  • ar-sa 文化的预期日期时间字符串是什么?

    我有一个方法 DateToString DateTime datetime string format CultureInfo cultrueInfo return datetime ToString format cultureInfo
  • 更改旋转箭头,Appcompat v21

    i have activities which i themed with my custom theme but for spinner i choosed to style it with Appcompat v21 but i got
  • 是否有适用于 Microsoft Edge 浏览器的 Selenium WebDriver?

    截至本文发布之日 Microsoft Edge 这个名称刚刚被正式宣布为新 Windows 10 的默认浏览器 现在问这个问题可能还为时过早 但我想知道是否有新的 Selenium WebDriver 可用 如果没有 是否有任何说明我们可能
  • 计算分数的Java程序

    该程序的目的是获取一个分数的两个用户输入 从用户接收一个运算符 然后获取第二个分数的另外两个用户输入 该程序必须检查两个分数中使用的数字是否在 0 99 之间 并且分母非零 该程序还必须确保用户输入有效的运算符 我现在面临的唯一问题是我的变
  • 是否有可以在 form_div_layout.html.twig 中使用的变量的完整列表?

    我想获取Symfony表单主题文件form div layout html twig中可用的所有变量 我阅读了Symfony官方文档并在网上搜索 但找不到任何有用的信息 有人可以帮助我吗 那么 您可以通过迭代上下文来获取每个块中的所有可用变
  • 相同视图和浏览器版本中不同的 IE XML/XSL 行为,但使用不同的域用户帐户

    我们的一位用户在尝试访问我们的 Web 应用程序视图之一时遇到问题 IE9 行为在 6 8 和 9 中显得一致 但在域帐户之间不一致 对于该特定用户的 Windows 域帐户 无论使用哪些凭据来访问我们的应用程序 或者使用哪台机器的浏览器
  • 在 init 上创建 django 表单

    如何在表单初始化函数中添加字段 例如在下面的代码中我想添加一个配置文件字段 class StaffForm forms ModelForm def init self user args kwargs if user pk 1 self f
  • DocumentDb IN 子句中的最大项目数

    我在文档中找不到任何地方提及 DocumentDb 中 IN 关键字支持的最大项目数 我会假设有一个限制 任何人都可以在引用的文档中指出吗 DocumentDB 实际上消除了所有限制 将其提高到我们预计用户无法超越的水平 因此不再记录它们
  • 将 Team Foundation Server (TFS) 与 Xcode 连接

    我是 Xcode 和 TFS 的新手 有人可以解释一下如何将 TFS 2013 与 Xcode 连接来维护存储库 或者给我一个从一开始就包含完整详细信息的链接吗 这个想法是使用 Git 作为版本控制 并将更改推送到 TFS 中托管的中央存储
  • 将 pandas 中的句子拆分为句子编号和单词

    我有一个像这样的熊猫数据框 Text start end entity value I love apple 7 11 fruit apple I ate potato 6 11 vegetable potato 我尝试过使用 for 循环
  • 如何在 C# 中将 DataRowView 转换为 DataRow

    我想使用拖放 但我不知道如何将信息从 DataGridView 控件拖动到 DataGridView 或 ListBox 我有一个链接http www codeproject com KB cpp DataGridView Drag n D
  • 如何取消引用作为空接口传递的指针值?

    我有一个方法target interface 在我用于数据库访问的类型上 例如 func c client Query query someType target interface error return c db Query quer
  • 从 SQLAlchemy 中的时间戳选择日期

    我将 SQLAlchemy 与 python 一起使用 我想从列类型时间戳中选择日期 以执行此查询 SELECT DATE record date FROM Users 我通过 sql alchemy 编写了这段代码 但它将返回时间戳 se
  • iOS7 侧边菜单状态栏颜色过渡。就像在 iOS7 Facebook 应用程序中一样

    iOS7 Facebook 应用程序有一个右侧菜单 可以通过从右向左滑动或单击右上角的按钮来显示 打开此菜单时 会出现颜色过渡在整个关闭时状态栏从蓝色变为黑色 反之亦然 此图像并排显示两个状态栏 https i stack imgur co
  • Jackson json 格式的 zoneddatetime

    我需要定义 ZonedDateTime 的 JsonFormat 其中时间在 xml 消息中定义 我添加了 Jackson jar 来格式化 ZonedDateTime com fasterxml jackson datatype jsr3
  • YUI Compressor 中 JQuery 文件的压缩问题

    我正在尝试使用 YUI 压缩器缩小一些文件 然而 我似乎在两行代码上遇到了错误 这阻止了压缩 js 文件用于jcarousel精简版 http www gmarwaha com jquery jcarousellite 包含 1 个错误 我
  • Xcode 版本 12.0.1 无法打开 .workspace 文件

    Okay I updated my mac os to Catalina today as well as updating the xcode version to 12 0 1 I am now unable to get the wo
  • Android Ant 包含 Java 库项目

    我正在尝试使用 Ant 编译一个 Android 项目 以便它可以与构建机器一起工作 但我遇到了问题 我总共有五个项目 三个只是 java 库项目 另外两个是实际的 Android 项目 实际上只有一个项目被编译和安装 但它从其他项目中提取