Dagger 2有编译时验证,为什么范围注释有RUNTIME保留?为什么在运行时需要它们?
我最近发现了Android的新MultiDex功能,用于处理超过65,000个引用的应用程序.请参阅:https://developer.android.com/tools/building/multidex.html
有人可以帮我理解以下问题:
1)Gradle构建插件如何确定主要dex文件(classes.dex)与次要dex文件的放置内容?基于该文档,在主要dex中需要某些东西,但它没有给出任何示例.是否所有活动都必须在主要dex文件中?
引用文字:
在Dalvik运行时执行时,主要dex文件中需要哪些类有复杂的要求.Android构建工具更新处理Android需求,但其他包含的库可能还有其他依赖性要求,包括使用内省或从本机代码调用Java方法.在更新multidex构建工具之前,可能无法使用某些库,以允许您指定必须包含在主dex文件中的类.
2)仅针对Android API Level 21(Android L)及更高版本构建时,Gradle Build Plugin中存在不同的行为.它说它更快,因为它"将应用程序的每个模块(包括依赖项)构建为单独的dex文件.这通常被称为预先dexing." Android中模块的定义是什么?这是这里提到的Java库,Android库和Android应用程序模块:http://developer.android.com/sdk/installing/studio-build.html#projectModules?远程或本地二进制依赖项(例如:Jars)是否计为单独的模块,因此可以放入不同的dex文件中,还是根据它们包含在模块中?
android android-build android-activity android-gradle-plugin android-multidex
我在构建应用程序时遇到了这个异常.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:494)
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:332)
at com.android.dx.command.dexer.Main.run(Main.java:243)
at com.android.dx.command.dexer.Main.main(Main.java:214)
at com.android.dx.command.Main.main(Main.java:106)
Run Code Online (Sandbox Code Playgroud)
我搜索了所有并得到了解决方法:
http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html
但是这个问题的正确解决方案是什么?
即使我相信我确实启用了 multidex,我也达到了 65536 的限制。我的 build.gradle 中有以下内容:
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
}
dexOptions {
preDexLibraries false
jumboMode true
keepRuntimeAnnotatedClasses false
// incremental false
javaMaxHeapSize "2g" // Use gig increments depending on needs
}
}Run Code Online (Sandbox Code Playgroud)
我有自己的应用程序实现,我尝试扩展 MultiDexApplication 并尝试调用 MultiDex.install(this); 在 attachBaseContext (不是同时)中,但我仍然不断收到以下错误:
D8: Cannot fit requested classes in the main-dex file.
fields: 66685 > 65536
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archivesRun Code Online (Sandbox Code Playgroud)
这是否意味着不应用 multidexing,所以即使我尽我所能启用它,我的构建设置中也没有启用 multidex,或者是什么导致了这种情况?有任何想法吗?
谢谢
索伦