ProGuardã使ã£ã¦ã®é£èªåæ¹æ³
ProGuardã¯Javaã³ã¼ããæé©å/é£èªåããããã®ãã¼ã«ã§ããapkã®ãµã¤ãºãå°ãªããªã£ãããapk解æãããéã«è§£æããé£ããªãã¾ãã
ä»åã¯é£èªåã®ããæ¹ãããåãããªãã£ãã®ã§æ´çãã¦ããã¾ããã
ãªããProGuardã®ãã¼ã¸ã§ã³ã¯4.5ã使ç¨ãã¦ãã¾ãã
åæºå
ProGuardã®å°å
¥ã«é¢ãã¦ã¯ä»ããã°ãåç
§ãã ããã
å
¬å¼ã®ここãここã®ããã°ã®æ¹ã綺éºã«å°å
¥æ¹æ³ãã¾ã¨ãã¦ãã¾ãã
ä¸å¿ããããã¤ã³ãã ãã¾ã¨ãã¦ããã¾ãã
- ADTãr7ã«ä¸ãã
- proguard.dirã¯ProGuardã®libã¾ã§ã®ãã¹
- androd-sdkå ã®antãã¡ã¤ã«ã§javacã¿ã°å ã®encodingãUTF-8ã«ãã
ããã¸ã§ã¯ãå ã«ã¦ä»¥ä¸ã®ã³ãã³ããå®è¡ããã¨æ£å¸¸ã«å¦çããããæºåOKã
$ ant release
ããã¾ã§ã§åºæ¥ã¦ããå¿ è¦ããããã®ã
- obf以ä¸ã«dump.txtãmapping.txtãä½æããã¦ãããã
- bin以ä¸ã«antå®è¡å¾ã«ä½æãããxxxx-release.apkãã¡ã¤ã«ããããã
é£èªåãã¹ãã¢ãã¨ãã¹ãã§ãªãã¢ã
é£èªåã§ããã¢ãã¨ãã¦ã¯ã©ã¹ã»ã¡ã½ããã»å¤æ°ãé£èªåãããäºãã§ãã¾ããããããå
ã®ååããä¸æååã¨ãªããååããæ©è½ãæ¨æ¸¬ããé£ããªãã¾ãã
å称ãå¤æ´ãããããé£èªåãã¦ã¯ãããªãã¢ããåºã¦ãã¾ãã
以ä¸ã®ã¢ãã¯é£èªåãã¦ãã¾ãã¨ã¨ã©ã¼ã«ãªã£ã¦ãã¾ã代表çãªã¢ãã¨ãªãã¾ãã
- AndroidManifestçã«è¨è¼ããå¿ è¦ã®ããActivity/Serviceå
- ãªãã¬ã¯ã·ã§ã³
- JNI
- JavaScriptããã³ã¼ã«ãããJavaã¡ã½ãã
- layout.xmlã«å®ç¾©ããonClickã¡ã½ãã
ããã以å¤ã«ãé£èªåããã¦ã¯ãããªãã¢ããããã¨æããã¾ãã®ã§ãæèãã¦é£èªåããã¦ãã ããã
é£èªåãããªãæ¹æ³
Androidå
¬å¼ããã°ã®æé æ¸ãå
ã«ProGuardãå°å
¥ããå ´åãprocfg.txtã追å ãããã¨æãã¾ãã
é£èªåãããªãã¢ãã¯ãã¡ãã«è¿½è¨ãã¦ããå½¢ãåãã¾ãã
ã¾ãã¯åæè¨å®ãè¦ã¦ããã¾ãã
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -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 com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
...ã¯ãããµãããªæå³ãåãããªãã¨æãã¾ãã®ã§ããã使ããããªãã·ã§ã³ã表ã«ã¾ã¨ãã¾ããã
åå | æå³ |
---|---|
optimizationpasses | æé©ã¬ãã«ãæ°å¤ãé«ãããã°ããã»ã©æé©åãããã |
dontusemixedcaseclassnames | ã¯ã©ã¹åã大å°åºå¥ããã«å¤æ´ããã |
dontskipnonpubliclibraryclasses | publicã§ãªãã©ã¤ãã©ãªã¯ã©ã¹ã対象ããå¤ã |
dontpreverify | iã¢ã¼ãã¢ããªã®ãµã¤ãºåæ¸ç¨ã©ã¤ãã©ãª?ã使ç¨ããªã |
verbose | ãã°ãåºå |
optimizations | æé©å対象 |
keep | 該å½ã¯ã©ã¹ã¨è©²å½ã¡ã½ãããé£èªåããªã |
keepclassmembers | 該å½ã¯ã©ã¹å ã®è©²å½ã¡ã½ãããé£èªåããªã |
keepclasseswithmembernames | ï¼ï¼ï¼*1 |
åºæ¬çã«å¼ããªãã·ã§ã³ã¯keepç³»ãããã ã¨æãã¾ãããã®ä»ã®ãªãã·ã§ã³ã¯ç§ããã¾ãå¼ããªãã®ã§èª¬æãæªããã§ã...
説æãããåãããªãã£ãããä»ã®ãªãã·ã§ã³ãç¥ãããæ¹ã¯公式ãåç
§ãã ããã
æå®ã¯ã©ã¹åãé£èªåãããªãæ¹æ³
ãã®ããã«æ¸ã㨠hoge.hyoromo.TestActivity ã®ã¯ã©ã¹åã¯é£èªåããã¾ããã
-keep public class hoge.hyoromo.TestActivity
ç¹å®ã¯ã©ã¹åãé£èªåãããªãæ¹æ³
ãã®ããã«æ¸ãã¦ã hoge.hyoromo.TestActivity ã®ã¯ã©ã¹åã¯é£èªåããã¾ããã
-keep public class hoge.hyoromo.*
ãã ãããµããã£ã¬ã¯ããªå ã¾ã§ã¯é©ç¨ãããªããã hoge.* ã ã¨é£èªåããã¦ãã¾ãã¾ãã
ã¡ã½ãããé£èªåãããªãæ¹æ³
ãã®ããã«æ¸ã㨠hoge.hyoromo.TestAvtivity ã®ã¯ã©ã¹åå ã®è©²å½ã¡ã½ãããé£èªåããã¾ããã
-keepclassmembers public class hoge.hyoromo.TestActivity { <methods>; }
ã¡ã½ããåãã¯ã©ã¹ã¡ã¤ãåæ§ã«æå®ãåºæ¥ã¾ãããç¹å¾´ãè¨å®ãã¦ãããã¨ãå¯è½ã§ãã
ããã¯ããã©ã«ãã§è¨å®ãã¹ãkeepè¨å®
-keep public class * extends android.app.Activity{ public void *(android.view.View); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -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*(...); } -keep public class **.R
Activityåãå
¥ãã¦ãã¾ãããããã¯Activity以å¤ã«ãXMLå´ã«ã¯ã©ã¹åãè¨è¼ããå ´åã¯å¿
ãè¨å®ãã¦ãã ããã
layoutã§Viewã使ç¨ããéã«Viewã®ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããåãç´ä»ããKeyã¨ãªããããé£èªåãããªããã対å¿ãå¿
è¦ã§ãã
ã¾ãããã®ä»ã®SurfaceViewãç¬èªViewãåãããã«è¨ãããããViewã使ç¨ããéã¯è¿½å ããã®ãç¡é£ãã¨æãã¾ãã
é£èªåãããäºã®ç¢ºèªæ¹æ³
obf/mapping.txt ã«ä½ãã©ãå¤ãã£ããããªã¹ãåããã¦ãã¾ãã
mapping.txtã®ãªã¹ãã¨procfg.txtã®keepå
容ã確èªããªããé£èªåã®ä½æ¥ããã¦ããäºã«ãªãã¾ãã
*1:keepclassmembersã¨ã®éããä¸æ