Число ссылок на методы в файле. dex не может превышать 64k API 17



Я создаю приложение с библиотекой 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

589   11  

11 ответов:

у вас слишком много методов. Там может быть только 65536 методы для dex.

как было предложено, вы можете использовать поддержка multidex.

просто добавьте эти строки в build.gradle:

android {

    defaultConfig {
        ...

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

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

в своем Manifest добавить MultiDexApplication класс из библиотеки поддержки multidex в элемент приложения

    <?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">
<!--If you are using your own custom Application class then extend -->
<!--MultiDexApplication and change above line as-->
            android:name=".YourCustomApplicationClass">

            ...
        </application>
    </manifest>

переопределить метод attachBaseContext

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

если вы используете свой собственный Application класс, измените родительский класс с Application до MultiDexApplication.

другое решение-попытаться удалить неиспользуемый код с помощью должны быть настройки должны быть настройки для вашего приложения для запуска ProGuard и убедитесь, что вы включили сжатие для сборок выпуска.

android {

compileSdkVersion 23

 buildToolsVersion '23.0.0'

    defaultConfig {
        applicationId "com.dkm.example"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

поместите это в свой defaultConfig:

multiDexEnabled true 

его работа для меня

я получил это сообщение об ошибке, потому что при кодировании моего проекта auto update compile version в моем build.gradle file:

android {
    ...
    buildToolsVersion "23.0.2"
    ...
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0' }

решите ее, исправив версию:

android {
        ...
        buildToolsVersion "23.0.2"
        ...
    }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
}

Это то, что сработало для меня:

это происходит, потому что есть слишком много неиспользуемых методов. Большинство из этих методов поступают из включенных библиотек в сборку.gradle

используйте ресурсы minify и shrink, чтобы исправить это с помощью gradle и одновременно очистить ваш код.

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            shrinkResources true
        }
    }

эта ошибка также может возникнуть при загрузке всех API служб google play, когда вы используете только afew.

из версии 6.5, вы можете вместо этого выборочно скомпилируйте API сервиса Google Play в свое приложение."

например, когда ваше приложение нуждается в play-services-maps, play-services-location .Вам нужно добавить только два API в сборку.gradle файл на уровне приложения, как показано ниже:

compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'

вместо:

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

для получения полной документации и списка API сервисов google play нажмите здесь

я столкнулся с той же проблемой и для поддержки multidex, вы должны иметь в виду minSdkVersion приложения. Если вы используете minSdkVersion 21 или выше, то просто напишите multiDexEnabled true такой

defaultConfig {
    applicationId *******************
    minSdkVersion 21
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

это работает для меня, и если вы используете minSdkVersion ниже 21 (ниже lolipop), то вы должны сделать две дополнительные простые вещи

1. первый добавьте эту зависимость

compile ' com.андроид.поддержка:multidex:1.0.1'

в свою сборку.градля.

2. последний и второй добавить один это ниже строки для вашего приложения в манифесте

android: name= " android.поддержка.мультидекс.MultiDexApplication"

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name="android.support.multidex.MultiDexApplication"
    android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Бинго, то он будет работать и в нижней версии..:) Счастливого кодирования

для меня обновление Gradle работает.Ищите обновления на Сайт Android затем добавьте его в свою сборку.gradle (проект) вот так

 dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-alpha4'   
          ....
    }

затем синхронизировать проект с gradle file plus это может произойти иногда из-за java.exe (в моем случае) просто заставить убить java.exe из Диспетчера задач в windows, а затем повторно запустить программу

можно также попробовать это:

android{
    .
    .
    // to avoid DexIndexOverflowException
    dexOptions {
       jumboMode true
    }
}

надеюсь, что это поможет кому-то. Спасибо

поддержка Multidex до Android 5.0

версии платформы до Android 5.0 (уровень API 21) используют Далвик среда выполнения для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним классом.dex байт-код файла на APK. Чтобы обойти это ограничение, пожалуйста, прочитайте настройка приложения для multidex

поддержка Multidex для Android 5.0 и выше

Android 5.0 (API уровень 21) и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов DEX из файлов APK. ART выполняет предварительную компиляцию во время установки приложения, которое сканирует для classesN.Декс файлы и компилирует их в один .oat файл для выполнения на Android устройстве. Поэтому, если ваш minSdkVersion 21 или выше, вам не нужна библиотека поддержки multidex. Все, что вам нужно сделать, это установить multiDexEnabled до true в вашей сборка на уровне модуля.gradle

подробнее здесь https://developer.android.com/studio/build/multidex

вы можете включить "мгновенный запуск" на Android Studio, чтобы получить поддержку multidex.

сделайте это, он работает:

defaultConfig {
    applicationId "com.example.maps"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

Comments

    Ничего не найдено.