2010-07-08 2 views
2

여기 주어진 라이브러리를 포함해야하는 JavaME 프로젝트가 있습니다. Netbeans 6.8을 사용하고 있으므로 방금 프로젝트에 라이브러리를 추가했습니다. 그런 다음 라이브러리의 클래스가 결과 jar 파일로 올바르게 채워집니다.Proguard : 라이브러리에서 클래스를 최적화하지 않는 방법

내 문제는 이제이 라이브러리의 클래스에 Proguard obfuscator를 건드리지 않아야한다는 것입니다. 그래서 내가 해봤 다른 -keep 옵션 :

-keep class com.package.**

나는 또한 시도했다 -keepnames 및 -keepclassmembers,하지만 Proguard와는 말 종료됩니다

Unexpected error while editing code:

Class = [com/package/class]

Method = [run()V]

Exception = [java.lang.IllegalArgumentException] (Invalid instruction offset [1077] in code with length [1075])

Error: Invalid instruction offset [1077] in code with length [1075]

무시하는 Proguard와 말할 수있는 방법이 있나요 특정 도서관 또는 특정 수업?

미리 감사드립니다.

답변

0

The classes of the library are then correctly packed into the resulting jar-file.

문제가있는 곳입니다. Proguard에 제공된 항아리에 보관되면 처리됩니다. 나는 당신이 모든 의존성을 지닌 큰 항아리를 만들어야한다고 믿습니다. 그렇다면이 큰 병에서 JavaME 코드를 제외하고 별도의 병에 보관하십시오. 그런 다음 프로 가드가 처리하지 않습니다.

다른 방법으로 JavaMe 코드를 별도의 jar 파일로 옮기고 Proguard에 제공하는 jar 파일의 종속성을 확인하십시오. 당신은 ProGuard의 손길이 닿지 않은 라이브러리를 마칠 경우

1

, 당신은 -libraryjars 대신 -injars로 지정해야합니다 :

-libraryjars somelibrary.jar 

그 클래스가 출력 항아리에 포함, 그래서 당신은 다음 여전히이되지 않습니다 처리 된 응용 프로그램의 클래스 경로에 라이브러리 jar를 추가합니다.

또는 당신이 입력 항아리와 같은 라이브러리 항아리를 처리 할 수 ​​있지만, 그 클래스 반원 유지 : 이제

-keep class some.library.** { *; } 

을, 예상치 못한 오류가 다른 무언가이다. ProGuard의 버그를 나타냅니다. ProGuard의 최신 버전을 사용하고 있는지 확인해야합니다. 그렇지 않으면 Sourceforge의 ProGuard 버그 추적기에서 문제를보고해야합니다.

+0

을 만있다 ProGuard에서 처리하는 응용 프로그램 파트. 어쩌면 당신은 inlibraryjars와 같은 새로운 옵션을 추가하여 이것을 가능하게 할 수 있습니다 (그리고 제 응답을 처리하지 않고 결합하기 때문에 제 응답을 보았을 때 여전히 내 경고를 보냅니다). –

0

이러한 옵션을 지정, ProGuard에서와 별도의 패스에 JAR 파일을 결합 할 수 있습니다 : 모든 이들을 처리하지 않고 단지를 결합하는 간단한 효과가

-dontnote ** 
-dontwarn ** 
-dontobfuscate 
-dontshrink 
-dontoptimize 

합니다.

dontnote 및옵션은 메모와 경고를 억제하기위한 것으로, 간단한 결합 작업의 경우 위조 된 옵션이며 그 수가 많습니다.같이 두 번째 패스가 보일 것입니다

-injars  MyApplication-Unobfuscated.jar 
-libraryjars SomeLibraryJar.jar(!META-INF/**) 
-libraryjars AnotherLibraryJar.jar(!META-INF/**) 
-outjars  MyApplication-Obfuscated.jar 

// other options. 

:

첫 번째 패스 같은 것을 보일 것입니다 그것은 모든 종속성을 포함하는 유통 JAR를 구축하고자하는 매우 일반적인 요구 사항입니다

-injars  MyApplication-Obfuscated.jar 
-injars  SomeLibraryJar.jar(!META-INF/**) 
-injars  AnotherLibraryJar.jar(!META-INF/**) 
-outjars  MyApplication.jar 

-dontnote ** 
-dontwarn ** 
-dontobfuscate 
-dontshrink 
-dontoptimize 
관련 문제