2012-03-01 2 views
0

나는 자신의 빌드 경로에 Android 라이브러리 프로젝트가있는 Android 프로젝트에서 작업하고 있습니다. 두 프로젝트 모두 libs 폴더와 빌드 경로에 AdWhirl SDK 라이브러리가 있습니다.SDK 업데이트 후 예기치 않은 최상위 예외

이제 주요 프로젝트의 개미 빌드 R15 다음과 같은 예외가 실패하는 안드로이드 SDK 도구를 업데이트 가입일 :

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
     [dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 
     [dx]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
     [dx]  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
     [dx]  at com.android.dx.command.dexer.Main.processClass(Main.java:486) 
     [dx]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455) 
     [dx]  at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
     [dx]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
     [dx]  at com.android.dx.command.dexer.Main.processOne(Main.java:418) 
     [dx]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) 
     [dx]  at com.android.dx.command.dexer.Main.run(Main.java:206) 
     [dx]  at com.android.dx.command.dexer.Main.main(Main.java:174) 
     [dx]  at com.android.dx.command.Main.main(Main.java:95) 
     [dx] 1 error; aborting 

지금은 주요 프로젝트에서 애드 월 SDK lib 디렉토리를 제거하고 라이브러리에서 내보낼 시도 계획. 이제 개미 빌드가 작동하지만 모든 Android 디바이스에서 Eclipse에서 애플리케이션을 시작할 때 ClassNotFoundExceptions가 발생합니다.

사실 나는 개미로 빌드하거나 이클립스에서 디버그 할 선택의 여지가 있지만 두 변종이 필요합니다.

답변

2

"Android Project" imports "Android Library Project" imports "AdWhirl SDK"

은 안드로이드 도서관 프로젝트는 처음부터도 잘 설계되지 않습니다, 그러나,이에 대한 실제 문제가되지 않을 수 있습니다 소비자 개발사로서, SDK가 업그레이드 될 때마다 이와 똑같은 동작을 유지해야합니다.

하지만 안드로이드 개발팀은 여러 가지 최신 릴리스 (아마도 r14 이후)에서 모든 것을 개선하고 다음 출시에서 궁극적 인 해결책을 약속합니다. 이것은 현재 매우 불안정한 단계에서 우리의 지속적인 개발을 떠난다. 나는 프로젝트에 개미를 사용하지 않지만 각 SDK 업그레이드 동안 Maven 관리 라이브러리 변경을 사용하여 비슷한 종류의 문제를 겪고있다. 안드로이드 개발팀은 Ant 또는 Maven과 같은 공식적인 지원 빌드 툴은 물론 공식 ADT 플러그인 (blog)에서 변경 사항을 관리하는 데 어려움을 겪었습니다.

일부 검색을했는데 Android JIRA 시스템에 게시 된 스레드가 상황에 매우 비슷하며 일부 해결 방법 (개미 스크립트의 더티 픽스)과 함께 comments 16 by chris을 확인하십시오. 당신을 도와줍니다.

1

이 jar를 libs 디렉토리에 추가하십시오.

+0

이러한 jar 파일은 libs 디렉토리에 있습니다. – endian

+0

예, 라이브러리 프로젝트의 bin 폴더에서 생성 된 jar 파일을 주 프로젝트의 libs 폴더에 추가하면 IntelliJ에서이 문제가 해결됩니다. –

0

최신 adk로 업그레이드 한 후 adb refresh을 실행하여 ant 스크립트를 다시 작성하라는 메시지가 나타납니다. 최신 버전의 adk에서는 빌드 프로세스가 최적화되었습니다. 이러한 최적화 중 하나가 빌드 경로에 있다고 가정합니다.

[dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 

Implies AdWhirlLayout$AdWhirlInterface이 두 번 추가됩니다. 프로젝트 중 하나에서 AdWhirl SDK를 제거하십시오. Android 프로젝트에서 제거하려고합니다. 대신 내 관점에서

"Android Project" imports "Adwhirl SDK" imports "Android Library Project" imports "AdWhirl SDK"

+0

내 게시물을 읽으십시오 .. 만약 내가 어떤 프로젝트에서 AdWhirl lib를 제거, 일식과 빌드가 작동하지 않습니다 – endian

관련 문제