Я создаю приложение с помощью библиотеки SugarORM, но когда я пытаюсь построить проект для API 17 (не проверял другие), он показывает ошибку сборки.
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> 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_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
Но когда я строю этот проект для Android v5.0 или выше, он работает нормально. Если я удаляю зависимость от SugarORM gradle, она отлично работает на обоих устройствах v4.2.2 и v5.0.
android
gradle
android-gradle-plugin
android-multidex
sugarorm
Сандип Сингх Рана
источник
источник
One or more of the answers is exemplary and worthy of an additional bounty.Just to the point and accurate answer.
Я предлагаю лучший (и принятый) ответ!Ответы:
У тебя слишком много методов. Для dex может быть только 65536 методов .
Как и предполагалось, вы можете использовать поддержку multidex .
Просто добавьте эти строки в
module/build.gradle
:Также
Manifest
добавьтеMultiDexApplication
класс из библиотеки поддержки multidex в элемент приложения.Если вы используете свой собственный
Application
класс, измените родительский класс сApplication
наMultiDexApplication
.Если вы не можете сделать это, в вашем классе приложения переопределите
attachBaseContext
метод с помощью:Другое решение состоит в том, чтобы попытаться удалить неиспользуемый код с помощью ProGuard. Настройте параметры ProGuard для своего приложения для запуска ProGuard и убедитесь, что у вас включено сжатие для сборок выпуска.
источник
В андроиде / app / build.gradle
Поместите это в ваш defaultConfig:
источник
Я получил это сообщение об ошибке, потому что при кодировании версии моего проекта с автоматическим обновлением проекта в моем
build.gradle
файле:Решите это, исправив версию:
источник
Вот что сработало для меня:
Это происходит потому, что слишком много неиспользуемых методов. Большинство этих методов приходят из включенных библиотек в ваш build.gradle
Используйте минимизацию и сжатие ресурсов, чтобы исправить это с помощью gradle и одновременно очистить свой код.
источник
Измените уровень приложения build.gradle:
это сработало для меня.
источник
multiDexEnabled
параметр, без зависимостей или изменений файла манифестаЭта ошибка также может возникать при загрузке всех API-интерфейсов Google Play, когда вы используете только afew.
Как утверждает google: «В версиях сервисов Google Play до 6.5 вам приходилось собирать весь пакет API в ваше приложение. В некоторых случаях это усложняло сохранение количества методов в вашем приложении (включая рамки API, библиотечные методы и ваш собственный код) в пределах 65 536.
Начиная с версии 6.5 вы можете выборочно скомпилировать API-интерфейсы службы Google Play в свое приложение. "
Например, когда вашему приложению нужны play-services-maps, play-services-location. Вам нужно добавить только два apis в файл build.gradle на уровне приложения, как показано ниже:
Вместо того:
Для получения полной документации и списка сервисов Google Play API нажмите здесь
источник
Когда ссылки на приложения превышают 65 536 методов, вы сталкиваетесь с ошибкой сборки, которая указывает на то, что ваше приложение достигло предела архитектуры сборки Android
Поддержка Multidex до Android 5.0
Версии платформы до Android 5.0 (уровень API 21) используют среду выполнения Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним файлом байт-кода classes.dex для каждого APK. Чтобы обойти это ограничение, вы можете добавить библиотеку поддержки multidex в ваш проект:
Поддержка Multidex для Android 5.0 и выше
Android 5.0 (уровень API 21) и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов DEX из файлов APK. Поэтому, если ваш minSdkVersion 21 или выше, вам не нужна библиотека поддержки multidex .
Избегайте ограничения в 64К
Настроить мультидекс в приложении для
Если ваш minSdkVersion установлен на 21 или выше, все, что вам нужно сделать, это установить для multiDexEnabled значение true в файле build.gradle уровня модуля.
если ваш minSdkVersion установлен на 20 или ниже, вы должны использовать библиотеку поддержки multidex
Переопределите класс Application, измените его для расширения MultiDexApplication (если это возможно) следующим образом:
добавить в файл манифеста
источник
Я столкнулся с той же проблемой, и для поддержки multidex вы должны помнить о minSdkVersion вашего приложения. Если вы используете minSdkVersion 21 или выше, просто напишите multiDexEnabled true, как это
Это работает для меня, и если вы используете minSdkVersion ниже 21 (ниже lolipop ), то вам нужно сделать две простые вещи
1. Сначала добавьте эту зависимость
в вашей сборке.
2. Последнее и второе добавьте одну нижеприведенную строку к вашему заявлению в манифесте.
Бинго, тогда он будет работать и в нижней версии .. :) Счастливого кодирования
источник
Просто дополнительный комментарий, прежде чем добавлять поддержку multidex - убедитесь, что вы не добавляете ненужные зависимости.
Например, в официальном руководстве аналитики Facebook
В них четко указано, что вы должны добавить следующую зависимость:
на самом деле это весь FacebookSDK - поэтому, если вам нужна, например, только аналитика, вам нужно заменить ее на:
Частичные опции SDK для Facebook
источник
facebook-core
иfacebook-login
и ошибка ушла.Для меня работает обновление Gradle. Найдите обновление на веб-сайте Android, затем добавьте его в свой build.gradle (проект) следующим образом
затем синхронизировать проект с файлом Gradle, плюс иногда это может произойти из-за java.exe (в моем случае), просто принудительно убить java.exe из диспетчера задач в Windows, затем повторно запустить программу
источник
Можно также попробовать это:
Надеюсь, это кому-нибудь поможет. Спасибо
источник
**
Для разработчиков игр Unity
**
Если кто-то пришел сюда, потому что эта ошибка обнаружилась в их проекте Unity, перейдите в Файл-> Настройки сборки -> Настройки плеера -> Плеер. перейдите в «Параметры публикации» и на вкладке «Сборка» включите «Пользовательский шаблон запуска». путь будет показан под этим текстом. перейдите по пути и добавьте multiDexEnabled true следующим образом:
источник
Вы можете включить «Instant Run» в Android Studio, чтобы получить поддержку мультидекса.
источник
Сделайте это, это работает:
источник