码迷,mamicode.com
首页 > 移动开发 > 详细

安卓代码混淆中常量的处理方法

时间:2014-08-26 09:51:35      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:代码混淆

          最近一直在研究代码混淆,其中发现一个问题,就是我们定义的一些公用的常量在代码混淆后,经过反编译,竟然完完整整的显示在我的眼前,比如服务请求地址,竟然以完整路径的形式显示在混淆后的代码中,比自己定义的还要完整,要是这样的话,代码混淆还有意义吗?当时很郁闷,不过又一想,常量肯定是不能被混淆的,若常量被混淆,1混成个2,其它地方再去引用必然会出错啊,那这怎么办呢?又想进行混淆,又不想让比较重要的常量明目张胆的显示?办法肯定是有的,只是你愿不愿去思考。我们可以对比下原项目和混淆后解压出来的项目结构,你就知道该怎么做了:
bubuko.com,布布扣 bubuko.com,布布扣

看到区别了吗,对,区别就在values文件夹,由此可以想到什么?我们可以把相关常量定义在values文件夹下的string.xml资源文件里,在代码中用getString(R.string.xxx)就可以引用了,这样反编译后的代码里,是不会再出现明文形式的常量内容了。

可能还有些童鞋不太明白到底该怎样做,现在博主说一下大致方法:

我们通常会在项目中定义一个公共类如:Const.java,其中包含了很多经常使用的常量(包括服务地址)如:

public static final String SERVER_IP = "192.168.0.1";

这种写法,经过反编译是很容易看到的,按我说的方法,应该是这样的:

	public static String SERVER_IP = "";

然后在string.xml里定义一个server_ip的值:

<string name="server_ip">192.168.8.2</string>

接着在自己项目中的Application的onCreate方法中为常量Const.SERVER_IP赋值:

 Const.SERVER_IP=getString(R.string.server_ip);


这样一来,经过反编译的代码中就看不到你的服务地址明文了,若大家有其他更好的方法,可以一起交流学习。

关于反编译的方法,已在上篇文章讲解过了,有兴趣的可以研究下。




安卓代码混淆中常量的处理方法

标签:代码混淆

原文地址:http://blog.csdn.net/baiyuliang2013/article/details/38842705

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!