ProguardGui进行jar包代码混淆
前言
目前android开发主流的开发工具是android studio,但是因为各种原因,还是有一部分人不得不适用Eclipse进行开发,在Eclipse中进行类库开发、类库混淆、类库测试是一个比较复杂的过程,所以我这里将个人之前的开发经验分享出来,希望能帮助大家快速完成工作任务,少踩坑。
准备工作
原jar文件
将Lib项目中bin目录下的编译后得到的hfauthcore.jar
文件拷贝到E盘根目录下
混淆文件
将项目中的混淆文件拷贝一份放到E:\codeProguard
目录下,重新命名为proguard-project.pro
, 并修改如下
-injars 'E:\hfauthcore.jar'
-outjars 'E:\Auth.jar'
-libraryjars 'E:\codeProguard\json-20160810.jar'
-libraryjars 'E:\codeProguard\bcprov-ext-jdk15on-153.jar'
-libraryjars 'E:\codeProguard\android-support-v4.jar'
-libraryjars 'F:\android\android-sdk-windows\platforms\android-21\android.jar'
-libraryjars 'C:\Program Files\Java\jre7\lib\rt.jar'
-keepclassmembers class hf.auth.core.utils.LocationPlugIn {
public *;
}
-keepclassmembers class hf.auth.core.sdk.HFAuth {
public *;
}
# 保持指定的类不被混淆
-keep class hf.auth.core.sdk.HFAuth {*;}
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
}
-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 * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keepclasseswithmembernames class * {
native <methods>;
}
-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.app.Activity {
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 *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-dontwarn org.json.**
-keep class org.json.** { *; }
-dontwarn org.bouncycastle.**
-keep class org.bouncycastle.** { *; }
jar包依赖的环境
在E:\codeProguard
目录下添加hfauthcore.jar
依赖的jar包
开始代码混淆
代码混淆工具
在F:\android\android-sdk-windows\tools\proguard\bin
目录下双击proguardgui.bat
打开ProguardGui工具
开始代码混淆
点击右下角的Load Configuration
按钮,选择我们上面创建的proguard-project.pro
文件
然后一直点击Next
按钮,可以对混淆进行自由配置Progess
如果提示Processing completed successfully
则说明代码混淆成功
查看混淆后的jar包
将混淆后的Auth.jar
拖入jd-gui.exe
中既可以看到混淆后的效果
测试
将混淆后的Auth.jar
导入到android工程中,发现正常的对界面进行调用
注意事项
导入和导出问题
需要明确指定原jar文件和导出的jar文件所在的路径,如果路径不存在则混淆失败
# 原jar文件所在的位置
-injars 'E:\hfauthcore.jar'
# 混淆后导出的jar文件所在的位置
-outjars 'E:\Auth.jar'
jar包依赖问题
需要对所有依赖的jar包指定路径,否则混淆中会出现类无法找到的异常导致混淆失败
# 项目中使用的jar包依赖
-libraryjars 'E:\codeProguard\json-20160810.jar'
-libraryjars 'E:\codeProguard\bcprov-ext-jdk15on-153.jar'
-libraryjars 'E:\codeProguard\android-support-v4.jar'
# android环境依赖
-libraryjars 'F:\android\android-sdk-windows\platforms\android-21\android.jar'
# java 环境依赖
-libraryjars 'C:\Program Files\Java\jre7\lib\rt.jar'
指定类不混淆
如果想指定某些类不被混淆,则需要手动指定
# 保持指定的类不被混淆
-keep class hf.auth.core.sdk.HFAuth {*;}