前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

android如何防止apk程序被反编译 - Android面试题 - 职友集(中国最大的职位搜索引擎) 职友集是中国最大的职位搜索引擎,始于2005年 放进收藏夹 | 手机版 | 用户反馈 找工作 找公司 找工作 查工资 看趋势 职位 公司 切换地区 首页 找工作 找公司 查工资 看趋势 面试题 面试题精选: 程序员 Java 软件测试 C++ .NET C语言 网络技术 Web开发 数据库 Oracle Database工程师 Linux C# 项目管理 PHP LoadRunner 网络工程师 算法 选专业 排行榜 应届生 年终盘点 职场攻略 职友集 > 面试题 > Android面试题 > android如何防止apk程序被反编译 android如何防止apk程序被反编译 2014-01-20 06:30:02 阅读( 239 ) 赞 759人 收藏本页 标签:Android面试题 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windowsools下面多了一个proguard文件夹proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windowsoolslibproguard.cfg的内容:[html] view plaincopyprint?-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -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 -keepclasseswithmembernames class * { native ; } -keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-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-keepclasseswithmembernames class * { native ;}-keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet);}-keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet, int);}-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考/examples中的例子及注释。)让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了完整的default.properties文件应该如下:[html] view plaincopyprint?# 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 use, # "build.properties", and override values to adapt the script to your # project structure. # Project target. target=android-9 proguard.config=proguard.cfg # 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 use,# "build.properties", and override values to adapt the script to your# project structure.# Project target.target=android-9proguard.config=proguard.cfg大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的: 来自IT公司面试手册 分享给朋友: 下一篇:如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 上一篇:android面试准备 亲~ 如果您有更好的答案 可在评论区发表您独到的见解。 您想查看更多的信息: 面试题 Android面试题目推荐 常见android面试基础题 android中listview的优化 如果后台的Activity由于某原因被系统回收了,如何在被系... Android应用程序优化都有哪些需要注意的? 应聘Android开发工程师-Java笔试部分 更多» 职友集(jobui.com),中国最大的职位搜索引擎,帮助您寻找更多的就业机会 用户反馈 申请删除信息 关于: 手机版 网站导航 友情链接 开放收录 免费代码 联系我们 职业分析师 职场法规 安全求职 免责声明 特色: 应届生招聘 500强企业招聘 外企招聘 中高级职位招聘 兼职招聘 暑假工招聘 行业招聘 实习生招聘 最新信息 猎头服务 发布职位 ?jobui.com 2005- 粤ICP备05102490号 使用手机访问,非常方便m.jobui.com