利用android proguard混淆代码

网上虽然有很多相关博客,不过貌似都不是最新版的。。于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard。

最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的

自定义配置就行了。

  第一步,取消project.properties里面关于proguard的注释。这一步可以开启proguard。根据网上的博客,

最好加上sdk的路径。

1
2
sdk.dir=D:/Java/IDE/adt-bundle-windows-x86_64-20130219/sdk
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

  

这样一来默认的配置文件也会被包括进来。

 

第二步,保存被AndroidManifest.xml调用或者webview的类。这是因为proguard会移除没有被调用的代码。

1
2
3
4
5
6
7
8
9
10
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
   public *;
}
-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  

  

第三步,第三方类库。如果第三方库用到其他的类,但是找不到类,包警告错误,

可以通过

-dontwarn org.springframework.**
-dontwarn java.**
-dontwarn com.alibaba.fastjson.**
-dontwarn javax.**
-dontwarn org.junit.Test

来忽略掉这些其他包引用了的但是没用的类

 

1
2
3
4
5
#第三方类库
-keep class android.** {*;}
-keep class com.jeremyfeinstein.slidingmenu.lib.** {*;}
-keep class com.actionbarsherlock.** {*;}
-keep class com.lidroid.xutils.** {*;}

  

第四步,其实这一步可以代替上面所有的keep语句,彻底将误删的概率降到最低。

那就是保留所有具有公有访问权限的类和其公共成员。

1
2
3
-keepclasseswithmembers class *{
    public *;
}

  

第五步,在github上的开源proguarddemo上学来的,删除Log代码

1
2
3
4
5
6
7
-assumenosideeffects class android.util.Log {
    public static *** e(...);
    public static *** w(...);
    public static *** wtf(...);
    public static *** d(...);
    public static *** v(...);
}

  然后跑了一下,成功混淆并且可以运行。。。

 

posted @   Zane Young  阅读(1642)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示