2017-10-19 16 views
0

이 질문은 이미 제기 된 것으로 알고 있지만 약간 다르며 문제에 대한 해결책을 찾을 수 없습니다.ClassDefNotFoundError with local aar

나는 (순수 자바) 항아리에 의존하는 여러 개의 aar 라이브러리에 의존하는 안드로이드 애플 리케이션을 가지고있다. Android Studio에서 개발하는 동안 내 회사 로컬 관계의 종속 항목으로 모든 아아와 항아리를 포함합니다. 이는 의도 한대로 작동합니다.

그러나 배포를 위해 우리는 이미 자신의 libs 폴더에 jar 종속성을 포함하는 로컬 aar 파일을 가지고 있습니다. 배포 build.gradle 내부에서 우리는 그들을 포함하는 것으로 정의 다음과 같은 항목이 : 나는 안드로이드 스튜디오에서 프로젝트를 열면

repositories { 
    jcenter() 
    flatDir { 
     dirs '../../libs' 
    } 

    maven { 
     url "https://maven.google.com" 
    } 
} 

dependencies { 

    compile 'com.android.support:appcompat-v7:26.1.0' 
    compile ":NameOfAarFile:[email protected]" 
    compile ":NameOfAnotherAar:[email protected]" 

    compile fileTree(include: ['*.jar'], dir: 'libs') 
} 

가 Gradle을이 검사를 수행하고 내가 그것을 구축 할 수 있습니다. 그것은 열리지 만, 당신이 aar에있는 항아리에서 기인 한 기능을 사용하려고하자마자 나는 NoClassDefFoundError을 얻습니다.

출력에서 ​​apk를 컴파일 해제하고 dex2jar을 실행하고 jd-gui으로 클래스를 살펴보고 예상되는 위치에 있는지 확인합니다.

이제는 NoClassDefFoundError이 왔는지 궁금합니다. 또는 - 더 이상 없으려면 어떻게해야합니까?

official documentation는 언급 :

라이브러리 모듈 당신은 그 자체가 JAR 라이브러리를 포함하는 라이브러리 모듈을 개발할 수있는 JAR 라이브러리

을 포함 할 수있다; 그러나 종속 응용 프로그램 모듈의 빌드 경로를 수동으로 편집하고 JAR 파일에 경로를 추가해야합니다.

가능한 한 항아리를 항아리 안에 남겨두고 싶습니다.

필요한 경우 더 자세한 정보를 제공합니다.

+0

메소드의 총 개수는 얼마입니까? 65K가 넘으면 multidex를 활성화해야합니다. –

+0

어떻게 계산합니까? Java 메소드 만이이 한계에 포함됩니까? 그러나 나는 65k가 내가 가진 것보다 훨씬 길다는 것을 의심한다. (나는 심지어 10k 방법을 가지고 있지 않다고 추정한다) –

답변

0

무슨 일이 있었는지 알았습니다. Android Studio에서 InstantRun을 사용 중지하면 작동합니다.