标签: android-multidex

multidex - NoClassDefFoundError 启用了 multidex

我的应用程序在 21 之前崩溃并java.lang.NoClassDefFoundError app.module.SomeClass出现错误。

我已经启用了 Multidex:

构建.gradle:

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
}

dependencies {
   ...
   implementation "androidx.multidex:multidex:2.0.1"
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序类:

class App : DaggerApplication() {
    ...
    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }
Run Code Online (Sandbox Code Playgroud)

在阅读了主 DEX 文件中所需的声明类之后,我创建了multidex-config.pro文件以包含app.module.**在主 DEX 文件中:

-keep class app.module.** { *; }
Run Code Online (Sandbox Code Playgroud)

并在 build.gradle 中注册:

android {
  buildTypes {
    debug {
      ...
      multiDexKeepProguard file('multidex-config.pro')
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过检查build/intermediates/legacy_multidex_main_dex_list/debug/mainDexList.txt和分析调试 apk(检查是否classes.dex包含app.module.SomeClass)来确认它。

但我仍然收到java.lang.NoClassDefFoundError …

android kotlin android-multidex

8
推荐指数
2
解决办法
2863
查看次数

Androidx MutliDex:.dex 文件中的方法引用数不能超过 64K

0.57 => 0.59迁移应用程序后,我需要修复第三方软件包的一些问题,现在我面临着 dex 问题。

构建.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28

        // supportLibVersion = "28.0.0"
        // supportVersion = "28.0.0"
        // googlePlayServicesVersion = "15.0.1"
        // facebookSdkVersion = "4.37.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath 'com.google.gms:google-services:4.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the …
Run Code Online (Sandbox Code Playgroud)

android android-multidex react-native

8
推荐指数
1
解决办法
9187
查看次数

找不到Gradle DSL方法:'multiDexEnabled()'

我按照https://developer.android.com/tools/building/multidex.html上的multidex指南进行操作

但是我发现这个错误没有找到Gradle DSL方法:'multiDexEnabled()'.我更新了Android内置工具,Android支持存储库和库.这是我的gradle.build文件.我在这里做错了吗?

Could not find method multiDexEnabled() for arguments [true] on ProductFlavorDsl_Decorated{name=main, minSdkVersion=ApiVersionImpl{mApiLevel=10, mCodename='null'}, targetSdkVersion=ApiVersionImpl{mApiLevel=17, mCodename='null'}, renderscriptTargetApi=-1, renderscriptSupportMode=null, renderscriptNdkMode=null, versionCode=-1, versionName=null, applicationId=test.com.app, testApplicationId=null, testInstrumentationRunner=null, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null}.
Run Code Online (Sandbox Code Playgroud)

的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "test.com.app"
        minSdkVersion 10
        targetSdkVersion 17

        // Enabling multidex support.
        multiDexEnabled true
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':addThisSDK')
    compile project(':centeredContentButton')
    compile project(':googleplayservices_lib') …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-gradle-plugin android-multidex

7
推荐指数
3
解决办法
1万
查看次数

有没有办法在Android Studio中使用MultiDex功能时限制主dex文件中的方法数量

当我在Android Studio中启用MultiDex功能时,就像文档所说,它会自动转换为两个或更多dex文件.我无法配置它.似乎在主dex文件中,方法的数量非常接近限制(65536).

问题是如何配置它,使主dex文件中的方法数量减少到一定数量,比如60k.我必须将apk上传到亚马逊appstore,亚马逊的人会在主要的dex文件中添加一些方法并使其超过65536的限制.

android android-studio android-gradle-plugin android-multidex

7
推荐指数
1
解决办法
3396
查看次数

Android:SugarORM和multidex

我正在使用使用SugarORM的Android项目.现在方法限制已经增加了很多,我必须激活multidex支持.但是现在我遇到了SugarORM的问题,它只创建了classes.dex文件中的表.它似乎完全忽略了classes2.dex.这真的是Sugar中的一个错误,是否有一些好方法可以绕过这个问题?

android sugarorm android-multidex

7
推荐指数
1
解决办法
649
查看次数

Android ProGuard + MultiDex导致ClassNotFoundException

MultiDex在我的android项目中启用了.它工作正常,直到我尝试启用proguard.我可以成功构建项目,但我在启动时遇到运行时异常.它无法找到Application类和MainActivity.在启用之前我遇到了同样的问题MultiDex.现在我想由于某种原因,MultiDex它无法正常使用ProGuard.这是我在logcat中得到的 -

02-17 19:01:09.749: I/MultiDex(2079): VM with version 2.1.0 has multidex support
02-17 19:01:09.749: I/MultiDex(2079): install
02-17 19:01:09.749: I/MultiDex(2079): VM has multidex support, MultiDex support library is disabled.
02-17 19:01:09.750: I/art(2079): Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.FragmentActivity>
02-17 19:01:09.750: I/art(2079): Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.FragmentActivity>
02-17 19:01:09.751: I/art(2079): Rejecting re-init on previously-failed class java.lang.Class<mypackage.activities.MainActivity>
02-17 19:01:09.751: I/art(2079): Rejecting re-init on previously-failed class java.lang.Class<mypackage.activities.MainActivity>
02-17 19:01:09.751: D/AndroidRuntime(2079): Shutting down VM …
Run Code Online (Sandbox Code Playgroud)

android proguard classnotfoundexception android-multidex

7
推荐指数
1
解决办法
7102
查看次数

任务执行失败':app:shrinkReleaseMultiDexComponents'

我在Android Studio中生成签名的apk时遇到以下错误.

:app:shrinkReleaseMultiDexComponents FAILED
Error:Execution failed for task ':app:shrinkReleaseMultiDexComponents'.
> java.io.IOException: The output jar [E:\SVN_studio\100's\trunk\app\build\intermediates\multi-dex\release\componentClasses.jar] must be specified after an input jar, or it will be empty.
Information:BUILD FAILED
Information:1 error
Information:Total time: 35.975 secs
Information:159 warnings
Run Code Online (Sandbox Code Playgroud)

这是我的build.gradle文件

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
compileSdkVersion 21
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "<packageName>"
    minSdkVersion 16
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled true
        shrinkResources true


    }
}
packagingOptions {
    exclude 'META-INF/LICENSE.txt'
} …
Run Code Online (Sandbox Code Playgroud)

android release android-studio android-multidex

7
推荐指数
1
解决办法
1772
查看次数

Xamarin Android Multi Dex应用程序,具有在Lollipop之前运行的自定义应用程序类

关于这个问题散布着不少帖子,但我的问题是:

有没有人设法成功构建一个支持MultiDex的应用程序,该应用程序利用将在Lollipop前设备上运行的自定义应用程序类?

对于想要了解更多信息的人,请继续阅读.

问题在于,在创建使用自定义应用程序类的MultiDex应用程序时(我猜绝大多数65k以上的应用程序都属于此类别),该类最终不会出现在导致设备的第一个dex文件中没有内置的MultiDex支持来崩溃错误

[AndroidRuntime] java.lang.RuntimeException:无法实例化应用程序md5a3fc106bb082f0a6c07b5025b0a464e3.MyApplication:java.lang.ClassNotFoundException:路径上没有找到类"md5a3fc106bb082f0a6c07b5025b0a464e3.MyApplication"

我已经尝试了所有列出的解决方案,包括来自Xamarin的支持,以便实现这一目标.

关于它的文章很多:

https://bugzilla.xamarin.com/show_bug.cgi?id=35491 https://forums.xamarin.com/discussion/57485/multiple-issues-with-library-project-and-multidex

我做了什么:

我已经使用mainDexClasses.bat文件的修改版本创建了一个自定义MultiDexMainDexList文件(根据文章).

然后我修改了Xamarin抛出的命令以使用完整路径名,因为Xamarin只是尝试使用"obj\Debug"

mainDexClasses_fixed.bat --output C:\ Users\bradl_000\Documents\blocke79\App\App\obj\Debug\multidex.keep"'C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\MonoAndroid\v6. 0\mono.android.jar ';' C:\ androidsdk \额外\机器人\支持\ multidex \库\库\机器人支撑-multidex.jar ';' C:\用户\ bradl_000 \文件\ blocke79 \应用\ App\obj\Debug__library_projects __\Aniways.AndroidBinding\library_project_imports\aniways-V2.3.08.jar'"(已修剪这个庞大的列表供阅读)

这将生成一个MultiDexMainDexList文件,其中包含项目中的所有类.然后我使用"MultiDexMainDexList"的新构建操作将其添加到我的项目中(仅在Alpha通道v6中可用).

这消除了有关应用程序类的错误,但抛出了一个关于无法找到PackageManager类的新错误.

java.lang.NoClassDefFoundError%3A + mono.MonoPackageManager_Resources

然后我开始考虑我应该减少MultiDexMainDexList文件中的整个类列表,并保留我认为我的自定义应用程序类需要加载的类.无论我对这个列表做了什么,我仍然得到有关PackageManager的错误.包含管理器类,我尝试使用类的顺序,以防有所作为.

单/ MonoPackageManager.class

有没有人走过同样的道路比我更成功?它甚至可能吗?

xamarin.android android-multidex

7
推荐指数
0
解决办法
1356
查看次数

Code shrinker R8 crashes my Xamarin.Android app on startup with Unable to get provider com.google.firebase.provider.FirebaseInitProvider

I have a Xamarin.Android app which I recently switched to use R8 code shrinker. Unfortunately, my app is crashing on startup with the following error:

java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn’t find class “com.google.firebase.provider.FirebaseInitProvider” on path: DexPathList[[zip file “/data/app/app-bundle-1/base.apk”],nativeLibraryDirectories=[/data/app/app-bundle-1/lib/arm64, /data/app/app-bundle-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:6105)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5572)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5511)
    at android.app.ActivityThread.-wrap2(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1611)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:165)
    at android.app.ActivityThread.main(ActivityThread.java:6375)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
Run Code Online (Sandbox Code Playgroud)

I found this article, it's more related to MultiDex and native android …

android xamarin.android android-multidex android-d8 android-r8

7
推荐指数
0
解决办法
1192
查看次数

Android R8 更新依赖项后出错

我已经更新了所有项目依赖项,并且收到了不同的 R8 错误。

AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{}],"tool":"D8"}
org.gradle.workers.WorkerExecutionException: There was a failure while executing work items
    at org.gradle.workers.internal.DefaultWorkerExecutor.workerExecutionException(DefaultWorkerExecutor.java:267)
    at org.gradle.workers.internal.DefaultWorkerExecutor.await(DefaultWorkerExecutor.java:249)
    at com.android.build.gradle.internal.tasks.DexArchiveBuilderTaskDelegate.doProcess(DexArchiveBuilderTaskDelegate.kt:227)
    at com.android.build.gradle.internal.tasks.DexArchiveBuilderTask.doTaskAction(DexArchiveBuilderTask.kt:255)
    at com.android.build.gradle.internal.tasks.NewIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:69)
    at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
    at com.android.build.gradle.internal.tasks.NewIncrementalTask.taskAction(NewIncrementalTask.kt:46)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
    at org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction.doExecute(IncrementalInputsTaskAction.java:32)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
    at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
    at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
    at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
    at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
    at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
    at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:171)
    at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
    at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
    at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
    at …
Run Code Online (Sandbox Code Playgroud)

android gradle android-multidex android-d8 android-r8

7
推荐指数
1
解决办法
1万
查看次数