Ошибка построения приложения для Android

Я получаю странную ошибку, когда пытаюсь создать приложение. Я не думаю, что это связано с моим кодом, и мне нужна помощь в его решении. Когда я нажимаю run, logcat выдаёт мне эту ошибку:

Не удалось загрузить регистрацию статистики на сервер Cyanogen.

javax.net.ssl.SSLHandshakeException: Соединение закрыто одноранговым узлом на com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(нативный метод) на com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl) 8).android.okhttp.Connection.upgradeToTls(Connection.java:201) на com.android.okhttp.Connection.connect(Connection.java:155) на com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) по адресу com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) по адресу com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.hp.wava.java:38).internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) при com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217) в com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) в com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) по адресу com.android.settings.cmstats.StatsUploadJobService.uploadToCyanogen(StatsUploadJobService.java:223) по адресу com.android.settings.cmstats.StatsUploadJobSerava.Up43.SerjSJService.Uccess android.settings.cmstats. StatsUploadJobService.java:292) в java.util.concurrent.FutureTask.run(FutureTask.java:237) в android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) в java.util.concurrent.ThreadPounExecutor(ThreadPoolExecutor.java:1112) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)

Затем консоль Gradle говорит:

Неожиданное исключение верхнего уровня: com.android.dex.DexIndexOverflowException: идентификатор метода отсутствует в [0, 0xffff]: 65536 в com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484) в com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261) в com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473) в com.android.dx.merge.DexMerger.mergeDexes(Java:161) на com.android.dx.merge.DexMerger.merge(DexMerger.java:188) на com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504) на com.android.dx.command.dexer.Main.runMonoDex(Main.java:334) на com.android.dx.command.dexer.Main.run(Main.java:277) на com.android.dx.command.dexer.Main.main(Main.java:245) на com.android.dx.command.Main.main(Main.java:106)

Мне интересно, связано ли это с аппаратным обеспечением моего телефона или с запущенным на нем программным обеспечением cyanogenmod, которое вызывает ошибку.

Спасибо вам за помощь.

2 ответа

Вы достигли предела метода DEX 64k.

Есть несколько решений, которые помогут вам решить эту проблему:

  • удалить неиспользуемые зависимости gradle
  • замените библиотеки огромным количеством методов меньшими, например:

    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    

    ->

    compile 'com.google.android.gms:play-services-base:8.4.0'
    compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
    ...
    
  • удалить неиспользуемый код, настроив ProGuard

  • включить Multidex:

    build.gradle

    android {
        ...
    
        defaultConfig {
            ...
            // Enabling multidex support.
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
        compile 'com.android.support:multidex:1.0.0'
    }
    

    AndroidManifest.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>
    

Ссылка:

Создание приложений с использованием более 65 000 методов.

Эта линия com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 утверждает, что вы превысили ограничение в 64 КБ, установленное компилятором для каждого файла.dex. Читайте об этом. Решения включают использование Multidex или больше решений здесь https://www.contentful.com/blog/2014/10/30/android-and-the-dex-64k-methods-limit/. Это может быть дубликат других вопросов. Посмотрите, как решить проблему с ограничением компилятора Dalvik для методов 64K?

Другие вопросы по тегам