- 浏览: 203792 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (195)
- android (153)
- sqlite (1)
- java (3)
- os (4)
- tools (4)
- ResolveInfo 转 packageinf 取信息 (1)
- multimedia (2)
- fastboot (1)
- create user in samba (0)
- android qcn (0)
- windows (0)
- net (2)
- linux (1)
- git (0)
- proguard (0)
- android cpu (1)
- android gts (1)
- MySql (1)
- c/c++ (0)
- network (1)
- python (3)
- AI (1)
- Ultroedit (1)
打开混淆开关
Android.mk中经常会看到
LOCAL_PROGUARD_ENABLED := full这一句,从字面上理解,是开启混淆。如果你以为这样编译出来的apk就已经被混淆了,结果会让你很困惑。将apk里的classes.dex反编译,会看到代码仍然是混淆之前的状态,甚至连文件大小都没有变化。这行语句加不加,效果是一样的。
事实上,系统编译时,如果LOCAL_PROGUARD_ENABLED没有设置,除非环境变量中显式地定义了DISABLE_PROGUARD为true,LOCAL_PROGUARD_ENABLED默认值就是full。
参见:build/core/package_internal.mk
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(DISABLE_PROGUARD),true)
LOCAL_PROGUARD_ENABLED :=full
endif
endif那为什么混淆不起作用呢?
ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。
默认情况下,系统关闭了ProGuard的混淆功能,将其仅用于压缩。
参考build/core/java.mk
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
endif # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
proguard_flags += -dontoptimize
endif # No optimization要想将混淆开关打开,需要在Android.mk中增加:
LOCAL_PROGUARD_ENABLED := full obfuscation这时候再编译,就会看到类和方法大部分变成了a,b,c之类无意义的短变量,完成了混淆的功能。同时带来的好处是,apk的体积大约有20%的减小。
解决混淆带来的问题
问题:Warning: can’t find referenced
如果应用中有引用的第三方jar库,在编译时会有可能碰到类似
“Warning: can’t find referenced class”
之类的编译警告,导致编译失败,解决方案是要通过混淆配置文件来保留某些第三方的库不要被混淆。
首先在Android.mk中增加一行来指定混淆配置文件:
LOCAL_PROGUARD_FLAG_FILES := proguard.flags混淆配置文件依惯例命名为proguard.flags,在Android.mk同目录下建立proguard.flags,将要保持不被混淆的类或成员加进来。示例:
-dontwarn com.google.zxing.** # 消除针对com.google.zxing的所有警告
-keep class com.google.zxing.** { # 保留com.google.zxing所有类的命名
*; # 保留com.google.zxing的所有类的成员的命名
}
-verbose-dontwarn是消除警告,-keep是保留指定类和成员的命名,具体语法请参考ProGuard的语法说明,这里就不介绍了。
json序列化一个类时的要注意保留类的成员变量不被混淆
json的序列化函数会直接使用类的变量的命名,如果这个类被混淆了,会导致序列化出来的文件可读性比较差,需要在proguard.flags中将这个类的成员变量设置为保留。
From: http://blog.csdn.net/fire_up/article/details/54135167 感谢
Android.mk中经常会看到
LOCAL_PROGUARD_ENABLED := full这一句,从字面上理解,是开启混淆。如果你以为这样编译出来的apk就已经被混淆了,结果会让你很困惑。将apk里的classes.dex反编译,会看到代码仍然是混淆之前的状态,甚至连文件大小都没有变化。这行语句加不加,效果是一样的。
事实上,系统编译时,如果LOCAL_PROGUARD_ENABLED没有设置,除非环境变量中显式地定义了DISABLE_PROGUARD为true,LOCAL_PROGUARD_ENABLED默认值就是full。
参见:build/core/package_internal.mk
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(DISABLE_PROGUARD),true)
LOCAL_PROGUARD_ENABLED :=full
endif
endif那为什么混淆不起作用呢?
ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。
默认情况下,系统关闭了ProGuard的混淆功能,将其仅用于压缩。
参考build/core/java.mk
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
endif # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
proguard_flags += -dontoptimize
endif # No optimization要想将混淆开关打开,需要在Android.mk中增加:
LOCAL_PROGUARD_ENABLED := full obfuscation这时候再编译,就会看到类和方法大部分变成了a,b,c之类无意义的短变量,完成了混淆的功能。同时带来的好处是,apk的体积大约有20%的减小。
解决混淆带来的问题
问题:Warning: can’t find referenced
如果应用中有引用的第三方jar库,在编译时会有可能碰到类似
“Warning: can’t find referenced class”
之类的编译警告,导致编译失败,解决方案是要通过混淆配置文件来保留某些第三方的库不要被混淆。
首先在Android.mk中增加一行来指定混淆配置文件:
LOCAL_PROGUARD_FLAG_FILES := proguard.flags混淆配置文件依惯例命名为proguard.flags,在Android.mk同目录下建立proguard.flags,将要保持不被混淆的类或成员加进来。示例:
-dontwarn com.google.zxing.** # 消除针对com.google.zxing的所有警告
-keep class com.google.zxing.** { # 保留com.google.zxing所有类的命名
*; # 保留com.google.zxing的所有类的成员的命名
}
-verbose-dontwarn是消除警告,-keep是保留指定类和成员的命名,具体语法请参考ProGuard的语法说明,这里就不介绍了。
json序列化一个类时的要注意保留类的成员变量不被混淆
json的序列化函数会直接使用类的变量的命名,如果这个类被混淆了,会导致序列化出来的文件可读性比较差,需要在proguard.flags中将这个类的成员变量设置为保留。
From: http://blog.csdn.net/fire_up/article/details/54135167 感谢
发表评论
-
Android SnappyDB
2018-05-15 11:23 750https://blog.csdn.net/qq_214305 ... -
使用UncaughtExceptionHandler保存全局异常(转)
2018-05-07 15:04 501From: https://blog.csdn.net/dre ... -
android udp
2018-04-10 19:47 466Android之Socket的基于UDP传输 接收方创建步骤: ... -
android DownloadManager
2018-04-10 12:52 451From: https://www.jianshu.com/p ... -
Snackbar 可以交互的Toast
2018-04-08 21:44 635Snackbar 是 Android design sup ... -
android 操作串口
2018-03-19 18:20 478http://blog.csdn.net/akunainian ... -
proguard对 android-support-v4.jar 的配置
2018-03-16 15:32 597-libraryjars libs/android-sup ... -
apk 多个dex
2018-03-16 10:05 871android studio 配置应用生成多个dex ... -
ddmlib 解决android n file explorer 为空问题
2018-03-16 09:27 779百度云:http://pan.baidu.com/s/1sl4 ... -
menu item 显示icon
2018-03-07 09:32 547@Override public boolean onMenu ... -
ubuntu 脚本切换root用户,并执行其它脚本
2018-03-05 09:58 0#!/bin/bash expect -c" ... -
DrawerLayout 滑动侧边栏
2018-03-01 10:42 0// TODO -
jack-server 多用户编译问题
2018-02-27 10:44 13513),需要同时修改 $HOME/.jack-server/co ... -
更新eclipse 遇到两个问题 Oxygen.2 Release (4.7.2)
2018-02-26 14:28 11561. the file dx.jar was not load ... -
监听系统开关变化
2018-02-05 14:02 759// 转屏开关 /** * Content obse ... -
android 8.0 模块编译命令
2018-02-02 14:42 1125Invoke ". build/envsetup.s ... -
svn checkout 忽略某个文件夹
2018-01-26 11:14 1262android源码更新时, frameworks\compil ... -
eclipse jni
2018-01-19 16:10 446试过,可以运行 http://blog.csdn.net/sb ... -
opencv for android
2018-01-19 14:37 380http://blog.csdn.net/sbsujjbcy/ ... -
Cordova // TODO
2018-01-18 11:12 290Cordova提供了一组设备相关的API,通过这组API,移动 ...
相关推荐
Android代码混淆前后分析
Android代码的混淆配置,不熟悉的可以看看挺详细
Android 代码混淆,实例
高版本Android项目下的proguard-project.txt,里边包含了常规混淆,以及防止第三方混淆的代码。
Android代码混淆及签名.doc
介绍了Android代码混淆的三种方法及可能出现的问题.通过jocky或proguard实现jar包混淆;通过proguard实现Android项目整体导出混淆。并总结了一些容易出现的问题
Android代码混淆及签名.docx
Android代码混淆的使用情况分析.pdf
Android代码混淆的使用情况分析.docx
本篇文章主要介绍了Android代码混淆的写法总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
新写的proguard代码混淆的文档 大家可以看看
android 代码混淆自己目前项目所用,真实有效
Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包
Android 反编译和代码混淆里面工具和文档都很全,欢迎大家下载!
iOS代码混淆工具,Uniapp代码混淆工具,react-native代码混淆, iOS代码混淆助手,Android代码混淆助手,Uniapp代码混淆助手,过机器审核,过4.3审核,过other审核,android、ios、uniapp、u3d、cocos2dx、flutter、...
什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,...
其中包括第三方jar混淆报错及解决办法,以及普通的代码混淆办法,相信能给你帮助
Android代码混淆 1.什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。如果开启了混淆, Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三...