Ошибка: не удалось выполнить задачу ':app:transformClassesWithDexForDebug'
Ошибка
Ошибка: не удалось выполнить задачу ':app:transformClassesWithDexForDebug'. com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: обработать "команду" /usr/lib/jvm/java-8-oracle/bin/java'' завершено с ненулевым значением выхода 1
Файл моего приложения:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId 'Hidden application ID'
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
disable 'InvalidPackage'
}
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
productFlavors {
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.facebook.android:facebook-android-sdk:4.7.0'
compile 'com.googlecode.libphonenumber:libphonenumber:7.2.1'
compile 'com.getbase:floatingactionbutton:1.10.1'
compile 'com.android.support:preference-v7:23.1.1'
}
Во время отладки, если я установил для minifyEnabled значение true, он компилируется. Однако тогда я не могу отладить свое приложение.
Я проверил другой вопрос: не удалось выполнить задачу ": app: transformClassesWithDexForDebug" при реализации входа в Google для Android, но есть только один ответ, и его реализация, к сожалению, не решает проблему.
AFAIK, ошибка вызвана из-за добавления слишком многих зависимостей Gradle, но я могу ошибаться (я действительно надеюсь ошибаться, потому что все эти пакеты действительно важны!).
Пожалуйста, помогите мне решить эту ошибку. Большое спасибо!
29 ответов
Просто исправьте зависимости сервисов Google play:
Вы включаете все игровые сервисы в свой проект. Добавляйте только те, которые вы хотите.
Например, если вы используете только карты и g+ вход, чем изменить
compile 'com.google.android.gms:play-services:8.1.0'
в
compile 'com.google.android.gms:play-services-maps:8.1.0'
compile 'com.google.android.gms:play-services-plus:8.1.0'
Из документа:
В версиях сервисов Google Play до 6.5 вам приходилось собирать весь пакет API в свое приложение. В некоторых случаях это усложняло поддержание количества методов в вашем приложении (включая API-интерфейсы платформы, библиотечные методы и ваш собственный код) в пределах 65 536.
Начиная с версии 6.5, вы можете выборочно скомпилировать API-интерфейсы службы Google Play в свое приложение. Например, чтобы включить только API Google Fit и Android Wear, замените следующую строку в файле build.gradle:
скомпилируйте com.google.android.gms:play-services: 8.3.0
с этими строками:составить com.google.android.gms:play-services-fitness:8.3.0'
скомпилируйте 'com.google.android.gms:play-services-wearable:8.3.0'
Пытаться
dexOptions {
javaMaxHeapSize "4g"
preDexLibraries = false
}
Я не знаю причину. Кое-что о preDexLibraries
: https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/tips
Согласно @lgdroid57:
Следующий ресурс должен помочь объяснить, что делает этот код: ссылка ( http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.DexOptions.html) Property | Описание javaMaxHeapSize | Устанавливает значение -JXmx* при вызове dx. Формат должен соответствовать шаблону 1024M. preDexLibraries | Будь то pre-dex библиотеки. Это может улучшить добавочные сборки, но чистые сборки могут быть медленнее.
Попробуйте добавить multiDexEnabled true
в ваше приложение build.gradle
файл.
defaultConfig {
multiDexEnabled true
}
Это проблема с Multidex . Вы можете попытаться удалить банку, или вы можете попробовать вот так: http://developer.android.com/tools/building/multidex.html в приложении build.gradle:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
В вашем манифесте:
<?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>
Добавлять multiDexEnabled true
в default config file
из build.gradle
как это
defaultConfig {
multiDexEnabled true
}
Решение, которое работало для меня лично, было:
в build.gradle
defaultConfig {
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
Мой ответ немного устарел, но для меня единственным решением было добавить опцию multiDexEnabled в defaultConfig следующим образом:
android{
...
defaultConfig{
...
multiDexEnabled true
}
}
Если это не работает, попробуйте добавить этот фрагмент кода:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
}
}
}
Моя ошибка была связана с проблемой с разными версиями библиотек, и это помогло.
Я надеюсь, что это может кому-то помочь:)
Убедитесь, что вы не используете две версии сервиса Google.
Например, имея:
compile 'com.google.firebase:firebase-messaging:9.8.0'
а также
compile 'com.google.firebase:firebase-ads:10.0.0'
Используя ionic, я смог исправить эту ошибку с помощью команды: "cordova clean"
Просто удалите оба build
папка в /android
а также /android/app
и построить снова с react-native run-android
Путем изменения
скомпилируйте com.google.android.gms:play-services:8.1.0
только необходимые файлы, проблема может быть решена Эта проблема возникает из-за превышения файлов в файле build.gradle.
Войдите в Build ->
Чистый Проект ->
Запустить проект: выполнено
работает на андроид 5.1 для меня
У меня возникла эта проблема, когда я обновил плагин Gradle с версии 1.2.3 до 1.5.0, как предлагалось в Android Studio. На своей веб-странице1.5.0 является бета-версией.
Честно говоря, я не знаю, какие преимущества имеет версия 1.5.0, но я бы лучше подождал, пока не появится стабильная версия.
Конечно, возврат к 1.2.3 решил проблему.
Возможная помощь
Попробовал в качестве абсолютного крайнего средства после исчерпания всех других вариантов
Я удалил все карты памяти (RAM), кроме одной. У меня сейчас меньше памяти, но она снова работает. Я не могу притворяться, что знаю, почему процесс сборки всегда находил поврежденную память или это на 100% основная причина - в других отношениях система работала нормально. Может быть, это что-то попробовать, удачи.
Нет необходимости в мультитексе. Для "старого" проекта, открытого в Android Studio 2.1, менялась версия плагина gradle с 1.5.0 до 2.1.0, что решало проблему для меня.
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
По-видимому, я решил проблему, объединив все решения, добавив следующее в манифест Android:
<application
...
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
Следование модулю приложения build.gradle
android {
...
dexOptions {
javaMaxHeapSize "4g"
preDexLibraries = false
}
...
defaultConfig {
multiDexEnabled true
}
}
Я решил это! Это коллекция конфигурации и обновления. Добавьте эти переменные, где они вписываются в build.gradle
android {
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
dexOptions {
javaMaxHeapSize "4g"
}
defaultConfig {
multiDexEnabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
Затем обновите до Java 8 http://tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/
и все будет решено! Это из-за buildTools
Обновление и новая Android-студия. Ничто другое не подведет.
Зайдите в Build -> Очистите и снова запустите ваше приложение
Для меня закрытие всех остальных Android Studio решило проблему.
Я открыл 3 студии андроида, когда получал ошибку, после того, как закрыл 2, я не получил никакой ошибки.
Нет необходимости добавлять код, связанный с multiDex!
Не сходи с ума, я просто убираю, потом пересобираю проект и ошибка исчезла
- Выполнить: кордова плагин рм кордова-плагин-компат --force
- Выполнить: плагин cordova добавить cordova-plugin-compat@1.2
- Измените: config.xml в папке вашего проекта используйте "6.2.3", а не "^6.2.3", затем удалите папку платформы /android, повторно запустите cordova prepare android и cordova build android
У меня была эта проблема, когда я делегировал свою задачу компиляции в Google Compute Engine через SSH. Природа этой проблемы - ошибка памяти, о чем свидетельствует журнал сбоев; в частности, он генерируется, когда в Java заканчивается виртуальная память для работы во время сборки.
Важное замечание : Когда происходит сбой gradle из-за этой ошибки памяти, демоны gradle продолжают работать еще долго после сбоя задачи компиляции. Любая повторная попытка сборки с использованием gradle снова назначит нового демона gradle. Вы должны убедиться, что правильно утилизировали все аварийные экземпляры, используя gradlew --stop
,
hs_error_pid
Журналы сбоев указывают на следующие обходные пути:
# There is insufficient memory for the Java Runtime Environment to continue.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
Я обнаружил, что после увеличения ресурсов времени выполнения виртуальной машины эта проблема была решена.
В моем случае:-
- Что пошло не так: не удалось выполнить задачу ':app:multiDexListDebug'.
Ответ:-
Я только что удалил react-native-firebase
папка, которая будет внутри node_modules
папка, вот и все, что я могу успешно запустить приложение.
И еще кое-что не забудьте удалить react-native-firebase
но нет @react-native-firebase
в файле package.json. Так что в следующий раз, когда ты побежишьnpm I
или yarn
. Это не будет установлено в вашем приложении.
Этот пакет был причиной проблемы.
Переместите декларацию применения плагина внизу файла:
применить плагин: 'com.google.gms.google-services'
У меня была эта ошибка при запуске проекта Ionic на устройстве Android, и я решил ее, удалив и добавив платформу Android:
ionic cordova platform remove android
ionic cordova platform add android
У меня была похожая ошибка. Я исправил это, просто переключив каталог. Снова клонирую мой проект из моего репозитория git, импортирую его в android studio и собираю. Похоже, что один из каталогов / файлов, сгенерированных Android Studio при сборке вашего проекта, возможно, был поврежден. Удаление всех сгенерированных Android Studio файлов в вашем проекте или выполнение того, что я сделал, может решить проблему. Надеюсь это поможет.
Всем, кто сталкивался с этой проблемой / столкнется с ней в будущем:
Нажмите на меню Build -> выберите вариант сборки -> восстановить в "отладке"
Результат отладки в модуле:app /* debug { debuggable true }*/
Зайдите в меню Build -> создать подписанный apk -> .... -> построить его
Просто удалите
.gradle
папку с платформы Android, затем заново соберите проект, Android Studio сгенерирует его снова.
Если используется Java 8 или выше, то проблема в том, что используемые нами библиотеки несовместимы с Java 8. Поэтому, чтобы решить эту проблему, добавьте эти две строки в build.gradle вашего приложения и всех подмодулей, если таковые имеются. (Студия Android четко показывает, как это сделать, в сообщении об ошибке)
targetCompatibility = '1.7' sourceCompatibility = '1.7'