-1

I am getting a weird error when I am trying to build a app. I don't think it's related to my code and need some help in resolving it. When I press run, the logcat giving me this error:

Could not upload stats checkin to cyanogen server

javax.net.ssl.SSLHandshakeException: Connection closed by peer at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318) at com.android.okhttp.Connection.upgradeToTls(Connection.java:201) at com.android.okhttp.Connection.connect(Connection.java:155) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217) at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) at com.android.settings.cmstats.StatsUploadJobService.uploadToCyanogen(StatsUploadJobService.java:223) at com.android.settings.cmstats.StatsUploadJobService.access$000(StatsUploadJobService.java:43) at com.android.settings.cmstats.StatsUploadJobService$StatsUploadTask.doInBackground(StatsUploadJobService.java:121) at com.android.settings.cmstats.StatsUploadJobService$StatsUploadTask.doInBackground(StatsUploadJobService.java:93) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)

The gradle console then says:

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:484) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:261) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:473) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:161) at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:277) at com.android.dx.command.dexer.Main.main(Main.java:245) at com.android.dx.command.Main.main(Main.java:106)

I am wondering if it to do with my phone's hardware or the cyanogenmod software running on it which causes the error.

Thank you for the help.

Ziem
  • 6,579
  • 8
  • 53
  • 86
Tom Finet
  • 487
  • 1
  • 7
  • 21
  • 1
    I suggest that you search around for `DexIndexOverflowException`. – Michael Feb 21 '16 at 18:36
  • Can you post your app level build.gradle file? – gautamprajapati Feb 21 '16 at 18:37
  • Check [this](http://stackoverflow.com/questions/15209831/unable-to-execute-dex-method-id-not-in-0-0xffff-65536) and [this](http://stackoverflow.com/questions/26515378/dexindexoverflowexception-issue-after-updating-to-latest-appcompat-and-support-l) – Qandeel Abbassi Feb 21 '16 at 19:02

2 Answers2

1

You hit the DEX 64k method limit.

There are few solutions which will help you to resolve this problem:

  • remove unused gradle dependencies
  • replace libaries with huge amount of methods with smaller ones, e.g.:

    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'
    ...
    
  • remove unused code by configuring the ProGuard

  • enable 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>
    

Reference:

Building Apps with Over 65K Methods.

Ziem
  • 6,579
  • 8
  • 53
  • 86
0

This line com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 states that you are over the 64k method limit the Compiler has for every .dex file. Read up on it. Solutions include using Multidex or more solutions here https://www.contentful.com/blog/2014/10/30/android-and-the-dex-64k-methods-limit/. This maybe a duplicate of other issues. Look at How to solve the issue with Dalvik compiler limitation on 64K methods?

Community
  • 1
  • 1
Elvis Chweya
  • 1,532
  • 11
  • 19