前言
本文记录一使用Android studio 混淆的使用,这里以打包aar为例。
正文
AS中创建一个library模块,这里假设为SkinLib
打开混淆配置
/SkinLib/build.gradle中,打开混淆配置,这里只配置了release的混淆,debug版本是没有配置的,如果你想都配置也可以的。
android {
//略...
buildTypes {
release {
minifyEnabled true //默认为false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//略...
}
配置混淆规则
/SkinLib/proguard-rules.pro
如果没有就创建
下面是简单配置的规则,可以实现我的需求,只暴露出接口,其他的都混淆了。
#保留所有具有公有访问权限的类和其公共成员不被混淆(可以代替上面所有的keep语句,彻底将误删的概率降到最低)
-keepclasseswithmembers class com.biumall.skin.SkinActivity{
public *;
protected *;
}
class com.biumall.skin.SkinActivity 是我需要暴露的接口,其他的可以不让对接人知道。
PS: protected 的方法(或者函数)混淆后会默认变成public
其他的混淆规则,我摘抄的
#保留所有具有公有访问权限的类和其公共成员不被混淆(可以代替上面所有的keep语句,彻底将误删的概率降到最低)
-keepclasseswithmembers class com.biumall.skin.SkinActivity{
public *;
protected *;
}
#指定不压缩的类文件,默认压缩。除各种-keep选项列出的类以及它们直接或间接依赖的类之外,所有类和类成员都将被删除。
#在每个优化步骤之后也会压缩,因为某些优化后可能会有更多类和类成员可以被删除。
#-dontshrink
#保持哪些类不被混淆
#-keep public class * extends androidx.appcompat.app.AppCompatActivity
#-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 class com.biumall.skin**{*;}
#保持该路径下所有的类都不被混淆
#-keep class com.biumall.skin.SkinActivity{
# protected void switchSkin();
# protected boolean openChangeSkin();
#}
# 代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改
#-optimizationpasses 5
# 混淆时不使用大小写混合,混淆后的类名为小写
# windows下的同学还是加入这个选项吧(windows大小写不敏感)
#-dontusemixedcaseclassnames
# 指定不去忽略非公共的库的类
# 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用,此时就需要加入此条声明
#-dontskipnonpubliclibraryclasses
# 指定不去忽略非公共的库的类的成员
#-dontskipnonpubliclibraryclassmembers
# 不做预检验,preverify是proguard的四个步骤之一
# Android不需要preverify,去掉这一步可以加快混淆速度
#-dontpreverify
# 保持自定义控件类不被混淆
#-keepclasseswithmembers class * {
# public <init>(android.content.Context, android.util.AttributeSet);
#}
# 保持 native 方法不被混淆
#-keepclasseswithmembernames class * {
# native <methods>;
#}
#如果有引用v4或者v7包,需添加
#-keep public class * extends android.support.v4**
#-keep public class * extends android.support.v7.**
#混淆第三方jar包,其中xxx为jar包名
#-libraryjars libs/xxx.jar
#不混淆某个包内的所有文件
#-keep class com.biumall.skin.*{*;}
#忽略某个包的警告
#-dontwarn com.xxx**
#不混淆泛型
#-keepattributes Signature
#不混淆Serializable
#-keepnames class * implements java.io.Serializable
# 保持 Parcelable 不被混淆
#-keep class * implements android.os.Parcelable {
# public static final android.os.Parcelable$Creator *;
#}
上面大部分注释了,需要的可以自己放开,如果还不满足,可以看下面参考文章。
开始打aar包
在Android Studio右侧,打开gradle功能项,选择需要打包的module,因为需要打混淆的aar包,所以执行assemble这个task,点击执行即可,具体如下图[图片来源于参考文章一]
生成的aar包路径在当前module的build/outputs/aar文件夹下,存在两个,以下是我的:
SkinLib1-debug.aar
SkinLib1-release.aar
- SkinLib1-debug.aar是未混淆的
- SkinLib1-release.aar是混淆了的,给客户或其他就用这个版本即可
参考文章
- 《Android Studio 打带混淆得aar包_zone_q的博客-CSDN博客》
- 《Android Studio实现代码混淆_gordon001的博客-CSDN博客_android studio 混淆》
- 《Android Studio 打包APK代码混淆(采坑总结)_吕氏春秋i的博客-CSDN博客》
历史上的今天
暂无评论...
随机推荐
Android 内存优化等记录
前言记录一下内存相关的内容正文Java虚拟机Java虚拟机是一台“抽象的计算机”,它拥有自己的处理器,堆栈,寄存器以及相应的指令系统。Java虚拟机疲敝了与操作系统相关的平台信息,使得Java程序只需要生成该虚拟机上运行的目标代码,就可以在多个平台上运行。JVM运行时数据区域分为两个部...
android导出ANR日志
查看是否存在anr日志#查询ANR目录是否存在adb shell ls data/anr/#下面是ANR中的问题件binderinfomediaplayerinfomtk_traces.txtnative1.txtnative1_1.txtnative2.txtnat...
顾城:远和近
你一会看我一会看云 我觉得你看我时很远你看云时很近
JNI动态注册封装C语言版
前言在上一篇《JNI调用Java方法》的动态注册并调用Java方法,上次也说了可以把公共部分封装一下。说干就干,今天就把上次代码封装一下。正文我这不介绍完整的动态注册,有需要可以看《JNI动态注册》。这里只是个人流水账。Hello.javapackage com.biumall.dyn...
舒婷:初春
朋友,是春天了驱散忧愁,揩去泪水向着太阳微笑虽然还没有花的洪流冲毁冬的镣铐奔泻着酩酊的芬芳泛滥在平原、山坳虽然还没有鸟的歌瀑飞溅起万千银珠四散在雾蒙蒙的拂晓滚动在黄昏的林荫道但等着吧一旦惊雷起乌云便仓皇而逃那是最美最好的梦呵也许在一夜间辉煌地来到 是还有寒...
林夕:赏味期限
那还是你和好友说着想要去很多很多地方的年纪。你踢踢踏踏地在走廊里面一边走一边数着自己到底想去多少个地方,好友跟在你的后面臭着一张脸喊,好高骛远的家伙,离开这里看谁天天陪你。你转身去拉她的手,笑得相当谄媚,说你可以陪我一起去呀。好友摇着手告诉你去去去,先把英文考及格了再说吧。所谓好友到底可以好成...