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 JNI中C和JAVA代码之间的互相调用

    关于Android studio中使用NDK/JNI环境和入门:http://blog.csdn.net/quan648997767/article/details/64923143 1. C代码回调 ...

  2. Android Studio中批量注释 Java代码

    •ctrl+/ 选中需要注释的多行代码,然后按 ctrl + / 实现多行快速注释: 再次按下 ctrl + / 取消注释. •ctrl+shift+/ 选中一行或几行代码,按 ctrl + shif ...

  3. [Android Tips] 30.如何在 Android Studio 中一次性格式化所有代码

    在目录上面右击,有 Reformat Code Ctrl + Alt + L 参考 如何在IntelliJ IDEA或Android Studio中一次性格式化所有代码?

  4. 六、Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  5. 如何在Android上编写高效的Java代码

    转自:http://www.ituring.com.cn/article/177180 作者/ Erik Hellman Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架 ...

  6. Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  7. 如何在Android开发中让你的代码更有效率

    最近看了Google IO 2012年的一个视频,名字叫做Doing More With Less: Being a Good Android Citizen,主要是讲如何用少少的几句代码来改善And ...

  8. [置顶] oracle 数据库表中转换成java代码

    --数据库中字段java代码 select col.TABLE_NAME,replace(initcap(col.TABLE_NAME),'_', '')   , 'private '||decode ...

  9. Android JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

随机推荐

  1. Html5 舞动的雨伞

    HMTL5的学习断断续续,方法不用又生疏了,昨天做的一个雨伞的Demo,先看看效果 主要是运用了中心点变换和旋转两个方法.不同的动画用定时器控制, 下面是全部代码: <canvas id=&qu ...

  2. redis(二)高级用法

    redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...

  3. asp.net 验证码session为null的解决方案

    最近在做Y集团的订单系统时,登陆页面在测试时发现一个以前没有注意到的问题,登陆页面需要使用验证码,引用了一个生成验证码的aspx页面,在aspx页面中生成session和验证码图片,在登陆页面的后台处 ...

  4. iOS——CALayer的shadow无效问题

    CALayer *sublayer = [CALayer layer]; sublayer.backgroundColor = [UIColor purpleColor].CGColor; subla ...

  5. cxf restful

    Restful 服务端 1 创建好pojo.dao.service, dao进行数据库操作,service提供服务 @Path("/roomservice") @Produces( ...

  6. 自已写的Json序列化方法,可以序列话对象的只读属性

    /* * by zhangguozhan 2015/1/5 * P2B.Common.CJson.ConvertJson.ObjectToJson<SenderDomainModel>方法 ...

  7. redis数据结构整理(一)

    摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单 ...

  8. 移动h5开发资源整理

    这2年来,移动h5开发逐渐成为一种主流,也不断趋向于成熟.硬件和浏览器的不断更新,曾经的浏览器兼容也不再是开发者的噩梦. 接触h5开发一年多,从最初的新手到现在,陆陆续续遇到过很多坑.这里把想到的一些 ...

  9. vue初体验:实现一个增删查改成绩单

    前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方 ...

  10. 移动端IM开发需要面对的技术问题

    1.前言 这两年多一直从事网易云信 iOS 端 IM SDK的开发,期间不断有兄弟部门的同事和合作伙伴过来问各种技术细节,干脆统一介绍下一个IM APP的方方面面,包括技术选型(包括通讯方式,网络连接 ...