Java Classes字节码的反编译太容易了,有很多功能强大的反编译利器可以轻松的将Java字节码

反转为源代码,但是android中普通.apk文件可以轻松的被反编译为Java源代码吗?

答案是当然可以,而且是相当的轻松,具体步骤如下:

1.       选择你要反编译的.apk文件, 如果它在你的Android手机里面怎么办

参考这里 –>http://blog.csdn.net/jia20003/article/details/5293958

2.       本质上.apk文件只是zip格式的压缩文件,因此你可以用WinZip,一个比较好用的工具是7-zip

打开.apk文件,网上可以download到7-zip

3.       网上随便找了一个android的应用,打开apk文件结构应该如下:

res文件里面放置都是主要包括layout,drawable等子文件夹已经里面的xml文件

META-INF主要记录资源列表和各自对应的二十字节SHA1-Digest的Key用来保护.apk文件,

不能通过非build修改和内容替换。最感兴趣的应该是classes.dex文件,这个就是我们要反编译的对象。

4.       把classes.dex文件copy到本地,使用google提供的开源工具dex2jar

在windows命令行中输入如下:dex2jar.batxxx.apk 成功执行以后你就发现多了一个对应apk

文件的jar文件

5.       然后从jar文件到java源代码,相信没有人觉得是难事了。

看到自己辛辛苦苦开发出来的Android应用如此快的被别人反编译和copy源代码,相信很多开发者要吐血了,不过只要我们稍微加点改变,想要这么轻松的读懂classes.dex文件反编译出来的文件也许就没那么容易了,基于Java的代码混淆器ProGuard已经通过了对Android中Java应用的代码保护,而且google已经把它集成在android的开发环境中,但是很多时候都被大家无视!

第一步:启用ProGuard

找到android项目default.properties文件在里面加入proguard.config=proguard.cfg

第二步:配置ProGuard

有时候ProGuard会根据情况remove掉一些它认为没有用的class而实际上这些class仍然被使用,这些情况包括以下几种:

- Class只在AndroidManifest.xml文件中被引用

- 通过JNI的方法调用

- 通过反射动态被引用的方法和域值

当你得到ClassNotFoundException之类的错误的时候,你就应该意识到要自己配置了:

-keep public class <myclass> 更多的参数选项可以参考ProGuard官方文档。

参考引用:

http://developer.android.com/guide/developing/tools/proguard.html

http://code.google.com/p/dex2jar/

Android应用中如何保护JAVA代码相关推荐

  1. android开发使用c+_如何在Android项目中开始使用C ++代码

    android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...

  2. 常见的5种方式看保护java代码(java混淆器)

    在java代码中往往包含着一些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就摆在了java开发人员的面前 ...

  3. Android Studio中打开R.java文件的方法

    1 R.java文件简介 Android Studio中的R.java文件自动收录当前应用中所有的资源,并根据这些资源建立响应的ID,可以把R.java当成Android应用的资源字典.R.java文 ...

  4. 【unity】与Android Activity交互并调用JAVA代码传递参数

    http://www.xuanyusong.com/archives/667 Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以 ...

  5. android studio 中怎么写aspectj代码,Android Studio 使用 AspectJ 实践AOP

    Android Studio 官方暂时不支持aspectJ,不过这里用的一款gradle插件 aspectjx 配置在project的build.gradle里配置插件dependencies { c ...

  6. matlab中调用java代码_Matlab中调用第三方Java代码

    在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...

  7. Android Studio编写运行测试纯java代码可带main()函数

    问题 小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确.刚开始的时候我是在页面上写一个Button,添加点 ...

  8. java将图片放进mysql中_在java代码中怎么从服务器上把图片拿来放到数据库里

    展开全部 看你用的是么数据库,一般是读取后转e68a84e8a2ad3231313335323631343130323136353331333431346430成二进制blob格式存入数据库的BLOB ...

  9. android系统模拟麦克风,在Android模拟器中使用麦克风(Java Android初学者)

    在 Android模拟器中使用麦克风的 I READ HERE可能是可能的,所以我决定尝试一下(尽管 THIS QUESTION的答案说它不可能) 我复制/粘贴了 ANDROID DEVELOPERS ...

最新文章

  1. 【 全干货 】5 分钟带你看懂 Docker !
  2. Powershell记录2
  3. Zookeeper简介/快速入门——特别详细
  4. ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
  5. php 获得当月时间戳,php获取当前月与上个月月初及月末时间戳的方法
  6. menuetos oracle,使用DistroTest服务免费在线测试Linux和Unix操作系统
  7. 风起云涌时,亦是光芒四射时 | LiveVideoStackCon 2020线上峰会日程全公开
  8. python多进程打印字符,加锁(Lock加锁)
  9. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
  10. rgb红色范围_【论文阅读18】RGB-D Object-Oriented Semantic Mapping
  11. Windows Phone(wp7)系统长按的秘密
  12. Oracle实现数据不存在则插入,数据存在则更新(insert or update)
  13. 单片机c语言三角波采样点,单片机课程设计---信号发生器.doc
  14. 飞驴更新纪录,一定超过他。
  15. 桌面计算机里没有桌面显示不出来怎么办,电脑桌面显示不出来图标 所有软件都可以正常工作 怎么解决?...
  16. 一文读懂图像局部特征点检测算法!
  17. linux find查找时间段文件,查找某个时间段的文件和find命令
  18. Ubuntu 18.04 安装后的美化与软件安装
  19. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  20. 基于tkinter+win32+pynput实现python的QQ微信刷屏(比某些文章稍微高级一点)

热门文章

  1. 遇到一个由于事务控制不当造成错误的Bug
  2. Loj #3111. 「SDOI2019」染色
  3. 加密软件究竟有哪些作用呢?
  4. 基于JWT(Json Web Token)的ASP.NET Web API授权方式
  5. IOS 开发之-- textfield和textview,return键的改变,点击return键
  6. centos 6.8 64B mini origin vm file
  7. Tomcat虚拟目录配置
  8. .NET防SQL注入方法
  9. vue this.$router.push()传参
  10. 在Fabric ChainCode中导入第三方包(以状态机为例)