最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

什么是Proguard Android?

Android 太平洋学习网 浏览 评论

Android Proguard

为什么要用 Proguard

什么是 Proguard

如何使用 Proguard

来使用 Proguard 吧

Response 被 Proguard 混淆了!

s

当开发者好不容易写出一 APP,你不会想要有人拿到这个 APP 之后,使用一些手段将裡面的 “原始码” 或者 “key” 看光光吧!


Proguard 可以帮你做到这点。


流程大致上长这样:


Code -> Proguard -> APK


什麽是 Proguard

详细的 Proguard 可以看官网: https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/introduction.html



Input jars:开发者写的 code。


Library jars:开发者引用 Library 的 code ( Ex : okHttp …)。


Shrunk:会移除不必要的 reference ( ex : drawable 的图片档在 Java 会有一个 R class 去 mapping 这些 resource,如果没用到这个 resource proguard 会移除这些 reference)。


Optim:移除没有用到的 code 或者将一些 方法 变成 inline。


Obfuse:混淆程式码,Ex:有一个 class Data,混淆后会变成 class a,此阶段还会破坏 package 的阶层架构。


如何使用 Proguard

其实 Android Studio 在 Module level 的 gradle 已经加入 proguard 了。

image.png

只不过这是在 release 才会使用到,如果想要测试可以在 buildType 加入 proguard。

image.png

minifyEnabled:设定要不要 混淆 code。


shrinkResources:设定要不要 Shrunk code,minifyEnabled 要设定 true,此 flag 才有效 ( 尚未验证 )。


来使用 Proguard 吧

现在我有一个 MyResponse 的 class

1646359310(1).png

印出此 class 的信息

image.png

如果使用proguard则会混淆名称

image.png

如果没有使用 Proguard 则会将名称包括 package 的层级都印出来

image.png

Response 被 Proguard 混淆了!

有时后端回传的是 Json 格式的 file,那麽要透过 Gson… 之类的第三方套件帮我们把 Json 转换成 “物件”,但是因为 class 被 proguard 混淆了,导致 Gson 在转换 Json 的过程中找不到 class,那该怎麽办呢?


设定不要混淆特定 package 就好啦!


有两种方式


第一种使用 annotation 的方式去宣告哪一个 class 不要被混淆

@Keep
class MyResponse{
.....
}

另一种方式 在 proguard-rules.pro 设定那些档案不要被混淆

image.png

设定 com.jamesTech.rollDice 这个 package 底下的 class 不要被混淆

image.png

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/1151.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论