欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓混淆jar包

程序员文章站 2022-05-31 18:03:17
...

最近在尝试才从其他sdk里获取数据,研究了一下jar包的混淆,主要是系统自带的proguardgui.bat来进行混淆,做个整理贴:

 

1.下面部分是混淆一个jar基本的proguard.pro

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-printmapping proguardMapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable

# 保留所有的本地native方法不被混淆
-keepclasseswithmembernames class * {
	native <methods>;
}

# 保留了继承自Activity、Application这些类的子类
# 因为这些子类,都有可能被外部调用
# 比如说,第一行就保证了所有Activity的子类不要被混淆
-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService

# 如果有引用android-support-v4.jar包,可以添加下面这行
-keep public class com.xxxx.app.ui.fragment.** {*;}

# 保留在Activity中的方法参数是view的方法,
# 从而我们在layout里面编写onClick就不会被影响
-keepclassmembers class * extends android.app.Activity {
	public void *(android.view.View);
}

# 枚举类不能被混淆
-keepclassmembers enum * {
	public static **[] values();
	public static ** valueOf(java.lang.String);
}

# 保留自定义控件(继承自View)不被混淆
-keep public class * extends android.view.View {
	*** get*();
	void set*(***);
	public <init>(android.content.Context);
	public <init>(android.content.Context, android.util.AttributeSet);
	public <init>(android.content.Context, android.util.AttributeSet, int);
}

# 保留Parcelable序列化的类不被混淆
-keep class * implements android.os.Parcelable {
	public static final android.os.Parcelable$Creator *;
}

# 保留Serializable序列化的类不被混淆
-keepclassmembers class * implements java.io.Serializable {
	static final long serialVersionUID;
	private static final java.io.ObjectStreamField[] serialPersistentFields;
	private void writeObject(java.io.ObjectOutputStream);
	private void readObject(java.io.ObjectInputStream);
	java.lang.Object writeReplace();
	java.lang.Object readResolve();
}

# 对于R(资源)下的所有类及其方法,都不能被混淆
-keep class **.R$* {
	*;
}

# 对于带有回调函数onXXEvent的,不能被混淆
-keepclassmembers class * {
	void *(**On*Event);
}

 

 2.http://blog.csdn.net/educast/article/details/46672639

这个贴主要是看了下里面关于proguardgui.bat几个主要界面设置的地方,一开始设置有错,混淆一直失败,而且看不到什么有用的信息

 

3.如果不做处理,自己的写的类也会被改名,里面成员变量也会被改名,所以要做下处理,例如:

-keep public class com.example.confusionlib.SDKDisplay

 

4.在混淆自己写的类的过程中,发现很多方法本来是public,混淆之后变成了private,后面找到原因,是混淆的过程中优化了,后来我又写了一个类,用到了这个类里的方法,这些public的方法就没有变成private了

安卓混淆jar包
            
    
    博客分类: 安卓开发

参考贴:

http://blog.csdn.net/hongweigg/article/details/54612647

 

 

  • 安卓混淆jar包
            
    
    博客分类: 安卓开发
  • 大小: 89.2 KB