2012-01-10 3 views
10

Android 프로젝트에 제 3 자 라이브러리 (JmDNS)를 추가하려고합니다.Android Proguard 중복 정의

기본 프로젝트 디렉토리 아래에 'libs'폴더를 생성하고 디렉토리에 jar 파일을 놓습니다.

Ant (ant release)를 사용하여 프로젝트를 빌드하려고하면 JmDNS jar 파일의 각 클래스 인 것으로 보이는 항목에 대해 '중복 정의'라는 알림이 표시됩니다.

.... 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Canceler] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.DNSStateTask] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Prober] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Renewer] 
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.package-info] 
[proguard] Note: duplicate definition of library class [javax.jmdns.package-info] 
[proguard] Note: there were 357 duplicate class definitions. 

빌드 또한 다음과 같은 오류와 함께 실패합니다

BUILD FAILED 
/path/Tools/ant-android-scala/build-scala.xml:183: Can't write [/path/bin/projectname-debug-shrinked.jar] (Can't read [/path/projectname/libs/jmdns.jar(;;;;!META-INF/MANIFEST.MF,!library.properties)] (Duplicate zip entry [jmdns.jar:javax/jmdns/JmDNS$Delegate.class])) 

내가 jar 파일 한 번에만 포함되며, I 중복 소스 파일을 포함하고 다른 방법이 없다는 것을 확인했습니다 프로젝트의 어느 곳에서나 사용할 수 있습니다.

왜 Proguard는 중복 정의에 대해 불만을 제기합니까?

+0

(제안 된 답변을 여러 번 시도한 후에) 프로젝트를 깨끗하게 처리하면 빌드 폴더 또는 무언가에 보관중인 라이브러리의 오래된 버전이 보입니다. – Fonix

답변

12

타사 라이브러리를 다른 디렉토리로 이동하면이 문제를 해결할 수 있습니다. 제 경우에는 'lib'입니다. 그런 다음, proguard.cfg 파일에

-injars lib/jmdns.jar 

을 추가했습니다.

타사 파운드가 'libs'폴더에 포함되어 있으면 두 번 처리됩니다.

+0

동일한 오류를 만났습니다. 귀하의 답변에 따르면 - BTW, 나는 병 - 항아리에 대한 전체 경로를 사용합니다 ... 답을 공유해 주셔서 감사합니다. –

+5

아니면 그냥'-injars libs' – shkschneider

+0

두 개의 폴더 'lib'와 'libs'가 있습니까? 당신은 당신의 gradle'fileTree (dir : 'libs', include : [ '* .jar'])'를 컴파일합니까? – NickUnuchek

1

현재 progaurd 버전에서는 inja를 지정할 필요가 없습니다. 기본적으로 처리됩니다. 이는 다음과 같은 이유로 발생할 수 있습니다.

1) 일부 참조 된 라이브러리에서 1) 중복 된 jar 파일.

솔루션 - 응용 프로그램에서 그것을 제거하고 그것으로 인해 응용 프로그램 Gradle을 파일 참조 라이브러리 Gradle을 파일 사이에 다른 Gradle을 버전에 참조 라이브러리

2)이 될 수를 할 수 있습니다. 똑같이 만드십시오.

해결 방법 - gradle 파일을 참조 된 라이브러리/프로젝트의 gradle 파일 중 하나로 편집하십시오. 클래스 패스가 두 프로젝트에서 모두 동일한 지 확인하십시오.

dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }

나는이 두 가지 문제가 있었다를 정류하고 일했다.

관련 문제