
【HarmonyOS】代码混淆之@Keep 原创 精华
一、背景介绍
最近在社区问答中看到有人提问,请问鸿蒙中有没有@Keep注解。我作为一个从Android开发中转型过来的人,对此问题就产生的特别的兴趣,并激发了我那颗求知欲望极强的好奇心。
经过一番研究,弄懂了Android开发中的@Keep注解来源和原理,已经实验的成功,就产生了这边文章,探索怎么在HarmonyOS应用开发中,使用@Keep注解来管理代码混淆。
二、@Keep注解来源
@Keep注解是Android开发support包中提供的一个注解工具类,这个注解工具类是用纯java annotation特性写的。@Keep因是java注解的一个特性工具类,原则上是只和java相关,不依赖于Android任何东西。
在鸿蒙的java应用开发中,DevEco Studio工具中的代码混淆操作,也是使用的和Android Studio工具一样的代码混淆工具ProGuard,而且都是基于Gradle语法编译。
综合上面所讲,所以我就大胆的预测,Android support下的@Keep注解包,在鸿蒙应用开发中也是可以直接使用的。
三、验证猜测结果
既然有了预测结论,那就大胆实验验证。从Android开发环境中,把androix库中的annotation-1.0.0.jar包拷贝出来。
-
将annotation-1.0.0.jar包文件导入到鸿蒙工程entry的libs目录下面,作为第三方库使用。
-
修改entry工程的build.gralde文件的混淆配置,proguardEnabled属性改为true,开启工程代码混淆功能。
-
修改proguard-rules.pro混淆配置规则文件,添加如下混淆规则。将@Keep注解类加入规则中。
-
修改代码,使用@Keep注解标记类、属性和方法。
-
构建代码,查看编译出来的class文件混淆信息。结果验证了猜测的准确性,被@Keep标记的类、属性和方法都没有被混淆。
四、@Keep分离
尽管使用androidx的annotation包可以达到使用的效果,秉着和Android系统分离的原则(免得又被人抓住证据说是鸿蒙套壳Android),以至于需要依赖Android的库文件,我就自己重写了一下@Keep注解,并做成了开源库,取名ohosx-annotation,并把代码开源到码云Gitee上,这样子就可以独立使用@Keep注解了,也避免了使用androidx库引入一大堆不需要的库文件。
ohosx-annotation库的使用方法很简单,和上述验证步骤一样,只是导入@Keep注解jar包库的方式修改一下就可以了,引入方式如下:
-
在项目根目录的build.gradle添加中央仓库
-
在module(如:entry)的build.gradle引用
-
proguard-rules.pro文件中的混淆规则修改一下Keep注解的包名。
五、总结
一次问答,一次探索,就诞生了一个新的鸿蒙开源库。
