Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 367|回复: 0

【代码】Android如何防止apk程序被反编译

[复制链接]

该用户从未签到

发表于 2013-8-16 17:22:03 | 显示全部楼层 |阅读模式
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹
proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
(PS:新建的QQ群,有兴趣可以加入一起讨论:Android学习交流群278744577,验证:xxz
下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:
  1. view source
  2. print?01-optimizationpasses 5
  3. -dontusemixedcaseclassnames
  4. -dontskipnonpubliclibraryclasses
  5. -dontpreverify
  6. -verbose
  7. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  8. -keep public class * extends android.app.Activity
  9. -keep public class * extends android.app.Application
  10. -keep public class * extends android.app.Service
  11. -keep public class * extends android.content.BroadcastReceiver
  12. -keep public class * extends android.content.ContentProvider
  13. -keep public class * extends android.app.backup.BackupAgentHelper
  14. -keep public class * extends android.preference.Preference
  15. -keep public class com.android.vending.licensing.ILicensingService
  16. -keepclasseswithmembernames class * {
  17. native ;
  18. }
  19. -keepclasseswithmembernames class * {
  20. public (android.content.Context, android.util.AttributeSet);
  21. }
  22. -keepclasseswithmembernames class * {
  23. public (android.content.Context, android.util.AttributeSet, int);
  24. }
  25. -keepclassmembers enum * {
  26. public static **[] values();
  27. public static ** valueOf(java.lang.String);
  28. }
  29. -keep class * implements android.os.Parcelable {
  30. public static final android.os.Parcelable$Creator *;
  31. }
复制代码
从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、 ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,
并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考/examples中的例子及注释。)
让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
完整的default.properties文件应该如下:
  1. view source
  2. print?01# This file is automatically generated by Android Tools.
  3. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
  4. #
  5. # This file must be checked in Version Control Systems.
  6. #
  7. # To customize properties used by the Ant build system use,
  8. # "build.properties", and override values to adapt the script to your
  9. # project structure.
  10. # Project target.
  11. target=android-9
  12. proguard.config=proguard.cfg
复制代码
大功告成,正常的编译签名后就可以防止代码被反编译了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-12 03:55 , Processed in 0.371521 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表