Dx处理外部库需要永远

时间:2012-10-08 07:56:29

标签: android dependencies dx

我的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处理”步骤吗?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

默认的ant构建脚本似乎没有支持这个工作流程,我怀疑eclipse构建有这样的东西。您必须手动执行某些步骤,或者调整ant构建脚本。

一些注意事项:

  1. 要让dx识别并合并库,它需要是一个包含classes.dex文件的jar / apk / zip
  2. 您仍然需要原始的java jar,以便您可以针对它们进行编译。你需要阻止java jar被传递给dx,而是传递dex jars。
  3. 如果你使用像proguard这样的东西,事情变得更加“有趣”:)
  4. 我将决定是否所有这些工作和黑客都值得你。