Android 项目代码混淆

来源:互联网 发布:信息推广软件 编辑:程序博客网 时间:2024/06/13 09:08

实现Android项目代码混淆三步走战略:


一、修改工程下的project.properties文件如下:

# This file is automatically generated by Android Tools.# Do not modify this file -- YOUR CHANGES WILL BE ERASED!## This file must be checked in Version Control Systems.## To customize properties used by the Ant build system edit# "ant.properties", and override values to adapt the script to your# project structure.## 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# Project target.target=android-10proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

其中最后一行为自行添加的 混淆脚本路径,具体脚本编写在 proguard-project.txt 脚本文件内进行。

二、修改脚本文件

为什么说事修改呢? 很简单因为Google已经替我们完成了大部分功能,只需按自己需要增加规则就OK,我得 proguard-project.txt 文件如下:

# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-verbose# ignorewarnings -ignorewarnings# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {    native <methods>;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View {   void set*(***);   *** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {   public void *(android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}-keepclassmembers class **.R$* {    public static <fields>;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version.  We know about them, and they are safe.-dontwarn android.support.**# -keep class android.support.v4.**{*;}-keep class org.phprpc.**{*;}-keep class com.google.gson.**{*;}-keep class com.baidu.**{*;}-keep class com.novell.sasl.client.**{*;}-keep class org.**{*;}-keep class com.hp.hpl.**{*;}-keep class net.sourceforge.**{*;}-keep class pinyindb.**{*;}-keep class demo.**{*;}

其中因为引用第三方jar包,所以自己写了忽略混淆第三方jar包规则,如文件最后的 -keep class * , 最后在增加 -ignorewarnings 忽略警告。

三、打包签名并反编译验证

      打包后工程中会出现 proguard 文件夹,内部文件自动生成 如下:

dump.txtmapping.txtseeds.txtusage.txt

反编译验证,至于反编译具体过程请自行Baidu 、Google 编译结果如下截图:


操作期间遇到个问题:如果把脚本中这行 # -keep class android.support.v4.**{*;}  的注释去掉,反编译后无法看到类的内容,类名倒还是如上图,不知道这情况是否正常?

原创粉丝点击