2012-11-01 3 views
0

기존의 dex 파일을 처리 할 프로젝트가 있습니다. 요구 사항 중 하나는 모든 불필요한 정보를 제거하고 크기를 줄이는 것입니다.dalvik DEX 파일에서 불필요한 참조를 제거 할 수있는 도구가 있습니까?

이클립스 플러그인을 사용하고 마법사를 따라 간단한 "hello world"앱을 만들려고한다면 (SDK와 플러그인은 지난 밤에 다운로드하여 설치 한 최신 버전 임) classes.dex 파일을 만듭니다 300KB가 넘습니다.

그러나 프로젝트를 보면 lib 폴더에 지원되는 lib 파일이 나타납니다. 만약 당신이 그것을 제거하면 응용 프로그램이 여전히 작동하지만 갑자기 3KB로 떨어지는 덱스 파일의 크기.

기존 파일에도 유사한 불필요한 참조가 포함되어있을 수 있습니다. 문제는 이제 그들을 찾아 내고 제거하는 방법입니다.

도구가 있습니까?

답변

0

표준 도구는 Android SDK가 이미 지원하는 proguard입니다. 당신은 project.properties에서 here

+0

감사합니다입니다 수 있습니다, 나는 그것을 시도 할 것이다. –

+0

http://proguard.sourceforge.net/index.html#manual/usage.html에 따르면, 이것은 dex 수준이 아닌 JAR 수준에서 작동하는 도구 인 것처럼 보입니다. 항아리 파일에 액세스 할 수 없기 때문에 내가 찾고있는 것이 아닙니다. –

+0

아, 질문을 잘못 읽었습니다. :) 상단에 dex 파일에 대한 간단한 소개가 있습니다. 당신은 정확합니다, proguard는 dex 파일에서 작동하지 않습니다. 나는 dex 파일과 비슷한 것을 모른다. – JesusFreke

2

당신이 줄

proguard.config=proguard.cfg 

을 추가 할 필요가 파일에 더 많은 정보를 찾을 수 있습니다 그리고 당신은 여기

가있다 난독 화 - project.txt 파일의 난독 호텔을 찾을 것입니다 로이드 응용 예는

-injars  bin/classes 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 

-keep public class mypackage.MyActivity 

이 하나는 전체 애플리케이션 로이드

위한
-injars  bin/classes 
-injars  libs 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

당신이

당신이 here에서와 완전한 안드로이드 응용 프로그램에 필요한 예를 얻을 수에 대한 injars은 libraryjars이 등이 필요한 jar 파일을 제어하는 ​​데 사용할 here

+0

많은 정보와 예제를 가져 주셔서 감사합니다. 그러나 .jar 파일이 아닌 .dex 파일을 조작하는 도구를 찾고 있습니다. –

+0

아마 이것은 www.netmite.com/android/mydroid/dalvik/docs/dexopt.html –

+0

에 도움이 될 수 있습니다. dexopt는 그가 원하는 것과 관련이 없습니다. 이 장치에만 있으며 dex 파일에서 아무 것도 제거하지 않습니다. – JesusFreke

관련 문제