android - 从命令行编译Android项目很慢

标签 android performance compilation dex

我正在从 OSX 上的命令行编译我的(相当简单,只有 5 个文件,数百个 LOC)应用程序:

Ant 调试

它有效。但它运行缓慢:

构建成功 总时间:

26 秒

这是为什么呢?即使我只更改一个 java 文件中的一行,也需要这么多时间。大部分时间花在 dex 阶段(大约 20 秒),这是 AFAIK 创建 Dalvik 字节码。但是我的 friend 也在使用 Eclipse 在 Windows 上从事同一个项目,他说在他的机器上编译只需要一两秒钟。我可以做些什么来加快这个过程吗?

最佳答案

我终于找到了解决方案!这有点小技巧,但它确实有效。

首先,进入您的 ANDROID-SDK/platform-tools 目录,然后将 dx 应用重命名为其他名称,例如 dextool,最后创建新的 dx 文件内容:

#!/bin/sh
shift
dextool --dex --incremental --no-optimize $@

将“dextool”替换为您之前选择的名称。这将为每个 dex 调用添加(未记录的)--incremental 属性,这将通过仅对在构建之间发生变化的类进行 dex 化来大量减少构建时间。现在看起来像这样:

[dx] 将 dex A (1 defs/11,3KiB) 与 dex B (359 defs/1253,2KiB) 合并。结果是 359 defs/1519,3KiB。花了 0,5s

0.5s 而不是 20s 差别很大!

编辑 - 几句话:

  • 在使用它之前你必须至少编译一次你的项目,因为它使用了以前的 classes.dex 文件
  • 使用 ant 以外的其他 Android 工具链时可能会遇到问题

更新:

Google 发布了 SDK 工具 21.0,它使上述调整被废弃,因为它确实支持 pre-dexing。终于!

关于android - 从命令行编译Android项目很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088375/

相关文章:

java - 如何将项目正确删除到 Android Studio 中?

android - 如何更新数据类的属性show compose ui可以观察到变化

Java Disruptor 模式和低延迟

c - (.text+0x20) : undefined reference to `main' and undefined reference to function

c++ - 如何在VS2015中使用PostgreSQL插件静态编译Qt 5.8

android - 此版本的 Android Studio 无法打开此项目,请使用 Android Studio 4.0 或更新版本重试

performance - CFScript查询性能很差

c++ - 在函数末尾添加 N 个字节以进行热修补

c - 创建c语言库的钩子(Hook)

android - OpenGL ES 2 纹理图集最前沿