美文网首页
你混淆Android代码多吗?

你混淆Android代码多吗?

作者: 磨砺营IT | 来源:发表于2016-07-19 09:07 被阅读95次

ProGuard是一个开源的Java代码混淆器。它可以混淆Android项目里面的java代码,但是不能混淆资源,实际效果是会把类名变成各种字母,变量名或者方法名字改变成abc等,这里我要说明的是代码混淆后是不能防止反编译,只是增加了代码的阅读困难度,如果真的下功夫,也是能够搞懂源代码。

下面介绍下ProGuard这个java代码的开源混淆器。

java源代码(.java文件)通常被编译为字节码(.class文件)。而完整的程序或程序库通常被压缩和发布成java文档(.jar文件)。字节码比

Java源文件更简洁,但是它仍然包含大量的无用代码,尤其它是一个程序库的时候。ProGuard的压缩程序操作能分析字节码,并删除无用的类、字段和方法。程序只保留功能上的等价,包括异常堆栈描述所需要的信息。

通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。有时,这是令人厌恶的。例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步地精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。通过以上的了解,你应该明白为什么需要混淆了。

现在Android开发绝大部分都用studio了,还在用eclipse的同学如果不是公司强制要求或者有特殊的需求,这里推荐使用Android

Studio这个谷歌官方的IDE,非常方便,下面说下在studio下混淆的方法。

只需要在build.grade 的配置文件中配置如下即可:

minifyEnabled配置为true,引入配置好的混淆文件

release {

minifyEnabledtrue

proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

混淆规则如下:

-libraryjars class_path

应用的依赖包,如android-support-v7

-keep [,modifier,...]class_specification

不混淆的类

-keepclassmembers

[,modifier,...]class_specification 不混淆类的成员

-keepclasseswithmembers

[,modifier,...]class_specification 不混淆类及其成员

-keepnames class_specification

不混淆类及其成员名

-keepclassmembernamesclass_specification不混淆类的成员名

-keepclasseswithmembernamesclass_specification不混淆类及其成员名

-assumenosideeffects

class_specification调用没有影响的情况,在proguard代码优化时会将该调用remove掉。如system.out.println和Log.v等等

-dontobfuscate 不混淆输入的类文件

-obfuscationdictionary {filename}

使用给定文件中的关键字作为要混淆方法的名称

-overloadaggressively

混淆时应用侵入式重载

-useuniqueclassmembernames确定统一的混淆类的成员名称来增加混淆

-flattenpackagehierarchy

{package_name}重新包装所有重命名的包并放在给定的单一包中

-repackageclass {package_name}

重新包装所有重命名的类文件中放在给定的单一包中

-dontusemixedcaseclassnames混淆时不会产生形形色色的类名

-keepattributes {attribute_name,…}

保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile,

Deprecated,Synthetic, Signature, and

InnerClasses.

-renamesourcefileattribute {string}设置源文件中给定的字符串常量

不能被混淆的类

在AndroidManifest中配置的类,比如四大组件

JNI调用的方法

反射用到的类

WebView中JavaScript调用的方法

Layout文件引用到的自定义View

实际使用要注意第三方库的混淆规则要看它们的官方文档,都会有混淆的说明。

本文出自微信公众号mjw-java

相关文章

  • 你混淆Android代码多吗?

    ProGuard是一个开源的Java代码混淆器。它可以混淆Android项目里面的java代码,但是不能混淆资源,...

  • ProGuard详解

    Android分享:代码混淆那些事Android代码混淆之混淆规则Android-Dev-Favorites An...

  • Android代码混淆

    待整理。。。 参考: Android混淆从入门到精通 Android代码混淆之混淆规则 代码混淆规则配置文件:pr...

  • Android Studio 代码混淆(你真的会混淆吗)

    一、前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了...

  • Android混淆

    Android 代码混淆零基础入门

  • Android app代码混淆完整解决方案

    Android app代码混淆完整解决方案

  • Android代码混淆

    什么是代码混淆 删除无用代码,将代码中的各种元素,如包名、类名、函数名、变量名等改成无意义的符号,使得反编译你ap...

  • Android代码混淆

    作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被...

  • Android 代码混淆

    代码混淆的作用代码混淆,就是把java文件在生成class文件是,类名,方法名等JAVA元素修改成没有意义的名称,...

  • Android 代码混淆

网友评论

      本文标题:你混淆Android代码多吗?

      本文链接:https://www.haomeiwen.com/subject/tqsmjttx.html