簡體   English   中英

無法在Android Studio中生成APK

[英]Can't generate APK in android studio

我有一個准備發布的Android應用程序。 我正在嘗試在Android Studio中的“構建apk”部分生成APK。 我正在使用一些外部庫。 但是,我收到與dex的字節碼相關的錯誤。 我已經在尋找解決方案,但沒有成功。

這是錯誤:

Information:Gradle tasks [:app:assembleDebug]
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/loopj/android/http/AsyncHttpResponseHandler;
Error:com.android.dex.DexException: Multiple dex files define Lcom/loopj/android/http/AsyncHttpResponseHandler;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
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.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
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:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/loopj/android/http/BaseJsonHttpResponseHandler;
Error:com.android.dex.DexException: Multiple dex files define Lcom/loopj/android/http/BaseJsonHttpResponseHandler;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
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.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
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 Lcom/loopj/android/http/BaseJsonHttpResponseHandler;

這是build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.NanoStima.AndroidClient"
        minSdkVersion 19
        targetSdkVersion 22
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
    compile 'com.android.support:appcompat-v7:25.1.1'
    testCompile 'junit:junit:4.12'
    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
    compile files('libs/mail.jar')
}

dependencies {
    compile 'com.google.android.gms:play-services:9.2.0'
    compile 'com.google.android.gms:play-services-location:9.2.0'
    compile 'com.facebook.android:facebook-android-sdk:4.26.0'
    compile 'com.android.support:multidex:1.0.1'
}

 dependencies {
    //   compile 'com.github.scribejava:scribejava-apis:3.2.0'
    compile 'com.loopj.android:android-async-http:1.4.4'
    compile group: 'org.mindrot', name: 'jbcrypt', version: '0.3m'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.0.1'
    compile 'com.android.support:design:25.0.1'
}

有人可以幫忙嗎?

警告:我正在測試您的某些建議,而該項目不再運行。 我為最初的gradle重新注冊,但仍然出現此錯誤:錯誤:任務':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的執行失敗。

java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:無法合並dex

我已經清理了項目,刪除了.gradle,重新啟動了android studio。 只是不要再運行了:\\

我注意到您在依賴項中使用了完整的Google Play服務庫,我懷疑它是dex字節碼問題的根本原因。 您應該嘗試僅使用所需的特定庫,而不是使用整個庫。 例如

代替:

compile 'com.google.android.gms:play-services:10.2.0

您可以使用:

compile 'com.google.android.gms:play-services-maps:10.2.0'
compile 'com.google.android.gms:play-services-location:10.2.0'

或考慮使用Multi dex。 參考: Android multi-dex

如果您閱讀錯誤消息,您將看到問題是由以下原因引起的:

編譯'com.loopj.android:android-async-http:1.4.4'

在您的build.gradle(項目級別)中添加以下內容:

allprojects {
    repositories {
        jcenter()
        google()
        maven {
            url 'https://maven.google.com/'
        }
    }
}

您的問題可能會得到解決(在這種情況下,通過jcenter())。

注意:

這是谷歌()或Maven {URL“ https://maven.google.com ”}取決於你的搖籃版本。 如果您擁有Gradle 4.1版,則可以使用google(),在其他情況下,則需要使用maven部分。

您可以在此處找到更多說明遠程存儲庫

我最終到達那里。 我將gradle從上一版本反轉為:

classpath 'com.android.tools.build:gradle:2.3.3'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM