Android:如何防止代码被反编译

标签: android 代码 编译 | 发表时间:2014-11-23 16:54 | 作者:L_喂
出处:http://www.iteye.com

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

在工程的"default.properties"中添加这样一句话“proguard.config=proguard.cfg”
打包签名后的.apk就是混淆的,其实我们只要做一步就可以了就是在"default.properties"中添加这样一句话“proguard.config=proguard.cfg”就可以了。

如果想要更加复杂地混淆代码,可以详细地对该文件进行配置.




由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。完全避免是不可能的,总有人能够破解你的代码。但是有几种
方式来提高被反编译取代码的难度:

1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译

2 混淆java代码。混淆是不改变代码逻辑的情况下,增加无用代码,或者重命名,使反编译后的 源代码难于看懂。

    网上开源的java代码混淆工具较多,一般是用ant的方式来编译的

android 混淆文件proguard.cfg详解:

-injars  androidtest.jar【jar包所在地址】
-outjars  out【输出地址】

-libraryjars    'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】

 

-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】
-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

-keep public abstract interface com.asqw.android.Listener{
public protected <methods>;  【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}

-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

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 * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *;

转自: http://www.apkbus.com/forum.php?mod=viewthread&tid=57336



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android 代码 编译] 推荐:

Android 4.0编译源代码需要16GB内存

- coofucoo - Solidot
新一代的智能手机也许更轻更小巧,但它们的操作系统则走向另一个极端. Android 4.0 Ice Cream Sandwich(ICS)编译源代码将需要工作站内存不低于16GB,是编译Gingerbread的两倍. 如果开发者想编译ICS,他需要准备:单次构建需25GB空间,同时编译所有AOSP(Android Open Source Project)配置需要80GB空间,16GB以上内存,在二个四核处理器2.4GHz机器上完成单次构建需5+小时CPU时间,经过时间(wall time)25+分钟.

Ubunut 12.10 64位编译 android 4.2.1_r1 源代码

- - C++博客_首页
google推荐的编译环境是在Ubuntu LTS(10.04),但是最新版本12.10已经出来,没必要在旧版本上做文章了. 对于2.3.X和更新的版本,需要64位的系统,之前的老版本2.2以下(包括2.2)可以在32位版本上编译. 对于虚拟机,官网上写的虚拟机配置参数:16G RAM/swap & 30G+ 硬盘空间.

Android:如何防止代码被反编译

- - 移动开发 - ITeye博客
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹. proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用.

如何在Ubuntu上下载、编译和安装Android最新源代码

- - CSDN博客推荐文章
看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源代码了呢. 一直习惯使用Windows系统,而Android源代码是不支持在Windows上编译上,于是决定使用虚拟机安装Ubuntu,然后下载、编译和安装Android源代码.

android apk反编译

- - CSDN博客推荐文章
3.查看Jar包的GUI工具. apk文件其实就是一个MIME为zip的压缩包,可以用winrar软件打开看到里面的文件结构. 解压缩后找到里面的classes.dex文件,classes.dex文件就是java文件编译再通过Dalvik须立即提供的dx打包工具打包而成的,接下来就用2个工具来逆向导出java源文件.

android 编程代码规范

- - CSDN博客推荐文章
                学习android开发已经有很长时间了,但是有时代码却很少用规范的模式进行书写,下面就简要的总结了自己学习的代码规范. 一、关于一些常量值资源的书写规范. 颜色值有RGB和透明信息Alpha组成,以#开头, 形式有 #RGB                        #ARGB                        #RRGGBB                    #AARRGGBB.

Android APK反编译详解(附图)

- jason - iGFW
一、反编译Apk得到Java源代码. 首先要下载两个工具:dex2jar和JD-GUI. 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码. 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;解压下载的 dex2jar,将classes.dex复制到dex2jar.bat所在目录.

在Ubuntu上编译Android Gingerbread 2.3.1

- MorrisC - 易水博客
前几天下载了Android 2.3.1的源代码并在Ubuntu 10.04(32位)上编译通过. 这篇文章简要记录了下载、编译的过程. 关于搭建Android开发环境的文章已经有很多,本文只简要介绍一下,做为备忘. 这一步安装获取源代码以及编译所需要的软件,使用如下命令:. 另外,参考别人编译Android 2.3的经验,安装了下列软件包:.

ubuntu 11.04 32位编译android 4.0.3

- - CSDN博客推荐文章
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明. 这里只是记录一些日志,难免有些错误,欢迎批评指正. 这里我下载4.0.3 的源码:. 下载的速度看个人的网络,这里我下了一天一夜. 下载好之后就可以直接make -j4编译了,编译的时候用个大概3个小时,如果按照以上两个连接编译的话,除了内存不够之外的应该没有什么问题,这里我遇到的是就是内存不够.