2017-11-22 10 views
9

저는 프로젝트에 추가 할 때 내 테스트를 컴파일 할 수 없다는 Espresso 테스트 용 라이브러리가 있습니다.Android Studio 3.0의 com.android.dex.DexIndexOverflowException

Gradle을이 오류 이미 multiDex 내 프로젝트에 사용할 수 있기 때문에 정말 이상한

Caused by: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 
    at com.android.dx.merge.DexMerger$8.updateIndex(DexMerger.java:565) 
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276) 
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:574) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:166) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:198) 

에게 출력

내 프로젝트 build.gradle

defaultConfig { 
      minSdkVersion 16 
      targetSdkVersion 21 
      versionName versionNameFromGitTagVia() 
      versionCode versionCodeFromJenkins() 
      multiDexEnabled true 

      testInstrumentationRunner "app.test.general.InstrumentationRunner" ... 
} 
dependencies { 
    ... 
    androidTestImplementation project(':test-utils') 
    ... 
    implementation 'com.android.support:multidex:1.0.2' 
} 

내 응용 프로그램 클래스

public class RiderApplication extends MultiDexApplication implements Application.ActivityLifecycleCallbacks, 
     GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    .... 
} 

AndroidManifest를 라이브러리를 제거

<application 
    android:name=".RiderApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:theme="@style/MyAppTheme" 
    tools:replace="android:theme,android:icon"> 

문제

어떤 제안을 해결?

편집 나는 여러 가지 방법으로 그것을 해결하기 위해 시도하고, 나는

androidTestImplementation 

그러나 같은 라이브러리를 포함 할 때이 만 happends 것을 발견 정기적

implementation 

로 사용하는 경우 덱스 오류가 사라집니다.

정말 이상한

편집 내가 2.3.3 문제가 더 이상

+0

'Application' 클래스를 만듭니다. 논리를 확인 https://stackoverflow.com/a/33430306/3395198 –

+0

고마워요 @ IntelliJAmiya하지만 내 애플 리케이션은 이미 multidex – orelzion

+0

응용 프로그램 클래스를 지원합니까 언급 했나요? –

답변

0

잘하지 Gradle을 다시 갈 경우는, Gradle을 3.0.1로 발생

, 이것은 이상한 일이지만 전에 일어났다. 이것은 너무 큰되는 방법의 수는 반대로 문자열 숫자의 문제가 너무 많은 것을 처리해야

dexOptions { 
    jumboMode = true 

    // Avoid the OutOfMemoryError: GC overhead limit exceeded: 
    incremental true 
    javaMaxHeapSize "4g" 
} 

: 나는 this thread 우연히 한

는 whish이 추가 제안했다. Android: Jumbo Mode vs Multidex

해피 테스트 : 여기 multidex 대 점보 모드에

더.

+0

감사합니다! 그것은 유망 해 보였지만 불행히도 이것은 도움이되지 못했습니다. 원래 질문에 몇 가지 발견 사항을 추가했습니다. – orelzion

0

글쎄, 수 시간의 테스트 후에 나는 마침내 달릴 수있었습니다.

프로젝트에서 몇 가지 사항이 변경되었으므로 문제의 원인이 무엇인지 알 수는 없지만 더 큰 이익을 위해 여기에 내가 작성한 모든 내용을 적어두고 누군가가 만날 경우 그러한 문제로 적어도 한 가지 해결책이 그녀를 도울 것입니다.

그래서 minSdkVersion을 21로 변경했습니다. 예, Android Studio 2.3.3에서는 요구 사항이 아니었지만 이제는 에스프레소를 사용하게 될 것입니다. 하지만 걱정하지 않아도 테스트하지 않을 때 응용 프로그램은 이전 버전을 계속 지원할 수 있습니다.1.0.1에서 1.0.2 내 그 외에는 build.gradle

def isTest = gradle.startParameter.taskNames.find { it.contains("AndroidTest") } 
     if (isTest != null) { 
      println("is test true") 
      minSdkVersion 21 
     } else { 
      println("is not test") 
      minSdkVersion 16 
     } 

, 내가 업데이트 multiDex 의존성에 그것을 나는이를 추가 한 그런 식으로 구성하고 나는 모든 종속성에 그 시행합니다.

또한 guava 라이브러리를 com.google.guava:guava:22.0-android으로 업데이트하여 다른 라이브러리 (모든 강제 전략이 아래에 게시 됨)를 강제로 해결 한 종속성 충돌이 발생했습니다.

나는 또한 적용 할 필요가있는 espresso-web과의 종속성 충돌이있었습니다.

이 도움이 노력하는 모든 사람들을 위해 당신에게 너무 감사

configurations.all { 
     resolutionStrategy { 
      force 'com.android.support:multidex:1.0.2' 
      force 'com.google.guava:guava:22.0-android' 
      force 'com.google.code.findbugs:jsr305:2.0.1' 
      force 'com.android.support.test.espresso:espresso-web:3.0.1' 
     } 
    } 

내가이 사람을 도움이되기를 바랍니다 순간에 내 해상도 전략이다, 당신이 날 최종 해상도로 성공 도움이 많은 아이디어를 가져왔다