这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一.反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具体步骤:
1. 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;
2. 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行
dex2jar.bat classes.dex
生成classes.dex.dex2jar.jar
3. 运行JD-GUI,打开上面生成的jar包,即可看到源代码了。
二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件
如果是只是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool,下载地址:
http://code.google.com/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
具体步骤:
1. 将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar;
2. 在命令行下定位到apktool.bat文件夹,输入以下命令:
apktool d C:\***.apk C:\***文件夹
命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里;
3. 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。
dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:
windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz
1.首先找到Android软件安装包中的classes.dex
把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
windows系统下:
在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar
Ubuntu系统下:(3楼正解!)
在终端下定位到dex2jar.sh所在目录,运行
sh dex2jar.sh classes.dex
则可生成classes.dex.dex2jar.jar
3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码
一个APK反编译利器Apktool(android汉化)
2010-07-19 18:52
转载自:http://blog.sina.com.cn/s/blog_5752764e0100kv34.html APK 本地化[http://www.andmoto.com/viewthread.php?tid=3873] 说起APK的汉化,目前大部分教程都是让用Hex Workshop或者Android ResEdit来做。但是实际操作后,就会发现: 1. apktool d "C:\LiveWallpapersPicker.apk" "C:\LiveWallpapersPicker" 复制代码 (命令行解释:apktool d 要反编译的文件 输出文件夹) <?xml version="1.0" encoding="UTF-8"?>
1. apktool b "C:\LiveWallpapersPicker" 复制代码 (命令行解释:apktool b 要打包内容所在文件夹)
操练:去掉免费版软件的广告条
[http://bbs.ophone8.net/viewthread.php?tid=18082]
打开google code发现Apktool更新了,居然支持win了。。。。 1.先装JAVA环境,JDK/JRE都行,官网下载 装过的就跳过吧 2.下载apktool.jar及相关文件,这里下apktool-1.0.0.tar.bz2 和apktool-install-windows-2.1_r01-1.zip
然后我们反编译一枚软件玩玩…
|
windows下安装APK文件到Android模拟器的方法
2010-07-20 18:29
文章转载自:http://www.cnmsdn.com/html/201003/1268078962ID1594.html 一、安装APK文件到模拟器 Android手机使用的执行文件为APK格式,类似于Windows平台的exe文件。在Android模拟器中安装APK文件有多种方法,如果你是开发人员,可以通过Eclipse+ADT,使用DDMS(Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等)可以传输文件。大多数可以直接在Windows的cmd中操作就可以了。 一、首先在Android SDK的Tools文件夹中找到emulator.exe文件并运行,这时Android模拟器就启动了, 二、 将android123.apk文件复制到Android SDK的Tools目录中,使用cmd的cd命令定位到Android 模拟器目录Tools中,执行adb install android123.apk命令,这时模拟器将会自动执行安装。 三、在Android模拟器中可以找到我们安装好的文件。 四、 用鼠标单击这个文件就可以看到程序。 写在最后我们可以发现安装Android软件到模拟器很简单,只需要执行adb install命令就可以了,当然其实我们做的是复制文件到Android模拟器的/data/app文件夹,并创建了一个快捷方式。 二、adb命令的使用 adb(Android Debug Bridge)是Android 提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态 。还可以进行以下的操作: 1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级; 2、在设备上运行shell命令; 3、管理设备或手机模拟器上的预定端口; 4、在设备或手机模拟器上复制或粘贴文件; 以下为一些常用的操作: 1、安装 应用到模拟器: adb install 比较遗憾的是,Android并没有提供一个卸载 应用的命令,只能自己手动删除 : adb shell cd /data/app rm app.apk 2、进入设备或模拟器的shell: adb shell 通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux 的命令,另外如果只想执行一条shell命令,可以采用以下的方式: adb shell [command] 如:adb shell dmesg会打印出内核的调试信息。 3、发布端口: 可以设置任意的端口号,做为主机 向模拟器或设备的请求端口。如: adb forward tcp:5555 tcp:8000 4、复制文件 : 可向一个设备或从一个设备中复制文件, 复制一个文件或目录到设备或模拟器上: adb push 如:adb push test.txt /tmp/test.txt 从设备或模拟器上复制一个文件或目录: adb pull 如:adb pull /addroid/lib/libwebcore.so . 5、搜索模拟器/设备的实例: 取得当前运行的模拟器/设备的实例的列表及每个实例的状态: adb devices 6、查看bug报告: adb bugreport 7、记录无线通讯日志: 一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录: adb shell logcat -b radio 8、获取设备的ID和序列号: adb get-product adb get-serialno 9、访问数据库SQLite3 adb shell sqlite3 10、通过gsm call命令可以像Android 模拟器打电话 ,除了在EclipseADT 的DDMS中通过按钮Dial外,还可以通过DDMS外壳调用gsm call命令直接拨打,我们首先需要启动AndroidEmulator,然后在cmd环境下执行telnet localhost 5554 下面就可以向Android模拟器 拨号,参数为gsmcall < phoneNum> ,比如给10086打电话 为gsm call +10086 |