Android - błąd: wykonanie nie powiodło się dla zadania „: app: transformClassesWithDexForRelease”

191

Problem polega na tym, że jestem w stanie uruchomić moją aplikację, gdy zmieniam debugtryb, ale nie działa, gdy przełączam się w releasetryb.

Wyjątek:

**FAILURE: Build failed with an exception.**
> Execution failed for task ':app:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

Kiedy uruchomiłem komendę gradle build z stacktrace, właśnie to otrzymałem

./gradlew app:transformClassesWithDexForRelease --stacktrace

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

*Exception is:*

>org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDexForRelease'.
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
            at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
            at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
            at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
            at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
            at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
            at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
            at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
            at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
            at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
            at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
            at org.gradle.internal.Factories$1.create(Factories.java:22)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
            at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
            at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
            at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
            at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
            at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
            at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
            at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:48)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
            at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:54)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:57)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
            at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:173)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:244)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:231)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
            ... 68 more
    Caused by: com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:422)
            at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:178)
            at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:174)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
            ... 77 more
    Caused by: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.core.AndroidBuilder.runDexer(AndroidBuilder.java:1472)
            at com.android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.java:1389)
            at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:250)
            ... 80 more
    Caused by: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.core.AndroidBuilder.runDexer(AndroidBuilder.java:1456)
            ... 82 more
    Caused by: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:43)
            at com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1464)
            at com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1456)
    Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:367)
            at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:41)
            ... 2 more

ja używam

  • Android Studio 2.0 Beta 6
  • Wersja Java: Java Runtime Environment Java (TM) SE (kompilacja 1.8.0_73-b02)
  • Wersja stopniowa: com.android.tools.build:gradle:2.0.0-beta6
  • I mam włączony Multidex

Mój plik build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.getkeepsafe.dexcount'

android {

    def VERSION_CODE = 52
    def VERSION_NAME = "1.0"
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        applicationId "com.example.app"
        manifestPlaceholders = [appName: "Personal App"]
        minSdkVersion 14
        targetSdkVersion 23
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
        versionCode VERSION_CODE
        versionName VERSION_NAME

        // Enabling multidex support.
        multiDexEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
        encoding = 'UTF-8'
    }

    signingConfigs {
        livekeystore {
            storeFile file('../key.jks')
            keyAlias 'livekeystore'
            keyPassword '123asd'
            storePassword '123asd'
        }
    }


    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.burgerking

            manifestPlaceholders = [googleMapsKey: "@string/release_google_map_key", appNameSuffix: ""]
        }

        debug {
            applicationIdSuffix '.dev'
            debuggable true
            minifyEnabled false
            shrinkResources false
            zipAlignEnabled false

            manifestPlaceholders = [googleMapsKey: "@string/debug_google_map_key", appNameSuffix: ' (Dev-' + VERSION_CODE + ')']

        }
    }

    dexOptions {
        incremental true
        javaMaxHeapSize "4g" // 2g should be also OK
    }

    useLibrary 'org.apache.http.legacy'

}

repositories {
    maven { url 'https://mint.splunk.com/gradle/' }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.4.2'
        classpath 'com.newrelic.agent.android:agent-gradle-plugin:4.244.0'
    }
}


dependencies {
    compile 'com.google.code.gson:gson:2.4'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:recyclerview-v7:23.2.0'
    compile 'com.android.support:cardview-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.android.gms:play-services-base:8.4.0'
    compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.googlecode.libphonenumber:libphonenumber:7.0.5'
    compile 'com.facebook.android:facebook-android-sdk:4.1.1'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup:pollexor:2.0.2'
    compile 'com.makeramen:roundedimageview:2.1.0'
    compile 'com.mcxiaoke.volley:library:1.0.16@aar'
    compile files('libs/now-auth-api.jar')
    compile 'com.jakewharton:butterknife:5.1.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.2.0'
    compile 'io.card:android-sdk:5.3.0'
    compile 'com.appboy:android-sdk-ui:1.10.3'
    testCompile 'junit:junit:4.11'
    testCompile('org.mockito:mockito-core:1.9.5') {
        exclude group: 'org.hamcrest'
    }
    testCompile('org.powermock:powermock-module-junit4:1.5') {
        exclude group: 'org.hamcrest'
    }
    testCompile('org.powermock:powermock-api-mockito:1.6.2') {
        exclude group: 'org.hamcrest'
    }

    compile 'me.grantland:autofittextview:0.2.1'

}

Wygląda na to, że mogę uruchomić kompilację wersji, jeśli ją usunę minifyEnabled true. Dlaczego tak jest, czy istnieje inny sposób na rozwiązanie tego problemu?

Sheraz Ahmad Khilji
źródło
czy możesz opublikować plik build.gradle aplikacji?
Harisewak,
@Harisewak zaktualizowałem pytanie, proszę spojrzeć na to teraz
Sheraz Ahmad Khilji
Tak @Sheraz masz rację, że przełączenie minifyEnabled na false rozwiązuje problem. Przeczytałem to w dokumencie: „musisz włączyć minifyEnabled, aby włączyć zmniejszanie kodu, a następnie shrinkResources, aby włączyć zmniejszanie zasobów. Jeśli jeszcze nie korzystałeś z minifyEnabled, upewnij się, że działasz, zanim dodasz także shrinkResources, ponieważ być może będziesz musiał edytować plik proguard-rules.pro, aby upewnić się, że wszystkie metody, do których masz dostęp za pomocą refleksji itp., Są wymienione jako reguły zachowania w tym plik ”( tools.android.com/tech-docs/new-build-system/resource-shrinking ). Sprawdź, czy tak jest.
Harisewak,
1
@Harisewak nadal nie rozwiązuje problemu, jeśli uruchomię zadanie z debugowaniem, a następnie otrzymam ten błądUncaught translation error: com.android.dx.cf.code.SimException: com.android.dx.rop.cst.CstMethodRef cannot be cast to com.android.dx.rop.cst.CstInterfaceMethodRef
Sheraz Ahmad Khilji
Mam ten sam problem z moim projektem. Jeśli użyję com.android.tools.build:gradle:1.3.0, jestem w stanie skompilować. Gdy tylko
użyję

Odpowiedzi:

185

naprawiłem tylko ten kod.

local.properties

org.gradle.jvmargs=-XX\:MaxHeapSize\=512m -Xmx512m

i powinieneś to zmieniać w gradiencie

defaultConfig {
    applicationId "yourProjectPackage"
    minSdkVersion 15
    versionCode 1
    versionName "1.0"
    targetSdkVersion 23

    multiDexEnabled true //important
}
aemre
źródło
4
„local.properties” to nazwa pliku lub wartość konfiguracji? Gdzie (np .: w którym folderze) znajduje się w projekcie?
Ulysses Alves
1
Plik local.properties przechodzi na poziom główny projektu. jeśli masz problem z multiDex -> developer.android.com/studio/build/multidex.html
anem
Właśnie włożyłem multiDexEnabled true do mojego build.gradle i magia się skończyła. Dziękuję Ci.
Marcelo Gumiero
Nie wiem, co to wszystko znaczy, ale zadziałało dla mnie!
DaveNOTDavid
Na API <21, multiDexEnabledbez rozszerzania Applicationklasy z MultiDexApplicationprowadzi do NoClassDefFoundErrors.
Miha_x64,
82

Jeśli wykonasz multiDexEnabled = truew defaultConfig aplikacji, otrzymasz pożądany wynik.

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 22
    multiDexEnabled = true
}
Rahul
źródło
To nie jest jedyny krok, aby pozwolić Multidexowi. W każdym razie potrzebujesz go tylko wtedy, gdy go zobaczysz DexException. developer.android.com/studio/build/multidex.html
OneCricketeer
45

Dla mnie problem został rozwiązany po usunięciu jarpliku z mojego projektu. wygląda na to, że jeden z jarplików w moim projekcie używał starszej wersji google play services.

Sheraz Ahmad Khilji
źródło
ten sam problem z jackrabbit-standalone-2.12.2.jar. Jeśli dodam go do projektu, problem się pojawi.
Alexeev Valeriy
1
@MikeOx Zaktualizowałem niektóre narzędzia dla Androida, w wyniku czego otrzymałem dwie wersje kilku plików jar, np. Mockable-android-24.jar i mockable-android-25.jar. Usunięcie starszych naprawiło te błędy kompilacji.
parvus
ale nie używam żadnych plików jar, więc dlaczego mam do czynienia z tym problemem
Mr. Mad
15
Czy możesz podać więcej szczegółowych wyjaśnień dla tego rozwiązania
Ivan Milisavljevic
@IvanMilisavljevic Możesz teraz używać Gradle, a nie plików JAR. developers.google.com/android/guides/setup#split
OneCricketeer
39

Otrzymałem również ten sam błąd:

Błąd: wykonanie nie powiodło się dla zadania „: app: transformClassesWithDexForDebug”. com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Przetwarzanie polecenia „C: \ Program Files \ Java \ jdk1.8.0_60 \ bin \ java.exe” zakończone niezerową wartością wyjścia 1

cóż, naprawiłem to za pomocą następujących kroków:

  1. Otwórz build.gradle aplikacji (nie ten w katalogu głównym projektu) i dodaj:

    android {
    //snippet
    //add this into your existing 'android' block
    
        dexOptions {
        javaMaxHeapSize "4g"
        }
    
    //snip
    }
  2. Spróbuj ponownie zbudować.

Uwaga: 4 g to 4 gigabajty i jest to maksymalny rozmiar stosu dla operacji dex.

PN10
źródło
Uratowałem mój dzień! Twoje zdrowie!
devhermluna
Najlepsze ... włóczę się od wielu godzin .. dzięki!
MbaiMburu
33

NIE MA POTRZEBY DLA MULTIDEXU, POWTARZAJĘ, NIE MA POTRZEBY DLA MULTIDEXU


Pozwól mi rozwinąć: Multidex jest w zasadzie narzędziem, które jest dostarczane z Androidem, a jeśli ustawisz to na prawdę, aplikacje z> 64 000 metod są w stanie skompilować przy użyciu nieco zmienionego procesu kompilacji. Jednak musisz użyć multidex tylko wtedy, gdy błąd wygląda następująco:

problem z zapisaniem danych wyjściowych: zbyt wiele odniesień do pola: 131000; max to 65536. Możesz spróbować użyć opcji --multi-dex.

lub tak

Konwersja do formatu Dalvik nie powiodła się: Nie można wykonać dex: identyfikator metody nie w [0, 0xffff]: 65536

Ale tak nie jest tutaj! Problem tutaj (przynajmniej dla mnie) wynika z zależności pliku build.gradle.

ROZWIĄZANIE: Wykorzystaj określone zależności - nie importuj całej sekcji zależności!

Na przykład, jeśli potrzebujesz zależności usług Play dla lokalizacji, zaimportuj ją tylko dla lokalizacji.

ROBIĆ:

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

NIE:

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

Innym problemem, który może być tego przyczyną, może być używana biblioteka zewnętrzna, która odwołuje się do poprzedniej wersji zależności. W takim przypadku wykonaj następujące kroki:

  1. Przejdź do menedżera SDK i zainstaluj wszelkie aktualizacje swoich zależności
  2. Upewnij się, że plik build.gradle pokazuje najnowszą wersję. Aby uzyskać najnowszą wersję, skorzystaj z tego łącza: https://developers.google.com/android/guides/setup
  3. Edytuj bibliotekę (lub zainstaluj zaktualizowaną wersję, jeśli istnieje), aby odwoływała się do najnowszej wersji

Wiem, że to pytanie jest stary, ale ja potrzebuję dostać tę odpowiedź tam, ponieważ używając multidex bez powodu potencjalnie może powodować ANR dla swojej aplikacji! Używaj multidex TYLKO, jeśli jesteś pewien, że go potrzebujesz i rozumiesz, co to jest.

Sam spędziłem godziny, próbując rozwiązać ten problem bez multideksów, i chciałem tylko podzielić się swoimi odkryciami - mam nadzieję, że to pomoże

Ruchir Baronia
źródło
Znakomity! Działa świetnie!
stoefln
1
Skąd wiesz, która konkretna zależność powoduje problem? Dodałem com.facebook.android:audience-network-sdk:4.+i od tego czasu nie mogę budować.
Ciberman
Uratowałeś mi dzień!
Rowan
1
taka głupia odpowiedź. jeśli masz wiele zależności, i tak potrzebujesz multi dex. wystarczy dodać biblioteki kotlin, kilka usług Google ( com.google.android.gms:play-services-*:*), usługi firebase, crashlytics, gson, androidx (biblioteki wsparcia), cardview, recyclinglerview, android.material: materiał. NIE JEST MOŻLIWE BEZ WIELU ZRÓB (lubisz capslock? Nie, więc proszę, nie odpowiadaj tutaj na takie pytania następnym razem ...)
użytkownik155
Ciało jest tutaj sprytne! Dokładnie!, Nie jest to błąd multideksów, błąd multideksów jest inny i może wynikać z niektórych zależności. i @ user155, RUCHIR NIE PONOSI ODPOWIEDZIALNOŚCI ZA TWOJE ZALEŻNOŚCI PROBLEM! i lubię kapsle :)
Hossein
25

Dodaj multiDexEnabled true w defaultConfig na poziomie aplikacji gradle.

defaultConfig {
    applicationId "your application id"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
Mwongera808
źródło
24

Miałem podobny problem w mojej aplikacji. Oto co zrobiłem.

1. dodaj to dla build.gradle w module: app

multiDexEnabled = true

Więc kod wyglądałby tak:

    android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example..."
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled = true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

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

To zadziałało dla mnie. Mam nadzieję, że to ci też pomoże :)

W tym samym projekcie użyłem również Firebase . Tak więc włączenie multiDexEnabled pozwala na inny problem w Firebase dla urządzeń Pre Lollipop . Niektóre klasy FireBase nie zostały zidentyfikowane. ( Nie można uzyskać dostawcy com.google.firebase.provider ).
Metoda rozwiązania wyjaśniona tutaj.

thilina Kj
źródło
minifyEnable true daje mi wyjątek - poniżej znajduje się moje pytanie, stackoverflow.com/questions/51720018/... Proszę o pomoc.
Naveen,
21

Wystąpił ten błąd podczas aktualizacji usług Google Play do wersji 9.0 z 7.5

Wystąpił błąd poniżej jednego:

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

Kiedy zmieniłem się na

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

Nie ma błędu. Spróbuj tego

Kalaivanan
źródło
1
dzięki, zmieniłem wersję na kompilację „com.google.android.gms: play-services: 8.4.0”. Myślę, że volley korzysta ze starych usług Google Play, które nie są kompatybilne z play-services:> 9.0
jai_b
3
To było dla mnie rozwiązanie. Problem polega na tym, że kilka zewnętrznych modułów odwołuje się do usług odtwarzania w różnych wersjach, więc jak można oczekiwać, że te wersje będą cały czas synchronizowane? Bardzo dziwny detal architektoniczny.
Ryan H.,
1
Nie powinieneś tego używać. Proszę selektywnie skompilować te biblioteki. developers.google.com/android/guides/setup#split
OneCricketeer
14

Po aktualizacji do Androida 3.4 zacząłem otrzymywać błąd, wypróbowałem wszystkie powyższe rozwiązania.

Główną przyczyną problemu było zaktualizowanie Android Studio w trybie Instant Run .

Dlatego jednym z rozwiązań, które możesz wypróbować, jest wyłączenie Natychmiastowego uruchamiania, jeśli jest włączone dla Ciebie, naprawiło mój problem.

devDeejay
źródło
1
Miałem ten sam problem. Wyłączenie Instant Run i włączenie go ponownie działało dla mnie.
Fogh
1
Naprawiono też mój problem. Pamiętaj - Instant Run jest przydatny, więc mam nadzieję, że wkrótce będzie lepszy sposób
SimonH
1
Aaaaarg zawsze włączają to w aktualizacji i zawsze powoduje tak wiele problemów.
Oliver Dixon
1
Jep, to też było przyczyną problemu dla mnie po włączeniu Firebase do projektu, wyłączenie Instant Run w końcu pozwala mi go zbudować, dzięki!
Starwave
1
Wyłączenie Natychmiastowego uruchamiania działało dla mnie z tym problemem. Błąd nie pojawił się ponownie.
wesley franks
11

Uważam, że odpowiedź na to pytanie jest akceptowana. Ale zamierzam napisać, z czym mam do czynienia i jak to rozwiązałem.

Otrzymałem również ten sam błąd:

Błąd: wykonanie nie powiodło się dla zadania „: app: transformClassesWithDexForDebug”. com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Przetwarzanie polecenia „C: \ Program Files \ Java \ jdk1.8.0_60 \ bin \ java.exe” zakończone niezerową wartością wyjścia 1

Nie miałem szczęścia zastosować wszystkich ustawień i odniosłem sukces. Ale kiedy próbowałem ponownie debugować projekt. Tym razem dostałem Three Error (w tym powyżej):

Błąd: 64-bitowe ostrzeżenie maszyny wirtualnej serwera Java HotSpot ™: CodeCache jest pełny. Kompilator został wyłączony.

i

Błąd: Ostrzeżenie 64-bitowej maszyny wirtualnej serwera Java HotSpot (TM): Spróbuj zwiększyć rozmiar pamięci podręcznej kodu, używając opcji -XX: ReservedCodeCacheSize =

Więc co zrobiłem? Po prostu idę do Android Studio:

Plik> Unieważnij pamięć podręczną / Uruchom ponownie ..> Unieważnij i uruchom ponownie

Szybka naprawa!

Dodatkowa uwaga:

Co znalazłem w Konsoli Gradle:

: app: incrementalDebugTasks: app: prePackageMarkerForDebug: app: fastDeployDebugExtractor: app: generateDebugInstantRunAppInfo: app: transformClassesWithDexForDebug Aby uruchomić dex w procesie, demon Gradle potrzebuje większej sterty. Obecnie ma około 910 MB. Aby przyspieszyć kompilację, zwiększ maksymalny rozmiar sterty demona Gradle do ponad 2048 MB. Aby to zrobić, ustaw org.gradle.jvmargs = -Xmx2048M w projekcie gradle.properties. Aby uzyskać więcej informacji, zobacz https://docs.gradle.org/current/userguide/build_environment.html : app: transformClassesWithDexForDebug FAILED

Przeczytaj więcej o tym tutaj na Oracle Blog

fWd82
źródło
9

Właśnie napisałem ten kod w gradle.properties i jest teraz w porządku

org.gradle.jvmargs=-XX:MaxHeapSize\=2048m -Xmx2048m
Selim Özbudak
źródło
8
  1. Usuń pliki jar w swojej klasie
  2. Zsynchronizuj to
  3. Skopiuj ten słoik i zsynchronizuj go

To zadziałało dla mnie.

Bharath
źródło
Czy możesz sprecyzować, które pliki jar? Czy to pliki jar w naszym projekcie gradle/wrapper?
HendraWD,
4
Nie wiem, co to jest z ludźmi wspominającymi o „słoikach”. To nic nie wyjaśnia.
Śledzenie
7

Działało mi to tylko przy użyciu określonej usługi.

Na przykład zamiast używać:

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

Użyłem:

com.google.android.gms:play-services-places:10.0.1

Marco Muñoz
źródło
1
To samo tutaj. Rozwiązałem problem, zastępując kompilację „com.google.android.gms: play-services: 10.2.0” kompilacją „com.google.android.gms: play-services-location: 10.2.0”
Sukhbir
6

Wiem, że to trochę stare pytanie, ale nadal. Za każdym razem, gdy mi się to przytrafia, dzieje się tak dlatego, że dołączam wszystkie biblioteki usług Play. Wystarczy zmienić play-services: xxx na play-service-: xxx w pliku build.gradle (module)

KostasKol
źródło
6

Sol 1: W build.gradle:

defaultConfig {
    multiDexEnabled true
}

Oczyść swój projekt i przebuduj.

Sol 2: w local.propertiesdodatku,

org.gradle.jvmargs=-XX\:MaxHeapSize\=512m -Xmx512m

Sol 3

compile 'com.android.support:multidex:1.0.1'

W przeciwnym razie dodaj wszystkie 3 do swojej aplikacji.

Crime_Master_GoGo
źródło
5

po prostu ustawienie multiDexEnabled na true działało dobrze.

    defaultConfig 
    {
        multiDexEnabled true     
    }
wanjiku
źródło
3

Zaktualizowałem jdk do wersji 1.8.0_74, Android-studio do wersji 2.1 podglądu 1 i dodałem do pliku aplikacji

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
Jurij Misyac
źródło
2

Miałem ten sam problem. Pewnego dnia program działał idealnie, a kolejne nie. Sprawdziłem na Github zmiany, które wprowadziłem. Dla mnie problem polegał na build.gradle (Module: app) w zależnościach:

compile 'com.android.tools.build:gradle:2.1.2'

Ta linia była przyczyną problemu. Po zmianie aplikacja znów działała poprawnie

Sara Alberola
źródło
1
Nic nie działa>
Ajay Pandya
1
Zmieniasz to na co?
Ruchir Baronia,
1
Usunąłem go (sprawdzałem teraz) i dalej działało
Sara Alberola,
2

dodaj tę linię do swojego build.gradle

 defaultConfig {
    ............
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    compileOptions.encoding = 'ISO-8859-1'
    multiDexEnabled true
}
Ganesh P.
źródło
4
Którą „linię” tu dodałeś?
OneCricketeer
2

W DefaultConfig Dodaj multiDexEnabled = true

    defaultConfig {
    applicationId "com.test"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled = true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Braj Bhushan Singh
źródło
2

Więc moje nie zostało rozwiązane przez dodanie flagi multiDexEnabled. To było tam przed otrzymaniem komunikatu o błędzie.

Tym, co rozwiązało błąd, było upewnienie się, że korzystam z tej samej wersji wszystkich bibliotek usług Play. W jednej bibliotece miałem 11.8.0, ale w aplikacji wykorzystującej bibliotekę korzystałem z 11.6.0 i ta różnica spowodowała komunikat o błędzie.

Zamiast więc zmieniać biblioteki na określone wersje, takie jak poprzednie odpowiedzi, być może chcesz sprawdzić, czy używasz tej samej wersji, ponieważ ostrzeżenia odradzają miksowanie wersji w Android Studio.

kriztho
źródło
2

Po wielu wysiłkach właśnie dodałem poniżej referencje i udało mi się

1) plik app-> „proguard-rules.pro”

-ignorewarnings

-keep class * {
    public private *;
}

2) A także dodane w aplikacji -> plik build.gradle

android {

        ...........................
    defaultConfig {
        ..................  

     multiDexEnabled true
    }


    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
        innerTest {
            matchingFallbacks = ['debug', 'release']
        }

    }

...................................................
}

dependencies {
    ..................................
    implementation  'com.android.support:multidex:1.0.2'
}
Kush
źródło
2

Domyślnie Android Studio ma maksymalny rozmiar sterty 1280 MB. Jeśli pracujesz nad dużym projektem lub twój system ma dużo pamięci RAM, możesz poprawić wydajność, zwiększając maksymalny rozmiar sterty dla procesów Android Studio, takich jak podstawowe IDE, demon Gradle i demon Kotlin.

Jeśli używasz 64-bitowego systemu, który ma co najmniej 5 GB pamięci RAM, możesz również ręcznie dostosować rozmiary sterty dla swojego projektu. Aby to zrobić, wykonaj następujące kroki:

Kliknij opcję Plik> Ustawienia na pasku menu (lub Android Studio> Preferencje w systemie macOS). Kliknij Wygląd i zachowanie> Ustawienia systemu> Ustawienia pamięci.

Aby uzyskać więcej informacji, kliknij

https://developer.android.com/studio/intro/studio-config

wprowadź opis zdjęcia tutaj

vinod
źródło
1

Wystarczy zmienić usługi Google Play w gradle (aplikacja modułu) z 9.xx na niższą wersję 8.4.0 jest dla mnie pracy

Nazwa Asshiba
źródło
Jest to znak, że wszystkie inne używane przez Ciebie wersje usług Google Play nie są zgodne.
OneCricketeer
1

Jeśli napotykasz problem po aktualizacji usług Google Play 9.8.0, dodaj to do swoich zależności:

`dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.google.firebase:firebase-messaging:9.8.0'
compile 'com.google.android.gms:play-services-maps:9.8.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.firebase:firebase-database:9.8.0'
compile 'com.google.firebase:firebase-auth:9.8.0'
compile 'com.google.firebase:firebase-crash:9.8.0'
compile 'com.google.maps.android:android-maps-utils:0.4.4'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'

}
ismail alaoui
źródło
1

Zdarzyło mi się to nawet w przypadku kompilacji debugowania i po prostu wyczyściłem wszystkie foldery kompilacji na poziomie modułu i na poziomie projektu i zadziałało, tak po prostu.

Panduka DeSilva
źródło
Pracował dla mnie właśnie teraz.
WillC
1

Dla tych, którzy nadal używają VS-TACO i mają ten problem. Dzieje się tak z powodu niespójności wersji plików jar.

Nadal musisz dodać poprawki do build.gradlepliku w platforms\androidfolderze:

 defaultConfig {
        multiDexEnabled true 
 }

 dependencies {
      compile 'com.android.support:multidex:1.0.3'
 }

Lepiej zrobić to w build-extras.gradlepliku (który automatycznie łączy się z plikiem build.gradle) ze wszystkimi innymi zmianami, jeśli są, i usunąć wszystko w platforms/androidfolderze, ale zostaw tam tylko build-extras.gradleplik. Następnie po prostu skompiluj.

Serg Tomcat
źródło
1

Żadna z tych odpowiedzi nie działała dla mnie. Używam Androida Studio 3.4.1.

Byłem w stanie zbudować projekt, ale studio Android pokazuje ten błąd, gdy zamierzałem wdrożyć go na urządzeniu mobilnym. Okazuje się, że jest to wina „natychmiastowych uruchomień”.

Postępuj zgodnie z tą odpowiedzią: https://stackoverflow.com/a/42695197/3197467

Keivan
źródło
0

Naprawdę nie wiem jak, ale błąd zniknął po tym wszystkim:

1

usunąć implementation 'com.google.android.gms:play-services:12.0.1'

I dodaj

implementation 'com.google.android.gms:play-services-location:12.0.1'
implementation 'com.google.android.gms:play-services-maps:12.0.1'
implementation 'com.google.android.gms:play-services-places:12.0.1'

2)

Zaktualizuj git, jdk, zmień lokalizację JDK w strukturze projektu

3)

Usuń folder kompilacji z mojego projektu

4

Oczyść i odbuduj projekt

Kyo Huu
źródło