当前位置:操作系统 > 安卓/Android >>

android 的混淆解析

-keep class com.badlogic.gdx.backends.android.**{ *;} 
像这样的只是不混淆:这个包下的类(不包括子包里的东西),用到一个第三文的类就要把这个类所在的包,像上面加上
 
还要注意的是android-support-v4.jar这个包问题,这里加上了对这个jar包的处理
 
第三方jar的混淆,
 
-optimizationpasses 5 
-dontusemixedcaseclassnames  
-dontskipnonpubliclibraryclasses  
-dontpreverify  
-verbose  
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
 
-keep public class * extends android.app.Activity                          // 继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆
-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.app.backup.BackupAgentHelper  
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
 
                                                                                                                      // 这里处理第三方的jar包,第三方JAR包处理开始
-libraryjars /libs/android-support-v4.jar
-libraryjars /libs/gdx-backend-android.jar
-libraryjars /libs/gdx.jar
 
                                                                                                                        // 这里不对第三方的jar包的提出WARN     
-dontwarn com.badlogic.**
-dontwarn android.support.v4.**
-dontwarn android.support.v4.view.**
 
                                                                                                                        // 这里对第三方jar包的类不进行混淆
-keep class com.badlogic.gdx.backends.android.**{ *;} 
-keep class com.badlogic.gdx.**{ *;}
-keep class com.badlogic.gdx.graphics.g2d.**{ *;}
-keep class com.badlogic.gdx.graphics.**{ *;}
-keep class android.support.v4.view.**{ *;}
 
                                                                                                                            // 这里第三方JAR包处理结束
 
-keepclasseswithmembernames class * {                                                           // natvie 方法不混淆
    native <methods>;  
}  
-keepclasseswithmembers class * {                                                                    // 对于所有类,有这个构造函数不进行混淆,主要是为了在layout中的,自定义的view
    public <init>(android.content.Context, android.util.AttributeSet);  
}  
-keepclasseswithmembers class * {  
    public <init>(android.content.Context, android.util.AttributeSet, int);  
}  
-keepclassmembers class * extends android.app.Activity {                                   // 这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
   public void *(android.view.View);  
}  
-keepclassmembers enum * {  
    public static **[] values();  
    public static ** valueOf(java.lang.String);  
}  
-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;  
}
 
 
 
 
 
1-----------------------------------------------引用--------------------------------------------------------
 
如果工程引入了Android-support-v4的jar类库,那么在工程打包混淆时,就会出现报错提示。例如提示你:You may need to specify additional library jars (using '-libraryjars')。
 
这里先给出解决方案,稍后我们再来解释如何处理类似情况:
 
在proguard.cfg里的后面,添加如下内容:
 1.-libraryjars /android-support-v4.jar  
 2.-dontwarn android.support.v4.**  
 3.-keep class android.support.v4.** { *; }  
 4.-keep public class * extends android.support.v4.**  
 5.-keep public class * extends android.app.Fragment  
 
然后你再打包看看,应该可以正常生成apk安装包了。
 
打包出错:
情况一:
 "类1 can't find referenced class 类2" 字面上的意思就是类1找不到类2的引用;它会建议你:"You may need to specify additional library jars (using '-libraryjars').";
需要使用-libraryjars加上项目中使用到的第三方库就OK了。
例如:-libraryjars /android-support-v4.jar
注意:这里引用方式是当前工程的根目录(也可以配置其他目录),也就是说,你要把第三方jar放到当前目录下,否则就会警告说找不到jar文件!
 
情况二:
例如: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator,碰到这样的情况,可以使用-dontwarn com.xx.yy.**,不对错误提出警告。
注意:使用这个方式的话,要确保自己没有用到这个库里面的类!否则就会抛ClassNotFoundException!
 
情况三:
在工程中确实用到了该类,采用上面方式还是不行。这个时候就要再增加一项:-keep class com.xx.yy.** { *;},让当前类不混淆。
 
小结:
对于引用第三方包的情况,可以采用下面方式避免打包出错:
-libraryjars /aaa.jar
-dontwarn com.xx.yy.**
-keep class com.xx.yy.** { *;}
 
最后打包成功,还要在机子上跑跑,看看有没有问题。
 
本篇文章来源
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,