Rob*_*urt 50 android gradle dex android-multidex
我正在我的应用程序上尝试新的MultiDex支持,到目前为止我已经设法正确编译我的应用程序,但在运行它时,我得到以下异常:
java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newApplication(Instrumentation.java:998)
at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
Run Code Online (Sandbox Code Playgroud)
这是我的gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:21.0.0'
compile 'com.android.support:support-v13:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
}
Run Code Online (Sandbox Code Playgroud)
还有我的AndroidManifest.xml:
<application
android:name="android.support.multidex.MultiDexApplication">
Run Code Online (Sandbox Code Playgroud)
我不明白问题是什么.我想我根据文档做了一切.还有其他我想念的东西吗?我确保从SDK管理器安装了最新的支持库和repo.
Man*_*Man 26
该解决方案没有帮助我,因为我使用的是jetpack版本,即androidx。库。
关注了官方文档。
而且
我不得不将名称更改为androidx .... Multidex。
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助其他希望在jetpack中添加多聚醚的人。
And*_*hen 16
我的配置:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.+' // 0.14.1, 2014-11-6
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
android {
compileSdkVersion = 21
buildToolsVersion = "21.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我有同样的问题.但我发现了一个奇怪的情况:
建立/中间体/ DEX /调试:
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes.dex
Run Code Online (Sandbox Code Playgroud)
解压缩apk,build/outputs/apk:
-rw-rw-r-- 1 andrew andrew 8357596 Nov 6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 2221176 Nov 6 20:18 classes.dex
Run Code Online (Sandbox Code Playgroud)
在apk中,classes.dex的主要类应该大于classes2.dex,但不是.我也使用dex2jar和unzip jar来检查类,应用程序类不在classes.dex中,而是在classes2.dex中.
但是,我应该修复它.这是我可以尝试的修补的android gradle插件:
buildscript {
repositories {
mavenCentral()
maven { url 'https://github.com/yongjhih/android-gradle-plugin.m2/raw/master/' }
}
dependencies {
classpath 'com.infstory.tools.build:gradle:0.14.+'
}
}
Run Code Online (Sandbox Code Playgroud)
该补丁位于:https://github.com/yongjhih/android-gradle-plugin/commit/9c2212e3b1b4c6e1f7b47f2086aba1903a6258bf 或 https://android-review.googlesource.com/#/c/113331/
问题:https://code.google.com/p/android/issues/detail?id = 78761
官方补丁是https://android-review.googlesource.com/#/c/113201/已经合并,我认为它可能会在下一版本中修复.
已修复0.14.2(2014/11/10).(来自http://tools.android.com/tech-docs/new-build-system)
Release notes:
0.14.2 (2014/11/10)
Fix potential multi-dex issue where the dex files could be renamed during packaging, leading to the wrong main dex file being used.
Fix versionNameSuffix support
Fix BuildType.initWith to copy shrinkResources flag
setup default proguard rule file if none are provided (SDK/tools/proguard/proguard-android.txt)
BuildType.pseudoLocalesEnabled flag to include fake locales in apk.
Run Code Online (Sandbox Code Playgroud)
Poo*_*oja 13
In my case its solved by changes below code in Manifest from
android:name="android.support.multidex.MultiDexApplication"
Run Code Online (Sandbox Code Playgroud)
to
android:name="androidx.multidex.MultiDexApplication"
Run Code Online (Sandbox Code Playgroud)
小智 7
设置您的应用程序项目以使用multidex配置要求您根据应用程序支持的最低Android版本对应用程序项目进行以下修改。
如果将minSdkVersion设置为21或更高,则只需在模块级build.gradle文件中将multiDexEnabled设置为true,如下所示:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,如果将minSdkVersion设置为20或更低,则必须使用multidex支持库,如下所示:
修改模块级别的build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
Run Code Online (Sandbox Code Playgroud)根据是否覆盖Application类,执行以下操作之一:
如果不覆盖Application类,请编辑清单文件以在标记中设置android:name,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)如果您确实覆盖了Application类,请如下进行更改以扩展MultiDexApplication(如果可能):
public class MyApplication extends MultiDexApplication { ... }
Run Code Online (Sandbox Code Playgroud)或者,如果您确实重写了Application类,但无法更改基类,则可以改写attachBaseContext()方法并调用MultiDex.install(this)以启用multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Run Code Online (Sandbox Code Playgroud)小智 7
对我来说,答案是切换到 androidx 版本
android:name="androidx.multidex.MultiDexApplication"
implementation "androidx.multidex:multidex:2.0.1"
我最近有这个问题。尽管我的配置没有更改,但此错误开始出现。我尝试了所有建议的解决方案,包括删除虚拟设备和创建新的解决方案。
但是,我确实注意到,如果我构建了一个APK并将其拖到仿真器中进行安装,它就可以正常工作。
最后清理项目并重新运行,然后它开始工作。
| 归档时间: |
|
| 查看次数: |
51164 次 |
| 最近记录: |