Android代码混淆的实践

Android代码混淆的实践,第1张

概述  开发apk的时候当然要考虑保护好自己的代码,Android环境就提供了ProGuard来进行代码混淆,确实是一个非常有用的工具,但用起来也确实够折腾的。

  开发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的参数看起来确实也有点不好理解,打包过程慢,测试也比较浪费时间。东西虽好,但真不是那么容易上手。

总结

以上是内存溢出为你收集整理的Android代码混淆的实践全部内容,希望文章能够帮你解决Android代码混淆的实践所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1149093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存