Android Studio Dex错误

时间:2018-02-07 12:42:56

标签: android android-studio dex

所以我刚刚开始使用Android Studio并开发应用程序,这是迄今为止非常基本的东西,我正在尝试将数据从HTML文件解析到我的应用程序,我遇到了一些问题并且一直在谷歌上搜索在过去的几个小时里,毕竟无法修复它。

这是错误日志:

Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error:  at             com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define     Lorg/jsoup/nodes/Entities$CoreCharset;
Error:  at     java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:com.android.dex.DexException: Multiple dex files define Lorg/jsoup/nodes/Entities$CoreCharset;
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error:  at     java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/jsoup/nodes/Entities$CoreCharset;

这是我的应用程序gradle:

apply plugin: 'com.android.application'

android {
    useLibrary 'org.apache.http.legacy'
    compileSdkVersion 26
    defaultConfig {
        applicationId "app.diviwire.transportes"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner     "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),     'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/README.md'
        exclude 'META-INF/CHANGES'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'com.android.support:support-compat:26.1.0'
    compile 'com.android.volley:volley:1.0.0'
    // jsoup HTML parser library @ https://jsoup.org/
    compile 'org.jsoup:jsoup:1.11.2'
    compile 'com.android.support:multidex:1.0.1'
}

告诉我是否还有其他遗漏,不知道在我刚刚开始的时候添加更多内容。先谢谢你们!

修改 所以我跟随了@IntelliJ Amiya的建议,显然它仍然没有用,我可能做错了但是这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.diviwire.transportes">

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:name="android.support.multidex.MultiDexApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainMenuActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".BoatMenuActivity" />
    <activity android:name=".HorarioBarcoBarreiroActivity" />
</application>

我还在我的活动中添加了以下内容:

@Override
protected void attachBaseContext(Context base){
    super.attachBaseContext(base);
    MultiDex.install(this);
}

它仍然给我同样的错误。

2 个答案:

答案 0 :(得分:0)

您已达到dex操作的Java虚拟机(JVM)的最大内存分配池,因此您必须增加池内存的大小。

您刚刚在android项目build.gradle文件中添加了以下代码。

dexOptions{
javaMaxHeapSize "4g"
}

只是为dex操作指定Java虚拟机(JVM)的最大内存分配池的选项。

4g是4千兆字节,这是dex操作的最大堆大小。

答案 1 :(得分:0)

在依赖项下的构建 Gradle 添加 classpath 'com.android.tools:r8:1.6.84' 对我有用。