- 浏览: 863490 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hzw2312:
C = sin(MLatA)*sin(MLatB)*cos(M ...
根据地球上任意两点的经纬度计算两点间的距离 -
zhang_sun:
rewind方法的limit又是多少呢?等于capacity? ...
ByteBuffer的flip,clear及rewind区别 -
kalogen:
一种每次都获取到不同的随机数的办法int ranseed=12 ...
J2ME中Random类的使用 -
kalogen:
估计部署在某个端口下吧,仔细检查一下发布的配置文件
Tomcat负载均衡和集群环境的搭建 -
zhuchao_ko:
文件大点就嗝屁了~~~
Axis 1.4 上传二进制文件(base64Binary)
发apk的时候当然要考虑保护好自己的代码,Android环境就提供了ProGuard来进行代码混淆,确实是一个非常有用的工具,但用起来也确实够折腾的。
1. 基本配置
eclipse下建立android工程,就会生成proguard.cfg和project.properties,在后面的文件追加proguard.config=proguard.cfg即可让前面的配置文件在export时生效。默认的那个文件有一些内容,这里给一个更通用点的。
##—————Begin: proguard configuration common for all Android apps ———-
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable# 以下两个命令配合让类的路径给删除了
-allowaccessmodification
-repackageclasses ”# 记录生成的日志数据,在proguard目录下
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt# 异常都可以忽略就打开
#-dontwarn-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
-dontnote com.android.vending.licensing.ILicensingService-keepnames class * implements java.io.Serializable
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn’t save them.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native ;
}-keepclasseswithmembernames class * {
public (android.content.Context, android.util.AttributeSet);
}-keepclasseswithmembernames class * {
public (android.content.Context, android.util.AttributeSet, int);
}# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
public static ;
}# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}# 如果你的工程是对外提供方法调用就打开
#-keep public class * {
# public protected *;
#}##—————End: proguard configuration common for all Android apps ———-
2. 解决export打包的报错
这个时候export提示“conversion to Dalvik format failed with error 1”错误,网上说法有好多种,最后我还是把proguard从4.4升级到4.8就解决了。官方地址是http://proguard.sourceforge.net。上面的配置文件参数可以在这里查阅。
升级办法很简单,就是把android sdk目录下的tool/proguard目录覆盖一下即可。
3. 打包出来的程序如何调试
一旦打包出来,就不能用eclipse的logcat去看了,这里可以用android sdk中ddms.bat的tool来看,一用就发现和logcat其实还是一个东西,就是多了个设备的选择。
4. 使用 gson 需要的配置
当Gson用到了泛型就会有报错,这个真给郁闷了半天,提示“Missing type parameter”。最后找到一个资料给了一个解决办法,参考:http://stackoverflow.com/questions/8129040/proguard-missing-type-parameter。
另外我又用到了JsonObject,提交的Object里面的members居然被改成了a。所以上面给的东西还不够,还要加上
# 用到自己拼接的JsonObject
-keep class com.google.gson.JsonObject { *; }
我个人建议减少这些依赖包混淆带来的麻烦,干脆都全部保留不混淆。例如
-keep class com.badlogic.** { *; }
-keep class * implements com.badlogic.gdx.utils.Json*
-keep class com.google.** { *; }
5. 使用libgdx需要的配置
参考http://code.google.com/p/libgdx-users/wiki/Ant
6. 验证打包效果
我是利用了apktool的反编译工具,把打包文件又解压了看了一下,如果包路径、类名、变量名、方法名这些变化和你期望一致,那就OK了。命令:
apktool.bat d xxx.apk destdir
总结
这个东西用起来也不是很简单,特别是你程序用到的高级特性多,就更容易出问题。另外proguard的参数看起来确实也有点不好理解,打包过程慢,测试也比较浪费时间。东西虽好,但真不是那么容易上手。
发表评论
-
Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
2013-08-02 15:27 627Installation error: INSTALL_PA ... -
解决ADB server didn't ACK问题
2013-08-01 16:06 960之前运行eclipse执行android应用都没问题,今天突然 ... -
Android应用签名
2013-01-08 15:05 1325为了要签名? 开发Android的人这么多,完全 ... -
Android中图片与屏幕密度 .
2012-10-10 14:19 831在drawable中的图片在不同密度的设备上显示时,在屏幕上的 ... -
在电脑上安装Android模拟器-部分更新详解
2012-10-09 17:03 1332本文根据如下的模拟器 ... -
android 反射机制中 getMethod()和getDeclaredField()区别
2012-09-15 11:33 10323今天在程序中用到java反 ... -
android2.2 的cookie
2012-08-29 19:22 885public static void getCookies(H ... -
把第三方的jar打包到android的apk文件中
2012-08-23 16:34 2369在android项目中新建一个文件夹libs,必须用这个,不能 ... -
Android调用天气预报的WebService简单例子
2012-08-23 11:47 970下面例子改自网上例子:http://express.ruank ... -
android 正则表达式
2012-08-21 15:58 1210只能输入数字:"^[0-9]*$"。只能输 ... -
用反射功能找不到匹配的类的时候调试方法
2012-08-19 14:17 3481可以通过输出所有的methods 或者declaredMeth ... -
android 生命周期研究资料
2012-08-06 16:46 1024引言 应用程序组件有一个生命周期——一开始Android ... -
Android-----WebView使用
2012-08-01 20:06 992大部分内容为网上整理其它高人的帖子,现只作整理,用于查看: ... -
Android开发_如何调用系统默认浏览器访问
2012-08-01 19:31 977一、启动android默认浏览 ... -
Android 获取文件目录以及文件的删除 .
2012-07-14 22:24 1318//看来看一下效果 //main.xml文件 & ... -
Android Intent的几种用法全面总结
2012-07-14 14:21 857Intent应该算是Android中特有的东西。你可以 ... -
最简单的获取未安装APK文件图标、包名的方法
2012-07-13 17:14 1420package lab.sodino.fetchapkicon ... -
Android获取未安装或已安装apk的版本、图标等资源 .
2012-07-12 23:06 1467在上篇博文中介绍了Android动态加载APK--代码安装、获 ... -
Android 动态加载APK--代码安装、获取资源及Intent调用已安装apk .
2012-07-12 23:05 7080最近在研究Android动态加载APK技术,偶有小得,共享一下 ... -
android系统中 从一个apk启动另外一个apk
2012-07-12 21:24 1528Intent mIntent = new Intent(“an ...
相关推荐
Android APK和导出JAR包的代码混淆,自己实践的结果 ,很详细
Android- 记录一些解决方案 你也可以选择访问简书版 ...Android 代码混淆在AS的实践 Android webView加载网页播放优酷视频引发“请允许cookie存储”问题的解决 Android Git在bash环境和Android studio工具中的使用
这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了...
实际业务开发中有很多需要不改变原业务代码,而需额外增加一些包括各种统计的需求,如APM、无数据埋点等,也就是耳熟能详的AOP,本文以统计方法耗时为例,不使用Aspectj,采用原生态的方式进行实践。 使用者所需要做...
OWASP大数据安全PPT大全(共6个分享) 网络安全北向技术和方法探究 安全的未来是态势感知 ...Android混淆技巧与反混淆 Apache STORM日志分析探索 get来的漏洞 LTE网络环境下的业务安全保障体系 WAF漏洞挖掘及安全架构
前言 最近项目集成了Tinker,开始认为集成会比较简单,但是在实际操作的过程中还是遇到了一些问题,本文就会介绍在集成过程大家基本会遇到的主要问题。 考虑一:后台的选取 目前后台功能可以通过三种方式实现: ...
阿里安全峰会PPT合集,上下两个RAR文件,包含25个PPT 起航-远望-杜跃进 安全的未来是态势感知 -吴翰清 网络安全北向技术和方法探究-大潘 政企安全之云化、大数据化和移动化-范 渊 ...Android混淆技巧与反混淆-小波
阿里安全峰会2015PPT合集,上下两个RAR文件,包含25个PPT 起航-远望-杜跃进 安全的未来是态势感知 -吴翰清 网络安全北向技术和方法探究-大潘 政企安全之云化、大数据化和移动化-范 渊 ...Android混淆技巧与反混淆-小波
['ANDROID APP安全从入门到放弃.pdf', 'CNCERT车联网众测平台与漏洞库介绍.pdf', 'IOS URL Scheme之殇.pdf', 'OT&核心基础架构安全.pdf', 'RedTeam视角下的二进制攻防研究.pdf', 'Reflection on trusting trust.pdf'...
08.关于添加混淆代码 09.关于几个重要问题 01.该库是做什么用的 组件之间的通信,接口+实现类,使用注解生成代码方式,无需手动注册,将使用步骤简单化,支持组件间以暴露接口提供服务的方式进行通信。 02.项目组件...
7.4 更为复杂的代码处理:对Angler网马工具包的反混淆 170 7.4.1 Angler EK的特征 170 7.4.2 推理:找出代码中的“解密-执行”模式 172 7.4.3 检证:确定“解密-执行”模式的位置和方法 175 7.4.4 追踪:使用...