今天给大家分享一个只混淆自己的项目代码而不混淆所有第三方jar的方法(没错,是所有的第三方都不进行混淆,无论来什么第三方,都不需要动混淆配置)

不混淆所有第三方重大突破

今天又被同事逼迫看了一下Proguard官网,发现原来是支持指定多个目录混淆的

例如你有:com.a.a、com.b.b、com.c.c、com.第三方等现在只想混淆com.a.a和com.b.b,那么你写成如下即可
```
-keep class !com.a.a.**,!com.b.b.**,** {*;}
```

使用注意:如果你项目用的第三方特别杂乱、特别多,不混淆的话会导致包体积增大很多

一、为app添加混淆

在app的buildTypes里开启对指定包进行混淆,这里我混淆了release和debug的,并且增加了一个debug模式的混淆类型(注①)

buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}//不混淆,便于开发debugdebug {minifyEnabled falsesigningConfig signingConfigs.release}//debug混淆模式,以便给测试人员测试debugProguard {//除了字符串和注释其他的不要沾半点中文initWith debugminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}

二、增加混淆逻辑

第二步就是关键了,混淆的配置(放在app目录下即可,上面写的是相对路径,所以必须在app目录下,不是根目录)

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/chenmengjia/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}#默认的proguard-android.txt已经增加了Annotation、native、view的setget方法、Activity参数为view的方法、Enum枚举、Parcelable、R,此处不再写
#------------------------------------------通用区域----------------------------------------------------
#----------------------基本指令------------------------
#代码混淆压缩比,在0和7之间,默认为5,一般不需要改
-optimizationpasses 5
#混淆时不使用大小写混合,混淆后的类名为小写
-dontusemixedcaseclassnames
#指定不去忽略非公共的库的类
-dontskipnonpubliclibraryclasses
#指定不去忽略非公共的库的类的成员
-dontskipnonpubliclibraryclassmembers
#不做预校验,preverify是proguard的4个步骤之一
#Android不需要preverify,去掉这一步可加快混淆速度
-dontpreverify
#有了verbose这句话,混淆后就会生成映射文件
#包含有类名->混淆后类名的映射关系
#然后使用printmapping指定映射文件的名称
-verbose
-printmapping proguardMapping.txt
#指定混淆时采用的算法,后面的参数是一个过滤器
#这个过滤器是谷歌推荐的算法,一般不改变
-optimizations !code/simplification/cast,!field/*,!class/merging/*
#保护代码中的Annotation不被混淆,这在JSON实体映射时非常重要,比如fastJson
-keepattributes *Annotation*,InnerClasses
#避免混淆泛型,这在JSON实体映射时非常重要,比如fastJson④
-keepattributes Signature
#抛出异常时保留代码行号,在异常分析中可以方便定位
-keepattributes SourceFile,LineNumberTable
#-----------------------全局混淆-----------------------
#除了项目目录,其他都不混淆②
-keep class !com.wang.**,!com.li.**,** {*;}
-dontwarn **
#---------------------默认保留-------------------------
#基础保留
-keep class * extends android.app.Activity
-keep class * extends android.app.Application
-keep class * extends android.app.Service
-keep class * extends android.content.BroadcastReceiver
-keep class * extends android.content.ContentProvider
-keep class * extends android.app.backup.BackupAgentHelper
-keep class * extends android.preference.Preference
-keep class * extends android.view.View {<init>(...);
}#序列化
-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();
}
#EventBus的注解
-keepclassmembers class * {@org.greenrobot.eventbus.Subscribe <methods>;
}
#WebView
-keepclassmembers class * extends android.webkit.WebView {*;}
-keepclassmembers class * extends android.webkit.WebViewClient {*;}
-keepclassmembers class * extends android.webkit.WebChromeClient {*;}
-keepclassmembers class * {@android.webkit.JavascriptInterface <methods>;
}#-------------------------------------------项目定义区-------------------------------------------------
#com.wang.*是为了适配其他项目③
#bean
-keep class com.wang.*.bean** {*;}
#eventbus传递的类
-keep class com.wang.*.eventbus.** {*;}
#zxing相关,目前没动过
-keep class com.wang.*.zxingjava.** {*;}
#反射相关,暂无

对于某个特殊类或属性也可以在代码中使用@Keep注解来防止被混淆,举例如下

@Keep//不混淆该类方法及属性,内部类需要再加注解
public class TestClass {
}

注:

①(release和debug在所有的module里默认都有(就算module没写也是存在的),如果想增加一个“debugProguard”则在每个module里都添加即可,不需要再配置一遍混淆,如下)

    buildTypes {debugProguard {initWith debug}}

②注意修改为自己的包名,如:-keep class !com.zhangshan.app.**,** {*;}

AS3.0之前的混淆逻辑未测试,请自行测试
③反射、bean、eventbus等数据敏感区参照最后面的项目自定义自行增加

④Signature现在好像是个坑,这个属性目前没有任何作用,好像是最近才修复的:Incorrect handling of Record.Signature attribute · Issue #194 · Guardsquare/proguard · GitHub

很多新手总是出问题,此处追加demo:GitHub - weimingjue/ProguardExample: Proguard的示例

java代码里请改成自己的包路径,你的json解析文件及其他敏感数据请写在项目自定义区里面:

包路径即你java文件里声明“package com.x.x.x;”的前几个

问题1:没混淆正常,开了混淆就崩溃

请看日志!看日志!看日志!一般都是使用了反射出现的xxxNotFound异常或者一些bean数据类忘加了,自行添加忽略

问题2:开了混淆没任何作用

1.查看是否改成了自己的包路径(检查ApplicationId和packageName,如果不一致请按照上面修改)

2.查看release是否开启了混淆,打包时选择release,并用AS查看

4.确认你的混淆文件路径正确,并且和上面基本一致(如混淆文件乱放的、不小心写错了混淆文件、复制了其他人的混淆逻辑)

由于多数博客鱼龙混杂,本博客如果让你非常满意或解决了大家的根本性问题,希望多多支持在右边点赞和回复一下,举手之劳方便大家。

转载请注明出处:王能的博客Android Proguard 不混淆所有第三方jar(忽略配置设置)_王能的小屋-CSDN博客_android 不混淆

Android Proguard 不混淆所有第三方jar(忽略配置设置)相关推荐

  1. Android Studio的使用导入第三方Jar包

    目录 Android Studio的使用导入第三方Jar包 Android Studio的使用导入第三方Jar包 sourceSets {main {jniLibs.srcDirs = ['libs' ...

  2. [ANE for Android]Java接口部分引用第三方JAR的解决办法

    来自:http://bbs.9ria.com/thread-160445-1-1.html 前几天在做Android AIR 游戏时,集成国外支付平台的接口时候遇到了这样的问题. 详细描述: 平台的支 ...

  3. Android Studio 在项目中引用第三方jar包

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {j ...

  4. android proguard 第三方jar,Android Studio代码混淆-第三方jar混淆汇总(持续更新)

    前言 Android有非常多的优秀的第三方开源jar包,我们经常在我们的项目中使用了不少jar包,但是往往到了release的时候就忘了混淆第三方jar包了,会给我们开发带来不少麻烦,所有在这里汇总一 ...

  5. android 混淆过滤,android studio 代码混淆如何忽略第三方jar包

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 最近在打包混淆时,遇到一个问题,混淆编译都不出错,运行出错,一般遇到这种问题,肯定是在运行的地方有代码被混淆了,经过错误 ...

  6. android代码混淆时,如何防止第三方jar包被混淆导致程序出错

    代码混淆是给其他人破解自己的程序带来更多困难,但混淆不能影响我们程序的正常运行.最近在代码混淆时出现一个问题:就是第三方jar被混淆时出现程序错误,错误主要是说找不到相关的类. 这个问题也不奇怪,我们 ...

  7. Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...

    为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...

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

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

  9. android so文件不混淆_Android studio 混淆打包时如何忽略依赖库中的第三方.so文件...

    如题,今天在打包项目的时候各种报错,在debug的时候没有任何问题,那么很快定位到问题所在---第三方.so文件混淆出问题了.... 项目是在AS中编译的一个module,依赖了一个以前在Eclips ...

最新文章

  1. AI先驱、A*算法发明者Nils Nilsson去世
  2. SQL基础【十、Delete】
  3. 关于在bootstrap中如何做垂直排列的tab切换效果
  4. Qt多文件传输功能实现及方法概述
  5. 【Python基础入门系列】第04天:Python 流程控制
  6. 环境试验之模拟运输试验
  7. 苹果微信更新不了最新版本_微信登录不了,微信提示版本过低,请升级最新版本的解决办法...
  8. Elasticsearch中聚合的解释及使用
  9. Can't execute code from a freed script
  10. 安卓手机的文件如何传到linux里去,如何在Linux下安装安卓文件传输助手
  11. VM安装VMTool工具
  12. 火星人现住何处?在干什么?
  13. 百度开发平台api有哪些
  14. 不同浏览器jsp开发兼容问题
  15. (Ubuntu)Firefox网页切换快捷键
  16. OSX 系统默认图标路径及修改 Mac 系统默认图标
  17. 深度学习-用PyTorch实现面部形象分类(非常详细-适合初学者)
  18. ./ts_calibrate: error while loading shared libraries: /tslib/lib/libts-0.0.s
  19. java hashbasedtable_Guava类库学习--Table(双键的Map)
  20. part time job c语言,英语面试Part-time Job篇

热门文章

  1. 网红汉字手机全屏时钟APP下载
  2. 【8.16模拟赛.7235】【洛谷P7413】[USACO21FEB] Stone Game G【博弈论】
  3. NeRF与GAN的交融(一)——NeRF论文阅读
  4. c语言是世界上最好的语言搞笑图片,C++是世界上最好的语言!不服来辩! | 爆笑囧图...
  5. java使用poi操作excel删除一整行
  6. nodejs+Vue+Elementui的校园二手旧书交易交换平台sequelize
  7. RestTemplate上传微信临时素材
  8. GT21L16S2W特殊字符计算地址
  9. 了解微信小程序、掌握微信小程序开发工具的使用、了解小程序的目录以及文件结构、掌握小程序中常用的组件、掌握WXML、WXSS、WXS的基本使用
  10. 24. bootstrap组件#折叠菜单