android代码混淆以及怎么判断一个apk代码是否被混淆过

 我来答
lzwgy1
2016-09-09 · TA获得超过6.6万个赞
知道大有可为答主
回答量:6460
采纳率:54%
帮助的人:1435万
展开全部
1、proguard原理
java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:
一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆

二、删除无效的代码

三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)

缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。
一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)

二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂

三、java元素名称是配置文件中配置好的

所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。

2、proguard配置

-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。

-keep指定的类和类成员被保留作为入口

-keepclassmembes指定的类成员被保留。

-keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式