开发SDK,使用ProGuard混淆jar包(上篇)

背景

我在目前的公司是一名Android SDK开发工程师,到公司之后就研发了自己公司的一套SDK,提供给游戏方接入。SDK最后成型是一个jar包的方式提供给游戏开发商的。所以当我们正式提供SDK给游戏开发接入的时候,是混淆一下jar包才提供出去。如果不是,就很容易被人反编译出来。从而泄露了里面程序逻辑。造成不必要的风险因素,所以今天记录一下,我混淆jar包的全过程。希望能给你们一些参考。

Jar包混淆与apk混淆区别

我们原生的Android开发,开发一个app无论是使用Eclipse还是Android Studio,在最后编译正式包的时候,都是通过配置proguard文件去进行apk的混淆,apk的混淆可以说是一体的,因为我们无需给第三方提供相应的接口。而jar包是需要给第三方提供相应功能的接入接口,所以我们的混淆规则中,需要保证这类接口不能被混淆。否则会导致接口不可用。接下来,听我一步步解释其中原由。

基本配置操作

首先,在Eclipse或者Android Studio上是无法实现对jar包进行混淆的。不过还是有工具是可以混淆jar包的,就是ProGuard!这个工具可以在你的sdk\tools\proguard\bin目录中找到。

开发SDK,使用ProGuard混淆jar包(上篇)

双击打开文件后,可以看到下图界面

开发SDK,使用ProGuard混淆jar包(上篇)

然后我们点击 Input/Output 按钮,然后我们先看一下,我最后提供给游戏的jar包目录

开发SDK,使用ProGuard混淆jar包(上篇)

在混淆jar包前,我们需要配置ProGuard

1.导入需要jar包,设置导出后jar包路径与名字

2.导入混淆jar包需要依赖的jar

3.导入必要的两个jar包,一个是Jre的rt.jar,因为我们编写的语言就是java语言,java运行基础是要在jre上。一个是android.jar,因为我们Android开发有自己的编译库,比如Fragment,Activity等都需要用到。

把上面的步骤配置好后,就有了下图

开发SDK,使用ProGuard混淆jar包(上篇)

配置基本混淆规则

完成上面的基本配置后,我们就要进入了基本的混淆规则配置。点击 Shrinking 按钮,我们需要先取消掉Shrink的勾选,因为如果勾选Shrink,工具会认为我们所有代码都是无用的,会把所有代码都压缩掉。最后导出的是一个空的jar包。

开发SDK,使用ProGuard混淆jar包(上篇)

接下来点击 Obfuscation 按钮。obfuscation的中文意思是混淆,就是说这个界面就是配置混淆规则的。首先我们需要保持四大组件不被混淆。点击右下角的 Add 按钮。就会出现如下界面,只需在Extends/implements class这一项,填写上四大组件就可以完成配置。

开发SDK,使用ProGuard混淆jar包(上篇)

配置完成四大组件还有一个Application后,界面上就多了这些配置信息

开发SDK,使用ProGuard混淆jar包(上篇)

点击 Next  按钮,接下来两个界面不需要我们怎么去配置。到了最后 Process 界面

开发SDK,使用ProGuard混淆jar包(上篇)

点击 View configuration 后可以看到你刚配置的信息

开发SDK,使用ProGuard混淆jar包(上篇)

点击 Process 按钮,开始混淆jar包。出现下面这句话,就证明了混淆成功了。

开发SDK,使用ProGuard混淆jar包(上篇)

我们打开相应的jar包,看看里面的代码。

开发SDK,使用ProGuard混淆jar包(上篇)

开发SDK,使用ProGuard混淆jar包(上篇)

到这里已经成功把jar包混淆了,但是真正能用的话,还是有一段距离的。下一篇文章,我会根据我自己研发的sdk去配置真正能提供给第三方接入的sdk。我是一名Android工程师,能开发app,也能开发SDK。我为自己加油!