相关疑难解决方法(0)

为什么范围注释在Dagger 2中具有RUNTIME保留?

Dagger 2有编译时验证,为什么范围注释有RUNTIME保留?为什么在运行时需要它们?

dagger-2

10
推荐指数
1
解决办法
1978
查看次数

Android MultiDex - 关于内部工作的问题

我最近发现了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

9
推荐指数
2
解决办法
3080
查看次数

-main-dex-list中的类太多了

我在构建应用程序时遇到了这个异常.

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

但是这个问题的正确解决方案是什么?

android gradle dex

6
推荐指数
0
解决办法
2494
查看次数

D8:无法在 main-dex 文件中容纳请求的类。字段:66685 > 65536 带有“multiDexEnabled true”

即使我相信我确实启用了 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 archives
Run Code Online (Sandbox Code Playgroud)

这是否意味着不应用 multidexing,所以即使我尽我所能启用它,我的构建设置中也没有启用 multidex,或者是什么导致了这种情况?有任何想法吗?

谢谢
索伦

android dex

6
推荐指数
0
解决办法
1466
查看次数