2014-05-20 9 views
6

나는이 오류를 발견하고 오류 메시지에 대한 히트를 발견하지 못했기 때문에 내 작업을 반복하는 문제에 직면 한 다른 사람을 구하기 위해 생각해 낸 해결책을 나눌 것이라고 생각했습니다."문제 해결 출력 : 너무 많은 필드 참조 : 70185, 최대 65536입니다. --multi-dex 옵션을 사용해보십시오." 안드로이드 프로젝트를 만들 때

문제가 작성 출력 : A (대형) 응용 프로그램에서 사용할 새 안드로이드 라이브러리 (apklib)를 기록 할 경우 내가 종속성으로 내 새 프로젝트를 추가 할 때

, 나는한다 Dexing하는 동안 다음과 같은 오류를 받고 있어요 : 너무 많은 필드 참조 : 70185; max는 65536입니다.
--multi-dex 옵션을 사용해보십시오. 패키지에 의해
참고 :
< ... 생략 필드 카운트와 패키지의 긴 목록 ... >이

가에 실패 특정 빌드 단계는 다음과 같습니다 --multi-dex를 사용

java -jar $ANDROID_SDK/build-tools/19.0.3/lib/dx.jar --dex \ 
--output=$PROJECT_HOME/target/classes.dex \ 
<... long list of apklib and jar dependencies elided ...> 

권장 오류 메시지에 의해 해결 될 수도 있지만 응용 프로그램 프로젝트의 소유자가 아니며 이미 복잡한 변경 프로세스가 있으므로 관계없이 변경하는 것을 주저합니다.

사실상 필드가없는 테스트 라이브러리 프로젝트로이 문제를 재현 할 수 있지만 오류 출력에는 6000 개 이상의 필드가있는 것으로 표시됩니다. 오류 출력에 나열된 패키지 중 6k + 필드 수가 유사한 소수가 있지만 대부분 대다수가 1k 필드 카운트 인 <을 가지고 있습니다.

이 문제는 Facebook famously hacked their way around의 "너무 많은 방법"문제와 유사합니다. FB 솔루션은 미친 것처럼 보였습니다. 발견 한 다른 해결책 (예 : this Android bug ticket, or this one, this SO answer, this other SO answer)은 모두 내가하고 싶은 것의 범위를 훨씬 뛰어 넘는 주 앱 코드를 변경하는 것입니다.

다른 해결책이 있습니까?

답변

2

해결책은 AndroidManifest의 package을 기본 애플리케이션 패키지와 일치하도록 변경하는 것이 었습니다.

A는 다음과 같이 명시 :

<manifest package="com.example.testlibrary" ... 

은 6K + 필드 결과와 실패를 구축 할 수 있습니다. 주 응용 프로그램의 패키지와 일치하도록 변경하십시오.

<manifest package="com.example.mainapplication" ... 

프로젝트를 성공적으로 작성했습니다.

매니페스트의 패키지 만 변경 중이므로 라이브러리의 Java 소스 또는 레이아웃을 변경하지 않았습니다. Java 패키지는 일치시킬 디렉토리 구조가있는 com.example.testlibrary입니다.

다른 패키지 이름이 모든 Android 필드를 해당 패키지 아래에 다시 포함시키는 것으로 가정합니다. 6k + 필드가있는 오류 목록의 모든 패키지는 주 응용 프로그램과 다른 패키지 이름을가집니다.

나는 또한 (나중에, grr), this blog post 동일한 문제 및 최종 동일한 해결책을 상세히 찾아 냈다.

+0

어떻게하면됩니까? 패키지 이름을 다른 이름으로 변경하려고 시도했지만 여전히 같은 오류가 있습니다.이 작업을 수행하는 방법에 대한 추가 정보를 실제로 사용할 수 있습니다. – user198923