com.android.build.transform.api.TransformException


158

Próbuję zintegrować logowanie Google, w mojej aplikacji dodałem te biblioteki:

compile 'com.google.android.gms:play-services-identity:8.1.0'
compile 'com.google.android.gms:play-services-plus:8.1.0'

Dodaj to również do gradle kompilacji projektu:

classpath 'com.google.gms:google-services:1.4.0-beta3'

Dodaj także wtyczkę do gradle budowania aplikacji:

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

następnie dodaj wymagane uprawnienia, ale kiedy próbuję uruchomić moją aplikację, otrzymałem ten błąd:

    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
    com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: 
    org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0\bin\java.exe'' finished with non-zero exit value 2

Odpowiedzi:


312

Spróbuj dodać multiDexEnabled truedo pliku build.gradle aplikacji .

 defaultConfig {
    multiDexEnabled true
}

EDYTOWAĆ:

Najpierw wypróbuj odpowiedź Steve'a . W przypadku, gdy zdarza się to często lub pierwszy krok nie pomógłmultiDexEnabled może pomóc. Dla tych, którzy lubią kopać głębiej, jest kilka podobnych problemów (z większą liczbą odpowiedzi):

: app: dexDebug ExecException zakończony niezerową wartością wyjścia 2

Błąd: nie powiodło się wykonanie zadania „: app: dexDebug”. com.android.ide.common.process.ProcessException


3
Nie działa dla mnie. Odpowiedź Steve'a - Sprzątanie załatwiło sprawę. Właśnie zaktualizowałem wersję zapoznawczą do AS1.5
Scott,

6
Aby być uczciwym, zawsze powinieneś sprawdzić, czy problem można rozwiązać poprzez czyszczenie. Jestem przekonany, że pomoże to tym, którym czyszczenie nie załatwiło.
JuliusScript,

obie te rzeczy mi nie pomogły - ale restart AS w końcu
załatwił sprawę

nic mi nie pomogło, ale zaczęło działać po ponownym uruchomieniu AS
Maciej Boguta

1
Radziłbym również sprawdzić odpowiedź A Grandta poniżej ( stackoverflow.com/a/33690032/1617737 ), zanim wskoczysz do tego rozwiązania.
zakaz geoinżynierii

146

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że nie używasz

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

Spowoduje to zaimportowanie WSZYSTKICH usług odtwarzania, a przekroczenie limitu metody 65535 pojedynczego pliku APK dex zajmie niewiele więcej niż hello world.

Zawsze określaj tylko te usługi, których potrzebujesz, na przykład:

compile 'com.google.android.gms:play-services-identity:8.3.0'
compile 'com.google.android.gms:play-services-plus:8.3.0'
compile 'com.google.android.gms:play-services-gcm:8.3.0'

10
Jesteście najlepsi! To rozwiązało mój problem. Odbudowa nie pomaga w moim przypadku, jak wspomniano w wielu rozwiązaniach. Jak wspomniałeś, biblioteka usług Google Play ma wiele podskładników i należy je importować tak, jak powiedziałeś - jeden po drugim. Jeszcze raz wielkie dzięki!
Ivan Caravanio

2
Miałem ten problem w ciągu ostatnich kilku dni. Myślałem, że wybrałem tylko to, czego potrzebowałem. Ale, nisko, po godzinach patrzenia importowałem wszystkie usługi do gier, podczas gdy wszystko, czego chciałem, to reklamy usług gier. Zdecydowanie sprawdź swoje zależności od gradle, ludzie!
MCLLC

@ A.Grandt, czy możesz dodać łącze, które podał Ivan w Twojej odpowiedzi? Zawiera listę nazw wszystkich podkomponentów i powinna być częścią odpowiedzi, ponieważ to kolejny krok, który każdy musi wykonać.
Murmel

137

Po prostu musiałem wyczyścić mój projekt, a następnie został pomyślnie zbudowany.


4
Dzięki! Działa bez zarzutu! Przyjęta odpowiedź byłaby dziwna, ponieważ mój projekt jest daleki od osiągnięcia limitu metody 65K (co wymagałoby multidex).
Louis CAD

4
Tak, sprzątanie było właściwą drogą. AS 1.4
Felipe Caldas

Jeśli masz moduły biblioteczne, wyczyść wszystkie moduły w projekcie, aby działały. Czyszczenie tylko pojedynczych modułów nie działało dla mnie. Wyczyść CAŁY projekt.
Ach,

Czy ktoś może mi powiedzieć, jak wyczyścić projekt? Próbowałem wielu „kombinacji” i nic nie działa. Widzę, że wszyscy mówią „czyste”, ale nie wiem jak. Dzięki.
Alberto Rubio,

@AlbertoRubio, w obszarze Kompilacja> Wyczyść projekt na pasku narzędzi AS.
Chantell Osejo

23

Ten błąd zaczął się pojawiać, gdy dodałem nowe metody do mojego projektu. Wiedziałem, że nie zbliżam się do limitu metody 65k i nie chcę włączać obsługi multiDex dla mojego projektu, gdybym mógł na to poradzić.

Rozwiązałem to, zwiększając pamięć dostępną dla :app:transformClassesForDexForDebugzadania. Zrobiłem to, określając javaMaxHeapSize w gradle.build.

gradle.build

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
}

Próbowałem tego po tym, jak nie udało mi się z innymi typowymi rozwiązaniami tego problemu:

  • Prowadzenie projektu clean
  • Ręczne usuwanie katalogów /app/buildi /buildz mojego projektu
  • Unieważnienie pamięci podręcznej Gradle i ponowne uruchomienie Android Studio

Błąd

Błąd: nie powiodło się wykonanie zadania> „: app: transformClassesWithDexForDebug”. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process „command” /Library/Java/JavaVirtualMachines/jdk1.8.0_45. jdk / Contents / Home / bin / java '' zakończone niezerową wartością wyjścia 1

Uwaga: zwiększenie ilości pamięci dostępnej dla zadania DEX może spowodować problemy z wydajnością w systemach z mniejszą ilością pamięci - łącze .


To zadziałało dla mnie, tylko określenie maksymalnego rozmiaru sterty rozwiąże problem, dziękuję Maurice
Zeyad Assem

8

Z podobnym problemem spotkałem się również w Android Studio 1.5.1 i Gradle 1.5.0. Muszę tylko usunąć niechciane biblioteki z zależności, które mogą być automatycznie dodawane w pliku build.gradle mojej aplikacji. Jednym z nich było: kompilacja „com.google.android.gms: play-services: 8.4.0”. Dlatego w celu uzyskania najlepszych praktyk spróbuj uwzględnić tylko określoną bibliotekę usług odtwarzania, na przykład tylko reklamy

dependencies {
    compile 'com.google.android.gms:play-services-ads:8.4.0'
}

Mimo że

defaultConfig {
    multiDexEnabled true
}

to również rozwiąże problem, ale zapewnia wiele notatek w konsoli gradle, co utrudnia znalezienie innych rzeczywistych problemów podczas kompilacji


Zawężenie korzystania z Google API tylko do odtwarzania-usług-map załatwiło sprawę. Oto oficjalny podział różnych komponentów Google Play-Services API: developers.google.com/android/guides/ ...
jperl

4

możesz zobaczyć dokumentację Androida

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

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

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

3

Używam AS 1.5.1 i napotkałem ten sam problem. Ale samo wyczyszczenie projektu po prostu się nie uda, więc spróbowałem.

  • czysty projekt
  • zrestartuj AS
  • Synchronizuj projekt

To zadziałało ze mną, więc mam nadzieję, że to pomoże.


3
Byłoby to bezcelowe w przypadku projektów, które przekroczyły limit 64k Dex.
Igor Ganapolsky

3

W moim przypadku zmień buildToolsVersion z „24” na „23.0.2”, rozwiąż problem.


2

W moim przypadku wyjątek wystąpił, ponieważ wszystkie rozszerzenia usług Google Play nie mają tej samej wersji, jak poniżej

 compile 'com.google.android.gms:play-services-plus:9.8.0'
 compile 'com.google.android.gms:play-services-appinvite:9.8.0'
 compile 'com.google.android.gms:play-services-analytics:8.3.0'

Zadziałało, kiedy zmieniłem to na

compile 'com.google.android.gms:play-services-plus:9.8.0'
 compile 'com.google.android.gms:play-services-appinvite:9.8.0'
 compile 'com.google.android.gms:play-services-analytics:9.8.0'

1
Nie przeglądałem wszystkich odpowiedzi i nie widziałem twoich, więc ... odkryłem, że tak było w moim przypadku około godzinę później: /
denispyr

2

Rozwiązałem to następnym:

Skonfigurowałem multidex

W build.gradle musisz dodać następny.

android {
...
   defaultConfig {
       ...
       // Enabling multidex support.
       multiDexEnabled true
       ...
   }
   dexOptions {
      incremental true
      maxProcessCount 4 // this is the default value
      javaMaxHeapSize "2g"
   }
...
}
dependencies {
...
   compile 'com.android.support:multidex:1.0.1'
...
}

Dodaj następny w local.properties

org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Następnie do klasy Application musisz dodać także Multidex.

 public class MyApplication extends MultiDexApplication {

   @Override
   public void onCreate() {
       super.onCreate();
       //mas codigo
   }

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

Nie zapomnij dodać kodu linii do pliku Manifest.xml

<application
    ...
    android:name=".MyApplication"
    ...
/>

To wszystko wystarczyło do rozwiązania błędu: nie powiodło się wykonanie zadania ': app: transformClassesWithDexForDebug. Sprawdź bardzo dobrze plik build.gradle za pomocą javaMaxHeapSize "2g", a local.properties org.gradle.jvmargs = -Xmx2048m mają 2 gigabajty.


2
Publikuj wyłącznie w języku angielskim. To wygląda na dobrą odpowiedź, szkoda by było, gdyby została usunięta, ponieważ nie jest w języku angielskim.
Tunaki

1

Miałem ten sam problem, kiedy przywróciłem starą wersję przez git, a ta wersja miała poprzednią bibliotekę .jar jednego zewnętrznego interfejsu API iz jakiegoś powodu okazało się, że oba jar z tego samego sdk, tylko różne wersje były w folderze / libs .


1

Najpierw usuń pliki pośrednie TWÓJ FOLDER APLIKACJI \ app \ build \mediates LUB Wyczyść projekt, a następnie przebuduj.

Nie dodawaj

multiDexEnabled true

to znaczy

defaultConfig {
        multiDexEnabled true
}

To dla mnie praca


1

Rozwiązałem ten problem, zmieniając na najnowszą buildToolsVersion

android {
    //...
    buildToolsVersion '26.0.2' // change from '23.0.2'
    //...
}

1

Pomocna odpowiedź, jeśli powyższe nie działa.

Przejdź do pliku gradle aplikacji,

Sprawdź, czy wszystkie wersje zależności są wymienione z odpowiednim kodem wersji a nie z jakąkolwiek wartością względną, taką jak (com.example.demo: +)

Poprzednie - wdrożenie „com.google.api-client: google-api-client-android: +”

Po - implementacja „com.google.api-client: google-api-client-android: 1.30.0”


0

Jeśli używasz najnowszej wersji gradle, tj. classpath 'com.android.tools.build:gradle:1.5.0' and classpath 'com.google.gms:google-services:1.4.0-beta3'Spróbuj zaktualizować najnowsze repozytorium pomocy technicznej z menedżera SDK i przebuduj cały projekt.


0

Jeśli potrzebujesz dodać to odniesienie do wtyczki cordova, dodaj następną linię w pliku plugin.xml.

<framework src="com.android.support:support-v4:+" />

0

Jeśli różne zależności mają ten sam plik jar, również powoduje ten błąd kompilacji.

Na przykład:

compile('com.a.b:library1');
compile('com.c.d:library2');

Jeśli „biblioteka1” i „biblioteka2” mają taką samą nazwę jar xxx.jar, spowoduje to taki błąd.



0

Zmieniłem kilka png i numer kompilacji w gradle i teraz to rozumiem. Nie pomogło żadne czyszczenie i ponowne uruchamianie. Wyłączenie Instant Run rozwiązało problem. YMMV


0

Miałem tę samą opcję i jak tylko wyłączyłem Instant run, działało dobrze na moim urządzeniu API16, ale na urządzeniu API24 działało dobrze z Instant run.

Mam nadzieję, że pomoże to komuś, kto ma ten sam problem


0

Po prostu przejdź do Build - Edit Build Types - Properties - Build Type Version i obniżyć do wersji 23.0.1. Kliknij OK. Działa to w Android Studio 1.5. U mnie to zadziałało.


0

odpowiedź zapisu jest w gradle put defaultConfig {multiDexEnabled true}, a następnie nazwa aplikacji w manifeście android: name = "android.support.multidex.MultiDexApplication" Chciałbym, żeby ta odpowiedź była komuś pomocna


0

ten kod rozwiązał problem

defaultConfig {
        multiDexEnabled true
}

Najłatwiejszy sposób na zaimplementowanie logowania google odwiedź: logowanie google w systemie Android

Spróbuj też

dexOptions {
        javaMaxHeapSize "4g" 
    }

Zachowaj ten sam numer wersji dla różnych usług.


0

Rozwiązałem ten problem dodając: W build.gradle:

defaultConfig {
    multiDexEnabled true
}

w local.properties,

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

wspomnij o zależności:

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

Oczyść i odbuduj.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.