2014-01-14 3 views
25

나는 android studio를 사용하여 디버그 및 릴리스 응용 프로그램을 빌드하고 있습니다. 내가 디버그/릴리스 응용 프로그램ProGuard에서 -dontwarn을 사용하는 방법?

./gradlew assembleDebug 

./gradlew assembleRelease 

를 빌드 할 때 모두 빌드가 완벽하게 만들뿐만 아니라 실행됩니다. 디버그에 대한 적절한 대화 상자를 표시하거나 build.gradle에

지금 내가 추가 한 난독의 세부 사항을 공개 :

signingConfigs { 
    myConfig { 
      storeFile file("keystore.jks") 
      storePassword "abc123!" 
      keyAlias "androidreleasekey" 
      keyPassword "pqrs123!" 
    } 
} 

buildTypes { 
    release { 
     runProguard true 
     proguardFile getDefaultProguardFile('proguard-android-optimize.txt') 
     signingConfig signingConfigs.myConfig 
    } 
} 
productFlavors { 
    defaultFlavor { 
     proguardFile 'proguard-rules.txt' 
    } 
} 

지금은

등의 이벤트 로그에 오류

경고를 보여줍니다 해결되지 않은 7이 있었다 클래스 또는 인터페이스에 대한 참조 누락 된 라이브러리 jar를 추가하거나 버전을 업데이트해야 할 수 있습니다. 누락 된 클래스없이 코드가 올바르게 작동하면 의 '-dontwarn'옵션으로 경고를 표시하지 않을 수 있습니다. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

경고 : 프로그램 클래스 멤버에 대한 참조가 2 개 있습니다. 입력 클래스가 일관성이없는 것처럼 보입니다. 코드를 다시 컴파일해야 할 수 있습니다.

(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) 는 : 플래시 판매 : 다음 false로 실행을 runProguard 옵션을 설정하면 proguardDefaultFlavorRelease는

에 실패했습니다.

1)는 false runProguard =로 APK를 출시 괜찮 :

나는이 질문이?

2) 릴리스 빌드를 만드는 동안 dontwarn을 사용하는 방법은 무엇입니까?

+0

전체 오류 로그인가요? 당신이 실제 7 + 2 미해결 참조를 빠뜨린 것 같습니다. '-dontwarn'을 사용하는 것은 아주 쉽습니다. 예를 들면 다음과 같습니다. http://stackoverflow.com/questions/6974231/proguard-hell-cant-find-referenced-class – Jonik

+1

질문 1)과 같이 실제 출시 빌드 (Google Play 등)의 경우 ProGuard를 사용하십시오. (그러나 앱을 리버스 엔지니어링하기가 쉽다는 사실을 신경 쓰지 않는다면 필수는 아닙니다.) ProGuard를 사용하여 얻는 오류를 해결하는 방법을 배우는 데는 1 시간에서 2 시간 정도 소요됩니다. – Jonik

+0

빠른 응답을 보내 주셔서 감사합니다. 이제 dontwarn 행을 proguard-rules.txt에 추가하면 빌드가 성공적으로 생성되었습니다. jcifs.http.NetworkExplorer : jcifs.http : 슈퍼 클래스 또는 인터페이스 인 javax.servlet.http.HttpServlet 경고를 찾을 수 없습니다 지금 내가 내가 경고로 참조 경고를 받고 한 번 더 질문이 있습니다.NtlmHttpFilter : 슈퍼 클래스 또는 인터페이스를 찾을 수 없습니다 javax.servlet.Filter 내가 방법 (1) 사용 :. -dontwarn에서 javax.servlet를 ** 또는이 방법 2 :. -dontwarn의 jcifs.http ** 빌드가 성공적으로 생성되었습니다. 어느 쪽을 선호해야하며이 두 가지 차이점은 무엇입니까? – morya

답변

23

프로젝트에 새 lib를 추가 할 때 일반적으로 어떻게이 Progaurd를 정의해야합니까?

내가 Twitter4J lib를 사용하고 있다고 가정 해 보겠습니다. 이렇게하면 dontwarn을 추가 할 수 있습니다.

-keep class twitter4j. ** {*; }

-dontwarn의 twitter4j. **

+0

"해결되지 않은 참조"경고는 Proguard가 클래스를 제거했는지 여부를 나타 냅니까? 나는 필터를하지 말아야한다. –

+3

어디서 정확히 이것을 추가합니까? – jonney

+0

@jonney [** this **] (http://stackoverflow.com/questions/4732656/enabling-proguard-in-eclipse-for-android) 게시물을 확인하시기 바랍니다. – swiftBoy

관련 문제