网站设计的主要机构有哪些?,制作介绍的网站,长治网络推广公司,重庆建设工程信息网官网安全员证书查询 在网上搜“代码混淆”关键词#xff0c;可以看到n多教程。包括本篇博客#xff0c;大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的。虽然网上都有#xff0c;但是对于我个人来说#xff0c;很难找到一篇博客概括完全的#xff0c;所以还是总结一… 在网上搜“代码混淆”关键词可以看到n多教程。包括本篇博客大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的。虽然网上都有但是对于我个人来说很难找到一篇博客概括完全的所以还是总结一下也算是学习的纪录。
首先看看代码混淆是什么。
总的来说代码混淆有两种重要功能。其一混淆代码。其二优化代码。
进行代码混淆的程序被称为代码混淆器混淆工具。进行代码混淆的意义主要在于对代码进行一定程度的加密。那么混淆器是如何进行代码加密的呢或者说混淆过的代码为什么会有加密的效果呢
首先说一点我比较坚持的观点“我们写的代码是给人看的不是给机器看的”。通常我们写代码的时候代码都需要有一定的规范而且变量名、函数名一般要能让人看到就知道是什么功能。所以当我们不进行混淆的情况下发布了一个包别人就可以通过反编译工具对包进行反编译基本还原我们的源码。这样肯定是对我们不利的。此时就需要用到代码混淆。
代码混淆的基本方法就是将我们写的易于读懂的代码等价的替换为难以读懂而逻辑正确的代码就是说机器能够运行这段代码但是一般人读不懂这段代码。这样别人反编译了我们的apk包得到的混淆后的代码看起来基本就是一堆杂乱无章、无法阅读的代码。
代码混淆的时候还会进行一些优化例如删除某些没用被使用到的代码以及简单的重组代码减少中间过程。
比较重要的一点是代码混淆并不能完全的加密代码只是提高了程序包被反编译的难度对代码起到一定的保护作用。
关于如何代码混淆的定义详情可以看这里怎么保护苹果手机移动应用程序ios ipa中的代码 | ipaguard使用教程
现在了解了代码混淆就看看如何使用代码混淆吧。
我自己用来测试的是使用cocos2d-x 3.10创建的工程其中包括了多平台的工程。测试代码混淆主要用到了其中的eclipse工程android-studio工程。通过这种方式创建的工程在文件结构方面可能和直接使用eclipse或android-studio创建的工程有略微差别但是影响不大
在android 2.3之后sdk中就已经集成了混淆器proguard目录在sdk\tools\proguard所以我们可以很方便的直接在工程中开启代码混淆。
eclipse android工程开启混淆功能我们需要手动在项目文件.properties我的是project.properties文件中添加下面的代码
To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 某些方式创建的项目中可能已经有如上两行了只是默认被注释掉了只要把proguard.config这一行解注释就好了。这样代码混淆功能就开启了在打签名包时项目会自动进行代码混淆。
对于eclipse工程来说代码混淆的规则在 proguard-project.txt 文件中我们需要根据规则去选择哪些代码需要混淆哪些代码一般我们引用的第三发jar包如果已经被混淆过就不能再混淆否则会报错。一般我们对外开放的借口不需要混淆哦不需要混淆。编写proguard-project.txt文件的规则后面介绍咯。
android-studio工程开启混淆功能我们需要在 app/build.gradle文件中添加如下代码buildTypes {debug {//启用代码混淆minifyEnabled false//混淆规则配置文件proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro//signingConfig signingConfigs.debug}release {//是否优化zipzipAlignEnabled true// 移除无用的resource文件shrinkResources true//启用代码混淆minifyEnabled true//混淆规则配置文件proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro//signingConfig signingConfigs.release}} 按照上面的配置在debug模式和release模式下build都会进行代码混淆一般为了方便调试在debug模式下不需要进行代码混淆。混淆规则配置文件与eclipse工程略有不同android-studio工程的混淆规则文件是 app/proguard-rules.pro 。虽然文件名和eclipse中的不同但是配置规则都是相同的。
自己动手配置代码混淆应该不是问题。不过我们使用代码混淆的时候可能还有一些坑例如工程中引用了很多外部的库导致代码中函数数量超过了65535混淆的时候可能会出错。此时需要分文件混淆也就是把所有的代码分成两个部分来进行混淆。这些内容后面补充吧。
还有一点比较重要的不止是Java代码可以混淆理论上来说任何代码都可以混淆只要有对应的混淆器。关于如何使用其他混淆器如何对其他语言的代码进行混淆以后了解到了再补充。。。