1

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

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

谢谢!

4

1 回答 1

1

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

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

一些注意事项:

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

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

于 2012-10-08T22:19:59.580 回答