【问题标题】:Dx processing external libraries takes foreverDx 处理外部库需要很长时间
【发布时间】:2012-10-08 07:56:29
【问题描述】:

我的 Android 应用程序使用了大量重要的外部库。这些库都是用 Java 编写的,只是简单地添加到构建路径中。

从 Eclipse 中启动应用程序需要很长时间,大约 5 分钟。这非常令人沮丧!

我启用了详细的 android 构建输出。这表明构建过程正在迭代外部库中的整个 *.class 文件。我得到了数百条这样的行:

...
Dx processing android/support/v4/app/FragmentTransaction.class...
Dx processing android/support/v4/app/FragmentManagerImpl$3.class...
Dx processing android/support/v4/app/LoaderManagerImpl.class...
...
Dx processing com/prosysopc/ua/client/ServerStatusListener.class...
...
Dx processing org/opcfoundation/ua/core/BrowseNextRequest.class...
...

(这只是一个小样本,我再次为每个*.class 得到数百个)

我不太确定 Dx 工具在这里做什么,但它确实很烦人!

更糟糕的是,每次启动都会重复这个过程,没有缓存,什么都没有......

可能的想法:

  • 在某处有缓存吗?在哪里?也许它是只读的,因此不会持续存在?
  • 我可以完全禁用我的开发版本的“DX 处理”步骤吗?

任何可能的解决方案或至少是想法?这真的让我发疯了;-)

谢谢!

【问题讨论】:

标签: android dependencies dx


【解决方案1】:

dx 工具可以合并 dex 文件。因此,一种选择是将这些库预先转换为 dex 格式,并让 dx 将它们与您的主要应用程序类合并。

默认的 ant 构建脚本似乎不支持这个工作流,我怀疑 eclipse 构建也有类似的东西。您将不得不手动执行一些步骤,或者调整 ant 构建脚本。

一些注意事项:

  1. 要让 dx 识别和合并库,它需要是一个包含 classes.dex 文件的 jar/apk/zip
  2. 您仍然需要原始的 java jars,以便您可以针对它们进行编译。您需要阻止将 java jars 传递给 dx,而改为传递 dex jars。
  3. 如果您使用 proguard 之类的东西,事情会变得更加“有趣”:)

我将把所有这些工作和 hackiness 是否值得由你来决定。

【讨论】:

  • 非常感谢您的意见,我开始研究这个。但不幸的是,这超出了我的想象......所以我想我必须忍受这种次优的情况,直到谷歌最终决定修复他们的开发工具......
  • 只是出于好奇,你真的做过这样的事情吗?
  • 我做了一个快速的手动测试来验证它是否有效,所以我知道 dx 能够做到这一点。主要的复杂性在于如何让构建系统为您执行此操作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2014-10-21
相关资源
最近更新 更多