【转】Android 编程下的代码混淆
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【转】Android 编程下的代码混淆,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4741字,纯文字阅读大概需要7分钟。
内容图文
什么是代码混淆
Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。为了防止这种现象,我们可以使用 Java 混淆器对 Java 字节码进行混淆。
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得 出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简 短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永 久丢失,这些信息的丢失使程序变得更加难以理解。
混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因, 编译后 jar 文件体积大约能减少25% ,这对当前费用较贵的无线网络传输是有一定意义的。
混淆文件 proguard.cfg 参数详解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
- optimizationpasses 5 # 指定代码的压缩级别 - dontusemixedcaseclassnames # 是否使用大小写混合 - dontskipnonpubliclibraryclasses # 是否混淆第三方 jar - dontpreverify # 混淆时是否做预校验 - verbose # 混淆时是否记录日志 - optimizations ! code / simplification / arithmetic ,! field /*,! class / merging /* # 混淆时所采用的算法 - keep public class * extends android . app . Activity # 保持哪些类不被混淆 - keep public class * extends android . app . Application # 保持哪些类不被混淆 - keep public class * extends android . app . Service # 保持哪些类不被混淆 - keep public class * extends android . content . BroadcastReceiver # 保持哪些类不被混淆 - keep public class * extends android . content . ContentProvider # 保持哪些类不被混淆 - keep public class * extends android . app . backup . BackupAgentHelper # 保持哪些类不被混淆 - keep public class * extends android . preference . Preference # 保持哪些类不被混淆 - keep public class com . android . vending . licensing . ILicensingService # 保持哪些类不被混淆 - keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native < methods >; } - keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public < init >( android . content . Context , android . util . AttributeSet ); } - keepclasseswithmembers class * { public < init >( android . content . Context , android . util . AttributeSet , int ); # 保持自定义控件类不被混淆 } - keepclassmembers class * extends android . app . Activity { # 保持自定义控件类不被混淆 public void *( android . view . View ); } - keepclassmembers enum * { # 保持枚举 enum 类不被混淆 public static **[] values (); public static ** valueOf ( java . lang . String ); } - keep class * implements android . os . Parcelable { # 保持 Parcelable 不被混淆 public static final android . os . Parcelable $Creator *; } - keep class MyClass ; # 保持自己定义的类不被混淆 复制代码 |
代码混淆的方法
根据 SDK 的版本不同有 2 中不同的代码混淆方式,以上的 proguard.cfg 参数详解中所涉及到的信息是在较低版本 SDK 下的混淆脚本,事实上在高版本的 SDK 下混淆的原理和参数也与低版本的相差无几,只是在不同 SDK 版本的环境下引入混淆脚本的方式有所不同。具体方法如下:
低版本 SDK 下,项目中同时包含 proguard.cfg 和 project.properties 文件,则只需在
project.properties 文件末尾添加 proguard.config=proguard.cfg 再将项目 Export 即可。
高版本
SDK 下,项目中同时包含 proguard-project.txt 和 project.properties 文件,这时需要在
proguard-project.txt 文件中进行如下信息的配置,然后再将项目 Export 即可。下面以真实的文件进行演示说明。
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# To enable ProGuard in your project , edit project . properties # to define the proguard . config property as described in that file . # # Add project specific ProGuard rules here . # By default , the flags in this file are appended to flags specified # in $ { sdk . dir }/ tools / proguard / proguard - android . txt # You can edit the include path and order by changing the ProGuard # include property in project . properties . # # For more details , see # http: //developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: sdk . dir = D: / Android - SDK / android - sdk proguard . config = $ { sdk . dir }/ tools / proguard / proguard - android . txt : proguard - project . txt # If your project uses WebView with JS , uncomment the following # and specify the fully qualified class name to the JavaScript interface # class : # - keepclassmembers class fqcn . of . javascript . interface . for . webview { # public *; # } |
复制代码
以上的配置信息即是 proguard-project.txt
文件中内容,蓝色文字为我们在代码混淆过程中需要添加的配置信息,其中:sdk.dir 为你在当前机器上 SDK 的安装路径,第二句配置的意思实际上是将 SDK
中代码混淆配置文件 proguard-android.txt (感兴趣的朋友可以将这个文件和上面的 proguard.cfg 文件进行对比)映射到
proguard-project.txt 作为 proguard.config 混淆设置。
声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息
原文作者: wuchao2877
原文:http://www.cnblogs.com/sunada2005/p/3591431.html
内容总结
以上是互联网集市为您收集整理的【转】Android 编程下的代码混淆全部内容,希望文章能够帮你解决【转】Android 编程下的代码混淆所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。