com.android.build.transform.api.TransformException


158

ฉันกำลังพยายามรวมการลงชื่อเข้าใช้ของ Google ในแอปของฉันฉันเพิ่มห้องสมุดเหล่านี้:

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

เพิ่มสิ่งนี้ลงในโครงการ build gradle ด้วย:

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

เพิ่มปลั๊กอินให้กับแอป build gradle ด้วย:

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

จากนั้นเพิ่มสิทธิ์ที่จำเป็น แต่เมื่อฉันพยายามเรียกใช้แอปของฉันได้รับข้อผิดพลาดนี้:

    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

คำตอบ:


312

ลองเพิ่มmultiDexEnabled trueลงในไฟล์build.gradleของแอปของคุณ

 defaultConfig {
    multiDexEnabled true
}

แก้ไข:

ลองคำตอบของสตีฟก่อน ในกรณีที่เกิดขึ้นบ่อยครั้งหรือขั้นตอนแรกก็ไม่ได้multiDexEnabledช่วยอะไรเลย สำหรับผู้ที่รักที่จะขุดลึกลงไปที่นี่เป็นปัญหาที่คล้ายกันสอง (มีคำตอบเพิ่มเติม)

: app: dexDebug ExecException เสร็จสิ้นด้วยค่าทางออกที่ไม่ใช่ศูนย์ 2

ข้อผิดพลาด: การดำเนินการล้มเหลวสำหรับงาน ': แอป: dexDebug' com.android.ide.common.process.ProcessException


3
ไม่ได้ผลสำหรับฉัน คำตอบของสตีฟ - การทำความสะอาดทำเคล็ดลับ ฉันเพิ่งอัพเกรดเป็น AS1.5 Preview
Scott

6
เพื่อความเป็นธรรมคุณควรตรวจสอบว่าปัญหาสามารถแก้ไขได้ด้วยการทำความสะอาดหรือไม่ ฉันเชื่อว่านี่จะช่วยให้ผู้ที่ทำความสะอาดไม่ได้ทำเคล็ดลับ
JuliusScript

ทั้งสองคนนี้ไม่ได้ความช่วยเหลือสำหรับฉัน - แต่รีสตาร์ท AS ที่สุดได้เคล็ดลับ :)
Maciej Boguta

สิ่งเหล่านี้ไม่ได้ช่วยฉัน แต่มันก็เริ่มทำงานหลังจากที่ฉันรีสตาร์ท AS
Maciej Boguta

1
ฉันก็จะแนะนำให้ตรวจสอบคำตอบของ A Grandt ด้านล่าง ( stackoverflow.com/a/33690032/1617737 ) ก่อนที่คุณจะกระโดดเข้าหาด้วยโซลูชันนี้
บ้านจีโอเอ็นจิเนียริ่ง

146

อีกสิ่งที่ต้องระวังคือคุณไม่ได้ใช้

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

นั่นจะนำเข้าบริการการเล่นทั้งหมดและใช้เวลามากกว่าโลกสวัสดีเพียงเล็กน้อยเพื่อให้เกินขีด จำกัด วิธีการ 65535 ของ dex APK เดียว

ระบุเฉพาะบริการที่คุณต้องการเสมอเช่น:

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
คุณดีที่สุด! นี่เป็นการแก้ไขปัญหาของฉัน การสร้างใหม่ไม่ได้ช่วยในกรณีของฉันตามที่กล่าวไว้ในหลายวิธี ดังที่คุณกล่าวถึงห้องสมุด Google Play Services มีส่วนประกอบย่อยมากมายและพวกเขาควรจะนำเข้าเช่นเดียวกับที่คุณพูด - หนึ่งต่อหนึ่ง ขอบคุณมากอีกครั้ง!
Ivan Caravanio

2
ฉันมีปัญหานี้ในสองสามวันที่ผ่านมา ฉันคิดว่าฉันเลือกสิ่งที่ฉันต้องการเท่านั้น แต่ต่ำและดูหลังจากชั่วโมงของการดูฉันถูกนำเข้าทั้งหมด play-services เมื่อทั้งหมดที่ฉันต้องการคือ play-services-ads ตรวจสอบคนที่ไล่ระดับของคุณอย่างแน่นอน!
MCLLC

@ A.Grandt คุณสามารถเพิ่มลิงค์ที่ Ivan ให้ไว้ในคำตอบของคุณได้หรือไม่? มันมีรายการชื่อของคอมโพเนนต์ย่อยทั้งหมดและควรเป็นส่วนหนึ่งของคำตอบเพราะเป็นขั้นตอนต่อไปที่ทุกคนต้องทำ
Murmel

137

ฉันต้องทำความสะอาดโปรเจคของฉันและจากนั้นก็จะสร้างสำเร็จในภายหลัง


4
ขอบคุณ! มันใช้งานได้อย่างไม่มีที่ติ! คำตอบที่ได้รับการยอมรับจะแปลกเพราะโครงการของฉันอยู่ไกลจากการ จำกัด วิธี 65K (ซึ่งจะต้องใช้ multidex)
Louis CAD

4
ใช่การทำความสะอาดเป็นวิธีที่จะไป AS 1.4
Felipe Caldas

หากคุณมีโมดูลไลบรารีให้ล้างโมดูลทั้งหมดในโครงการเพื่อให้มันทำงานได้ การทำความสะอาดโมดูลแต่ละตัวไม่ทำงานสำหรับฉัน ทำความสะอาดโครงการทั้งหมด
Akh

มีคนบอกฉันว่าฉันจะทำความสะอาดโครงการได้อย่างไร ฉันได้ลองใช้ "ชุดค่าผสม" มากมายและไม่มีอะไรทำงาน ฉันเห็นทุกคนพูดว่า "สะอาด" แต่ไม่รู้ว่าจะทำอย่างไร ขอบคุณ.
Alberto Rubio

@AlbertoRubio ภายใต้ Build> Clean Project ในแถบเครื่องมือ AS
Chantell Osejo

23

ข้อผิดพลาดนี้เริ่มปรากฏขึ้นสำหรับฉันเมื่อฉันเพิ่มวิธีการใหม่บางอย่างในโครงการของฉัน ฉันรู้ว่าฉันไม่มีวิธีใดที่ใกล้ถึงขีด จำกัด 65k และไม่ต้องการเปิดใช้งานการสนับสนุน multiDex สำหรับโครงการของฉันหากฉันสามารถช่วยได้

ฉันแก้ไขมันโดยการเพิ่มหน่วยความจำที่มีให้กับ:app:transformClassesForDexForDebugงาน ฉันไม่นี้โดยระบุjavaMaxHeapSizegradle.buildใน

gradle.build

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

ฉันลองทำสิ่งนี้หลังจากที่ไม่ประสบความสำเร็จกับวิธีแก้ไขปัญหาทั่วไปอื่น ๆ :

  • ใช้งานโครงการ clean
  • การลบ/app/buildและ/buildไดเรกทอรีจากโครงการของฉันด้วยตนเอง
  • Invalidating Gradle Cache และรีสตาร์ท Android Studio

ความผิดพลาด

ข้อผิดพลาด: การดำเนินการล้มเหลวสำหรับงาน> ': แอป: transformClassesWithDexForDebug' com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: กระบวนการ 'คำสั่ง' / ห้องสมุด / Java/JavaVirtualMachines/jdk1.8.0_45 jdk / Contents / Home / bin / java '' เสร็จสิ้นด้วยค่าการออกที่ไม่เป็นศูนย์ 1

หมายเหตุ: การเพิ่มหน่วยความจำที่สามารถใช้ได้กับงาน DEX อาจทำให้เกิดปัญหาประสิทธิภาพการทำงานบนระบบที่มีหน่วยความจำลดลง - การเชื่อมโยง


สิ่งนี้ได้ผลสำหรับฉันเพียงระบุขนาดฮีปสูงสุดจะช่วยแก้ปัญหาขอขอบคุณ Maurice
Zeyad Assem

8

ฉันยังประสบปัญหาที่คล้ายกันใน Android Studio 1.5.1 และ gradle 1.5.0 ฉันต้องลบไลบรารีที่ไม่ต้องการออกจากการขึ้นต่อกันซึ่งอาจเพิ่มโดยอัตโนมัติในไฟล์ build.gradle ของแอปของฉัน หนึ่งในนั้นคือ: คอมไพล์ 'com.google.android.gms: play-services: 8.4.0' ดังนั้นสำหรับแนวทางปฏิบัติที่ดีที่สุดพยายามที่จะรวมเฉพาะไลบรารีบริการการเล่นเฉพาะเช่นสำหรับโฆษณาเท่านั้น

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

แม้ว่า

defaultConfig {
    multiDexEnabled true
}

สิ่งนี้จะช่วยแก้ปัญหาด้วย แต่มี Notes จำนวนมากในคอนโซลการไล่ระดับสีทำให้สับสนในการค้นหาปัญหาจริงอื่น ๆ ในระหว่างการสร้าง


การ จำกัด การใช้ google api ของฉันให้เป็นเพียงแค่ play-services-maps ไม่ได้หลอกลวง นี่คือการแยกส่วนประกอบอย่างเป็นทางการของ Google ใน API บริการ Play: developers.google.com/android/guides/…
jperl

4

คุณสามารถดูเอกสารของAndroid

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

ฉันใช้ AS 1.5.1 และพบปัญหาเดียวกัน แต่แค่ทำความสะอาดโปรเจ็กต์ที่เคยทำมาฉันเลยลองทำอะไรซักอย่าง

  • ทำความสะอาดโครงการ
  • รีสตาร์ท AS
  • ซิงค์โครงการ

สิ่งนี้ใช้ได้กับฉันดังนั้นฉันหวังว่าสิ่งนี้จะช่วยได้


3
นี่จะไม่มีประโยชน์สำหรับโครงการที่เกินขีด จำกัด วิธีการ 64k Dex
IgorGanapolsky


2

ในกรณีของฉันมีข้อยกเว้นเกิดขึ้นเนื่องจากส่วนขยายบริการ Google Play ทั้งหมดไม่ได้มีรุ่นเดียวกันดังนี้

 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'

มันทำงานได้เมื่อฉันเปลี่ยนสิ่งนี้เป็น

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
ฉันไม่ได้ดูคำตอบทั้งหมดและฉันไม่เห็นของคุณดังนั้น ... ฉันค้นพบว่านี่เป็นกรณีของฉันประมาณหนึ่งชั่วโมงต่อมา: /
denispyr

2

ฉันแก้ไขมันด้วยสิ่งต่อไปนี้:

ฉันกำหนดค่า multidex

ใน build.gradle คุณต้องเพิ่มอันถัดไป

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'
...
}

เพิ่มรายการถัดไปใน local.properties

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

หลังจากนั้นในคลาสแอปพลิเคชันคุณต้องเพิ่ม 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);
   }
}

อย่าลืมเพิ่มรหัสบรรทัดลงใน Manifest.xml

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

เพียงเท่านี้ก็เพียงพอแล้วสำหรับการแก้ไขข้อบกพร่อง: การดำเนินการล้มเหลวสำหรับงาน ': แอป: transformClassesWithDexForDebug ตรวจสอบอย่างดีใน build.gradle ด้วย javaMaxHeapSize "2g" และ local.properties org.gradle.jvmargs = -Xmx2048m มีขนาด 2 กิกะไบต์


2
กรุณาโพสต์เป็นภาษาอังกฤษเท่านั้น ดูเหมือนว่าคำตอบที่ดีมันน่าละอายที่จะลบเพราะไม่ใช่ภาษาอังกฤษ
Tunaki

1

ฉันมีปัญหาเดียวกันเมื่อฉันย้อนกลับไปเป็นเวอร์ชั่นเก่าผ่าน git และเวอร์ชันนั้นมีไลบรารี. jar ก่อนหน้านี้ของ api ของบุคคลที่สามหนึ่งและด้วยเหตุผลบางอย่างกลับกลายเป็นว่าขวดทั้งสองของ sdk เดียวกันรุ่นต่าง ๆ อยู่ในโฟลเดอร์ / libs .


1

ขั้นแรกให้ลบไฟล์ intermediates APP ของคุณ FOLDER \ app \ build \ ตัวกลางหรือทำความสะอาดโครงการของคุณแล้วสร้างใหม่

เพิ่มแล้ว

multiDexEnabled true

กล่าวคือ

defaultConfig {
        multiDexEnabled true
}

มันใช้งานได้สำหรับฉัน


1

ฉันแก้ไขปัญหานี้โดยเปลี่ยนเป็นใช้ล่าสุด buildToolsVersion

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

1

คำตอบที่เป็นประโยชน์หากสิ่งข้างต้นไม่ได้ผลสำหรับคุณ

ไปที่ไฟล์ gradle แอปของคุณ

ตรวจสอบว่าเวอร์ชันการพึ่งพาทั้งหมดถูกกล่าวถึงด้วยรหัสเวอร์ชันที่เหมาะสมแทนที่จะเป็นค่าที่สัมพันธ์กันเช่น (com.example.demo: +)

ก่อนหน้า - การนำไปใช้ 'com.google.api-client: google-api-client-android: +'

หลังจาก - การใช้งาน 'com.google.api-client: google-api-client-android: 1.30.0'


0

หากคุณกำลังใช้เวอร์ชัน gradle ล่าสุด classpath 'com.android.tools.build:gradle:1.5.0' and classpath 'com.google.gms:google-services:1.4.0-beta3'ให้ลองอัปเดตพื้นที่เก็บข้อมูลการสนับสนุนล่าสุดจากตัวจัดการ SDK และสร้างโครงการใหม่ทั้งหมด


0

หากคุณต้องการเพิ่มการอ้างอิงนี้สำหรับปลั๊กอิน Cordova เพิ่มบรรทัดถัดไปในไฟล์ plugin.xml ของคุณ

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

0

หากการพึ่งพาที่แตกต่างกันมีโถเดียวกันก็ทำให้เกิดข้อผิดพลาดในการสร้างนี้

ตัวอย่างเช่น:

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

หาก "library1" และ "library2" มี jar ชื่อเดียวกันxxx.jarสิ่งนี้จะทำให้เกิดข้อผิดพลาดดังกล่าว


0

มันเกิดขึ้นกับฉันเพราะการรั่วไหลของหน่วยความจำของ Eclipse ฉันต้องรีสตาร์ทคอมพิวเตอร์


0

ฉันเปลี่ยน pngs สองสามตัวและหมายเลขบิลด์ใน gradle และตอนนี้ฉันได้รับสิ่งนี้ ไม่มีการทำความสะอาดและการรีสตาร์ทจำนวนมากช่วย การปิดใช้งานการเรียกใช้ทันทีแก้ไขให้ฉันแล้ว YMMV


0

ฉันมีตัวเลือกเดียวกันและทันทีที่ฉันปิดการทำงานแบบทันทีมันทำงานได้ดีบนอุปกรณ์ API16 ของฉัน แต่บนอุปกรณ์ API24 มันทำงานได้ดีกับการทำงานแบบทันที

หวังว่านี่จะช่วยให้คนที่มีปัญหาเดียวกัน


0

เพียงไปที่บิลด์ - แก้ไขประเภทบิลด์ - แท็บคุณสมบัติ - รุ่นบิลด์ประเภทและลดระดับเป็น ver 23.0.1 คลิกตกลง ใช้งานได้กับ android studio 1.5 มันใช้งานได้สำหรับฉัน


0

คำตอบในการเขียนอยู่ในgradleใส่ defaultConfig {multiDexEnabled true} แล้วชื่อแอปพลิเคชันในรายการ Android: ชื่อ = "android.support.multidex.MultiDexApplication" หวังว่าคำตอบนี้จะเลวร้ายสำหรับบางคน


0

รหัสนี้แก้ไขปัญหาได้

defaultConfig {
        multiDexEnabled true
}

สำหรับวิธีที่ง่ายที่สุดในการใช้การลงชื่อเข้าใช้google : google sign ใน android

ลองดูสิ

dexOptions {
        javaMaxHeapSize "4g" 
    }

เก็บหมายเลขเวอร์ชันเดียวกันไว้สำหรับบริการต่างๆ


0

ฉันแก้ไขปัญหานี้โดยการเพิ่ม: ในbuild.gradle:

defaultConfig {
    multiDexEnabled true
}

ในlocal.properties,

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

พูดถึงการพึ่งพา:

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

ทำความสะอาดและสร้างใหม่


0

กรณีที่เปิดใช้งาน 'เรียกใช้ทันที' จากนั้นเพียงปิดการใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.