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'

Також додайте це до gradle проекту build:

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

Також додайте плагін у ступінь складання додатків:

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

Помилка: Не вдалося виконати завдання ": app: dexDebug". com.android.ide.common.process.ProcessException


3
Не працювали для мене. Відповідь Стіва - Чистка зробила трюк. Щойно я перейшов до попереднього перегляду AS1.5
Скотт,

6
Щоб бути справедливим, ви завжди повинні перевірити, чи можна вирішити проблему очищенням. Я переконаний, що це допоможе тим, кому прибирання не зробило хитрощів.
JuliusScript

обидва вони не допомогли мені, але перезапуск AS нарешті зробив трюк :)
Maciej Boguta

не з них мені допомогли, але воно почало працювати після того, як я перезапустив AS
Maciej Boguta

1
Я б також радив перевірити відповідь Гранта нижче ( 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 є багато підкомпонентів, і їх слід імпортувати так само, як ви вже говорили - по черзі. Велике спасибі, ще раз!
Іван Караваньо

2
У мене виникло це питання за останні пару днів. Я думав, що вибрав лише те, що мені потрібно. Але, низько і ось, після годин перегляду я імпортував усі Play-сервіси, коли все, що я хотів, - це play-services-ads. Однозначно перевіряйте своїх залежностей від граду!
MCLLC

@ A.Grandt Ви могли б додати посилання, яке Іван дав у своїй відповіді? Він містить перелік імен усіх підкомпонентів, і він повинен бути частиною відповіді, оскільки це наступний крок, який кожен повинен зробити.
Мурмель

137

Мені просто довелося очистити свій проект, а потім він успішно збудувався згодом.


4
Дякую! Це працює бездоганно! Прийнята відповідь була б дивною, оскільки мій проект далеко не досягає межі методу 65K (що потребує мультидекса).
Луї CAD

4
Так, прибирання було шляхом. AS 1.4
Феліпе Кальдас

Якщо у вас є модулі бібліотеки, тоді очистіть усі модулі проекту, щоб він працював. Очищення лише окремих модулів для мене не працювало. Очистіть цілий проект.
Ах

Хтось може сказати мені, як я очищую проект? Я намагався багато "комбінацій" і нічого не виходить. Я бачу, що всі кажуть "чисто", але не знаю як. Дякую.
Альберто Рубіо

@AlbertoRubio, в розділі Build> Clean Project на панелі інструментів AS.
Chantell Osejo

23

Ця помилка почала з’являтися для мене, коли я додав нові проекти до свого проекту. Я знав, що мені ніде не до межі методу 65k, і не хотів увімкнути підтримку multiDex для мого проекту, якщо я міг би допомогти йому.

Я вирішив це, збільшивши доступну для :app:transformClassesForDexForDebugзавдання пам’ять . Я зробив це, вказавши javaMaxHeapSize в gradle.build.

gradle.build

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

Я спробував це, не маючи успіху з іншими поширеними рішеннями цієї проблеми:

  • Запуск проекту clean
  • Видалення каталогів /app/buildта /buildкаталогів з мого проекту вручну
  • Недійсний кеш Gradle та перезапуск Android Studio

Помилка

Помилка: Не вдалося виконати завдання> ': app: transformClassesWithDexForDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Процес 'команд' /Library/Java/JavaVirtualMachines/jdk1.8.0_45. jdk / Зміст / Головна / bin / java '' завершено з нульовим значенням виходу 1

Примітка: збільшення пам'яті доступної для завдання DEX може привести до зниження продуктивності в системах з більш низькою пам'яттю - зв'язок .


Це працювало для мене, лише щоб вказати максимальний розмір купи вирішить проблему, дякую Моріс
Зеяд Ассем

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
}

це також вирішить проблему, але надає багато приміток на консолі gradle, що робить заплутаним пошук інших реальних проблем під час збирання


Звуження мого використання api google для просто-гральних служб-карт зробило свою справу. Ось офіційна розбивка Google на різні компоненти API для служб ігрових служб: 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.
ІгорГанапольський


2

У моєму випадку виняток стався тому, що всі розширення служби Google 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

Я вирішив це з наступним:

Я налаштував мультидекс

У 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

Після цього до класу Application потрібно також додати 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"
    ...
/>

Ось цього з цим було достатньо для вирішення помилки: Виконання не вдалося виконати для завдання ': app: transformClassesWithDexForDebug. Перевірте дуже добре в build.gradle з javaMaxHeapSize "2g" та local.properties org.gradle.jvmargs = -Xmx2048m - 2 гігабайти.


2
Будь ласка, публікуйте лише англійською мовою. Це виглядає як гарна відповідь, було б соромно його видалити, оскільки це не англійською мовою.
Тунакі

1

У мене була така ж проблема, коли я повернувся до старої версії через git, і в цій версії була попередня .jar бібліотека однієї сторони api, і чомусь виявилось, що обидві банки одного і того ж sdk, просто різні версії були в папці / libs .


1

Спочатку Видаліть проміжні файли ВАШИЙ ПОРОЖНИК ДОПОМОГИ \ app \ build \ intermediates АБО Очистіть проект, а потім відновіть його.

Thent add

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" мають однакову банку, названу таким чином xxx.jar, це призведе до такої помилки.



0

Я змінив пару png і номер складання в gradle, і тепер я отримую це. Жодна кількість очищення та перезавантаження не допомогла. Відключення миттєвого запуску виправило це для мене. YMMV


0

У мене був такий самий варіант, і як тільки я вимкнув миттєвий запуск, він працював чудово на моєму пристрої API16, але на пристрої API24 він добре працював з миттєвим запуском.

Сподіваюся, це допоможе комусь із тим самим питанням


0

Просто перейдіть до збірки - редагування типів збірки - вкладка "Властивості" - версія типу збірки та поверніть її до версії 23.0.1. Натисніть ОК. Це працює для android studio 1.5. Це працювало для мене.


0

відповідь написати в gradle поставити defaultConfig {multiDexEnabled true}, тоді ім'я програми в маніфесті android: name = "android.support.multidex.MultiDexApplication" бажаю, щоб ця відповідь була певною для когось


0

цей код вирішив проблему

defaultConfig {
        multiDexEnabled true
}

Найпростіший спосіб реалізувати вхід у google : відвідайте google 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'

Очистіть і відновіть.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.