2011-05-01 3 views
7

필자는 안드로이드 앱에 대해 proguard를 성공적으로 사용하고 있습니다.Proguard에서 .xml 리소스 파일을 강제로 보존하도록하려면 어떻게해야합니까?

그러나 한 앱으로 문제가 있습니다.

이 응용 프로그램은 패키지에 저장되어있는 .xml 파일이있는 Java 라이브러리를 사용합니다.

InputStream istream = Library.class.getResourceAsStream("resource.xml"); 

이 라이브러리는 proguard가 비활성화되어있을 때 유용합니다. 그러나 proguard를 실행하면 xml 파일이 완전히 제거 된 것처럼 보입니다.

관련 proguard.cfg

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
#-dontobfuscate 
#-repackageclasses '' //THIS IS DISABLED 
-keepattributes *Annotation* 
-keepattributes Signature 
-verbose 
-dontwarn roboguice.activity.RoboMapActivity 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

이 xml 파일을 계속 강제하는 방법에 어떤 아이디어?

답변

7

우선, ant 및 my build.xml 스크립트를 사용하여 .xml 리소스 파일을 전혀 처리하지 못했음이 밝혀졌습니다. 출력 dir에 복사 할 리소스 파일에 대한 복사 작업을 build.xml에 수동으로 추가해야합니다.

아직도 해결했지만, 프로 가드가 내 작업을 엉망으로 만들었습니다. 솔루션 :이은 .XML 파일이 Library.class.getResource를 호출하여 볼 수 있음을 확인했다

-keeppackagenames the.package.where.the.file.is.kept 

.

1

적절한 /res/xml, /res/assets 또는 /res/raw 폴더에 파일을 저장하고 그에 따라 리소스 관리 시스템 또는 자산 관리자를 통해 액세스해야합니다. Android Developer's Guide에서 리소스를 제공하는 방법에 대해 자세히 알아볼 수 있습니다.

+0

모두 멋지지만, 이것은 자바 라이브러리의 xml 파일이고 안드로이드는 아닙니다. 내 안드로이드 응용 프로그램에서 그것을 사용하고 proguard없이 잘 작동합니다. 나는 보통 안드로이드 애플 리케이션에서 이런 식으로 사용하지 않는다는 것을 알고있다. – Peterdk

+0

문제는 ProGuard의 잘못처럼 보이지 않는다는 것입니다. ProGuard는 JAR에서 리소스를 제거하지 않으며, 축소하는 동안에 만 클래스를 제거 할 수 있습니다. 이러한 문제는 Android 빌드 파일에서 비롯되었을 가능성이 큽니다. 그것은 당신의 요구에 맞게 수정할 수 있지만, 그것은 쉬운 soultion 아니에요. 그리고 성공하더라도 SDK가 업데이트 될 때마다 다시해야 할 수도 있습니다. – Malcolm

+0

여전히 프로 가드가 비활성화되어 있으면 리소스가 내 앱에서 작동합니다. 프로 가드가 활성화되어 있으면 프로 가드가 사용하지 않습니다. 그래서 프로 가드 (proguard)는 문제를 일으키는 무언가를하고 있습니다. – Peterdk

관련 문제