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 库项目 的相关文章

  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 定期运行任务(每天一次/每周一次)

    我想定期 每周 每天一次 运行一些任务 即获取我的网站新闻页面 即使我的应用程序已关闭 是否可以 是的 您需要查看报警管理器 http developer android com reference android app AlarmMan
  • 使用 APDU 命令的有效 NFC 读取比特率是多少?

    我目前正在使用 Android IsoDep trancieve 函数发送和接收累计 1628 字节的数据 该函数分布在 35 个 APDU 命令 选择应用程序 身份验证 读取 中 字节计数包括返回的 MAC 校验和以及由 transcie
  • 为什么我将可绘制文件重命名为 .9.png 后出现“Some file crunching failed”?

    我正在测试 9 patch 图像 在一切正常之前 我重命名drawable file ic button beat box default png to ic button beat box default 9 png 然后我收到错误 某些
  • 如何将 EditText 传递给另一个活动?

    Intent intent new Intent this Name class intent putExtra key et getText toString startActivity intent Intent intent getI
  • 按钮未显示在屏幕上

    我创建了一个应用程序 其中显示带有图像和文本的列表视图 我在页面末尾添加按钮 但这没有显示在屏幕上 我是 Android 新手 我该如何解决这个问题 这是我的 UI XML 代码
  • 如何使用闹钟音量和 setAudioAttributes 来播放铃声?

    所以我正在尝试了解音频属性 这是我到目前为止所拥有的 alarm getSound will return a proper URI to pick a ringtone Ringtone tone RingtoneManager getR
  • 连接到不可发现的蓝牙设备

    我正在开发一个安卓应用程序 只是一个一般性问题 是否可以连接到公开不可发现的设备 提前致谢 如果您之前已与该设备配对 则即使该设备未处于可发现模式 也可以再次连接到该设备 参见这篇文章 以编程方式连接到配对的蓝牙设备 https stack
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • 从多个选项卡中的编辑文本字段获取文本

    我正在尝试创建一个使用选项卡作为输入表单的 Android 应用程序 基本上 我希望对其进行设置 以便用户可以在一个选项卡上输入一些信息 然后提交该信息 或者转到另一个选项卡并输入更多信息 然后从两个选项卡提交信息 我正在使用操作栏和片段来
  • Google 移动广告和 Kindle Fire

    我最近用 Google 移动广告替换了 AdMob 库 对此我有一个疑问 广告会出现在 Amazon Kindle Fire 设备上吗 我问这个是因为我知道 Google 移动广告依赖于 Google Play 服务 所以我有点困惑 Goo
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 如何从 Facebook 邀请好友到 Android 应用程序? - 给出错误

    我正在开发一个 Android 应用程序 我正在努力将 邀请朋友 功能添加到我的应用程序中 它转到我的AppLinkUrl成功但显示错误 我的清单代码如下
  • 在 Android 中上传文件出现内存不足错误

    我的上传代码如下 String end r n String twoHyphens String boundary try URL url new URL ActionUrl HttpURLConnection con HttpURLCon
  • 更改Android菜单的背景颜色[重复]

    这个问题在这里已经有答案了 我正在尝试将标准浅灰色更改为浅绿色 似乎没有一个简单的方法可以做到这一点 例如 通过 Android 主题 但我找到了一个解决方法 如本页所述 http tinyurl com 342dgn3 http tiny
  • android:layout_alignParentBottom 在没有显式布局高度作为 ListView 中的行的情况下使用时会被忽略

    当我使用RelativeLayout与任一fill parent or wrap content作为高度和一个指定的元素 android layout alignParentBottom true 它被忽略并在顶部对齐 设置高度Relati
  • putFragment() - 片段 x 当前不在 FragmentManager 中

    上面的标题被问了很多次 但答案似乎与FragmentStatePagerAdapter这与我的问题无关 我正在使用该方法putFragment Bundle String Fragment 直接地 The 安卓文档 http develop

随机推荐

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

    我在我的中使用了 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 项目 实际上只有一个项目被编译和安装 但它从其他项目中提取