Android代码混淆

这是在工程中的proguard-project.txt中发现的

#ToenableProGuardinyourproject,editproject.properties
#todefinetheproguard.configpropertyasdescribedinthatfile.
#
#AddprojectspecificProGuardruleshere.
#Bydefault,theflagsinthisfileareappendedtoflagsspecified
#in${sdk.dir}/tools/proguard/proguard-android.txt
#YoucanedittheincludepathandorderbychangingtheProGuard
#includepropertyinproject.properties.
#
#Formoredetails,see
#http://developer.android.com/guide/developing/tools/proguard.html

#Addanyprojectspecifickeepoptionshere:

#IfyourprojectusesWebViewwithJS,uncommentthefollowing
#andspecifythefullyqualifiedclassnametotheJavaScriptinterface
#class:
#-keepclassmembersclassfqcn.of.javascript.interface.for.webview{
#public*;
#}

从 脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、 ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService, 并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。) 让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了 完整的default.properties文件应该如下: #ThisfileisautomaticallygeneratedbyAndroidTools.
#Donotmodifythisfile--YOURCHANGESWILLBEERASED!
#
#ThisfilemustbecheckedinVersionControlSystems.
#
#TocustomizepropertiesusedbytheAntbuildsystemuse,
#"build.properties",andoverridevaluestoadaptthescripttoyour
#projectstructure.

#Projecttarget.
target=android-15
proguard.config=proguard.cfg


Android代码混淆,如何过滤掉反射的R文件及第三方包?
解决方案:在Proguard.cfg方件中添加以下设定:

过滤R文件的混淆:

-keepclass**.R$*{*;}

过滤第三方包的混淆:

-keepclasspackagename.**{*;}(其中packagename为第三方包的包名)

Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方包)
最近1个项目中需要导入移动MM的第三方计费包,混淆时用到了如下脚本,可屏蔽警告,不混淆第三方包指定内容。
非常有效

proguard.cfg文件

-optimizationpasses5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings//这1句是屏蔽警告,脚本中把这行注释去掉
-verbose
-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*
//这1句是导入第三方的类库,防止混淆时候读取包内容出错,脚本中把这行注释去掉
-libraryjarslibs/mmbilling.jar

-dontwarn//dontwarn去掉警告
-dontskipnonpubliclibraryclassmembers

-keeppublicclass*extendsandroid.app.Activity
-keeppublicclass*extendsandroid.app.Application
-keeppublicclass*extendsandroid.app.Service
-keeppublicclass*extendsandroid.content.BroadcastReceiver
-keeppublicclass*extendsandroid.content.ContentProvider
-keeppublicclass*extendsandroid.app.backup.BackupAgentHelper
-keeppublicclass*extendsandroid.preference.Preference
-keeppublicclasscom.android.vending.licensing.ILicensingService
-keepclasseswithmembernamesclass*{
native<methods>;
}
-keepclasseswithmembernamesclass*{
public<init>(android.content.Context,android.util.AttributeSet);
}
-keepclasseswithmembernamesclass*{
public<init>(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembersenum*{
publicstatic**[]values();
publicstatic**valueOf(java.lang.String);
}
-keepclass*implementsandroid.os.Parcelable{
publicstaticfinalandroid.os.Parcelable$Creator*;
}

//这4句是不混淆第三方包中的指定内容,脚本中把这行注释去掉-keepclasscom.ccit.**{*;}
-keepclassccit.**{*;}
-keepclasscom.aspire.**
-keepclassmm.vending.**

更多相关文章

  1. Android通过HttpURLConnection上传多个文件至服务器 - 流传输
  2. Android写文件到SDCard的一般过程和代码
  3. android的ant脚本自动生成模板
  4. Android 获取本地音乐文件
  5. Android播放在线音乐文件
  6. 文件读写
  7. Android读取Txt文件
  8. android 不使用布局文件,完全由代码控制布局实例

随机推荐

  1. Android(安卓)判断应用 第一次安装启动
  2. android线程池原理和实现
  3. android之Android类装载器DexClassLoader
  4. 转:android ro.debuggable属性调试修改(mp
  5. android
  6. react-native 之与"android原生模块"交互
  7. Android(安卓)开发模式:mvp+retrofit2+rxj
  8. 【Android】ExpandableListView二级列表
  9. Android自动打包、签名、优化、上传ANT脚
  10. android View绘制流程与机制