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包
ProguardGui进行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 {*;}
发布了11 篇原创文章 · 获赞 1 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/panyongjie2577/article/details/89348532
今日推荐