有些时候我们希望我们自己的apk包不能被别人反编译而获取自己的源代码。这就需要我们通过Android提供的混淆打包技术来完成。

一、没有引用外部包的情况:

这种情况下代码混淆的方式相对简单:

1)只需要复制一份proguard.cfg文件到项目主目录中(不需要做任何改动)

2)修改project.properties文件,向文件中加上一段代码:proguard.config=proguard.cfg即可

到此第一种情况的混淆结束。

二、再我们引用了外部包的情况下,例如:google的gson.jar,微信,人人,地图等外部引用包时,我们就需要对这些包做特殊处理了。

1)在proguard.cfg文件中引入这些jar文件。例如:

-libraryjars libs/activation.jar
-libraryjars libs/additionnal.jar
-libraryjars libs/alipay.jar
-libraryjars libs/android-support-v4.jar
-libraryjars libs/gson-2.2..jar
-libraryjars libs/libammsdk.jar
-libraryjars libs/mail.jar

2)指定这些包中的类不被混淆

-keep class com.google.**{ *; }
-keep class com.alipay.android.** { *; }
-keep class com.sun.activation.registries.** { *; }
-keep class javax.activation.** { *; }
-keep class com.tencent.mm.** { *; }
-keep class com.sum.mail.** { *; }
-keep class javax.mail.** { *; }
-keep class myjava.awt.datatransfer.** { *; }
-keep class org.apache.harmony.** { *; }

3)去除警告

-dontwarn com.google.**
-dontwarn javax.activation.**
-dontwarn com.alipay.android.**
-dontwarn com.sun.activation.registries.**
-dontwarn com.tencent.mm.**
-dontwarn com.sun.mail.**
-dontwarn javax.mail.**
-dontwarn myjava.awt.datatransfer.**
-dontwarn org.apache.harmony.**

4)修改project.properties文件,向文件中加上一段代码:proguard.config=proguard.cfg

5)到此为止任务完成,混淆编译后就是你想要的效果。

特别说明:当你在用到Google提供的包gson.jar时,除了要对该jar包做特殊处理外还需要对你项目中的JavaBean最特殊处理(保证这些JavaBean不被反编译)

假如你项目中的JavaBean为com.test.Order.java(订单)、com.test.User(用户)等。

那么在你的proguard.cfg文件中就需要加上如下代码:

-keep class com.test.** {*;}

然后再加上下面的这段代码:

-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.examples.android.model.** { *; }

具体为什么这样做,下面我将给出解释:

因为客户端代码中的JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编
译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。
 
下面给出网上查到的一段代码:
在proguard.cfg文件中添加:
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
//这句非常重要,主要是滤掉 com.bgb.scan.model包下的所有.class文件不进行混淆编译
-keep class com.bgb.scan.model.** {*;}

Android 混淆打包的更多相关文章

  1. Android混淆打包配置总结

    Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...

  2. android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)

    最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...

  3. android——混淆打包

    网上搜了一大堆,在此不一一赘诉. 直接讲解了 如上图这么配置,其实就是加上一句话而已.告诉打包工具混淆打包的代码放在./proguard-project.txt这里 proguard.config=. ...

  4. Android 混淆打包不混淆第三方jar包

    项目由于要公布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件里加入不须要混淆的类和第三方的jar包   这个是保持自己包中不须要混淆的类,假设有些类调用了jni ...

  5. Android混淆打包

    一.理论知识   ProGuard是一款免费的Java类文件压缩器.优化器和混淆器.它能发现并删除无用类.字段(field).方法和属性值(attribute).它也能优化字节码并删除无用的指令.最后 ...

  6. 微信android混淆打包减少安装包大小

    首先,感谢微信android团队的分享 微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了 ...

  7. android混淆打包配置(忽略第三方jar)

    在project.properties里加上   proguard.config=proguard.cfg proguard.cfg 配置如下: -optimizationpasses 5-dontu ...

  8. android studio...混淆打包全揭秘

    前言,当前android studio使用的版本较新,低版本的如果有差异,或者问题,欢迎拍砖! 1.修改配置文件 找到配置文件,build.gradle,修改如下.    signingConfigs ...

  9. apk混淆打包注意事项

    混淆打包搞了好几天才初步了解,其中碰到很多Debug正常,Release的apk不能用,基本都是第三方的jar的问题,所以要排除混淆. 1. Json解析对象出错 用到fastJson或者GJson的 ...

随机推荐

  1. Linux常用基本命令(head)

    head命令 作用:显示文件的头部内容,默认显示前面10行 格式: head [option] [file] -n <行数> -c <字节> ghostwu@dev:~/lin ...

  2. js-ES6学习笔记-for...of循环

    1.一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,就可以用for...of循环遍历它的成员.也就是说,for...of循环内部调用的是数据结构的Symbo ...

  3. js-jQuery性能优化(一)

    来自于<锋利的jQuery> 1.使用最新版本的jQuery类库 jQuery每一个新的版本都会较上一版本进行BUG修复和一些优化,同时也会包含一些创新,所以建议使用最新版本的jQuery ...

  4. htnl类名命规范

    html 命名规则 一.注意事项: 1. 一律小写; 2. 尽量用英文; 3. 不加中杠和下划线; 4. 尽量不缩写,除非一看就明白的单词. 主要的 master.css 模块 module.css ...

  5. webpack4.x初使用

    1.nodejs环境,建议下载v8.2以上版本的,低版本怕是有些api已经废弃,链接附上(https://npm.taobao.org/mirrors/node/) 2.网上一些教程有的是webpac ...

  6. 怎样删除PeopleSoft进程服务器定义

    比如在克隆环境时候,把生产的环境克隆到DEV环境,你可能会在进程调度服务器中看到了生产的进程服务器,例如:你可能会在进程调度的时候选择一个server,但是这个server并没有在psadmin下创建 ...

  7. ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  8. KCF跟踪算法 入门详解

    一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...

  9. SQLServer 学习笔记之超详细基础SQL语句 Part 6

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 5------------------- 28 聚合函数 --求平均分 ...

  10. Jemeter 连接数据库

    1.打开Jmeter添加测试计划,(http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.6/mysql-connector-j ...