使用 multidex 和 Dagger 2 时,Application 对象中缺少函数

Functions are missing from the Application object, when using multidex and Dagger 2

我们最近遇到了 Multidexing 问题,特别是在使用 gradle multidex 插件 ('com.android.support:multidex:1.0.0') 构建 Dalvik VM 时。

似乎 gradle 难以解析应该包含在主 dex 文件中的正确 classes。结果,我们最终得到一个成功完成的构建过程,但是 有时 生成一个不包含 class 或 classes 的主 dex 文件需要正确实例化主应用程序(它本身扩展了 MultiDexApplication)。

我们当前暴力破解一致构建的解决方案是监视 multidex 生成的中间文件。当我们有一个 good 构建时(即正确实例化主应用程序和 MultiDexApplication 的构建),然后复制包含在主 dex 文件中的 classes 列表到一个文件中,然后我们强制使用 multidex(使用 --main-dex-list 参数)。这暂时使我们能够 'force' 将所需的 classes 放入主 dex 文件中,但显然不是很容易维护,并且在添加新 classes/dependencies 时无法轻松更新。

我们正在使用 Dagger 2 进行依赖项注入,我们怀疑这在某种程度上阻止了 multidex 插件正确识别主应用程序的依赖项 - 这可能是原因吗?我们还遇到过各种关于使用最小 'App Wrapper'(它扩展了 MultiDexApplication)作为 'entry point' 进行多索引处理的参考资料,但找不到足够的关于该过程的文档。

如果您能对此提供一些见解,那就太好了 - 这是您以前遇到过的问题吗?有已知的解决方法吗?如果您能提供有关我们如何实施 'App Wrapper' 模式的任何详细信息,我们也将不胜感激

新的 v4 支持库包含 multidex,您尝试过使用它吗?

将以下内容添加到您的 gradle 依赖项中:

    compile "com.android.support:support-v4:.0.+"

并将此标记添加到 android > gradle

中的 defaultConfig
android{
    defaultConfig{
        ....
        multiDexEnabled true
    }
}