反编译工具:
- dex2jar 这个工具用于将dex文件转换成jar文件
下载地址:http://sourceforge.net/projects/dex2jar/files/ - jd-gui 这个工具用于将jar文件转换成java代码
下载地址:http://jd.benow.ca/
- apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。
下载地址:http://ibotpeaches.github.io/Apktool/install/
解压apk文件后发现classes.dex文件CMD到该目录下执行
d2j-dex2jar classes.dex
会生成classes-dex2jar.jar文件,用jd-gui打开即可看到反编译后的代码
反编译资源文件CMD执行:
apktool d Demo.apk
可以看到各个资源文件和smail文件,smail文件是主要的java文件,语法类似于汇编语言,是Android虚拟机所使用的寄存器语言
对反编译后的文件重新打包:
apktool b Demo -o New_Demo.apk
重新签名:
SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名
签名之后的APK文件现在已经可以安装到手机上了,不过在此之前Android还极度建议我们对签名后的APK文件进行一次对齐操作,因为这样可以使得我们的程序在Android系统中运行得更快。对齐操作使用的是zipalign工具,该工具存放于<Android SDK>/build-tools/<version>
目录下,将这个目录配置到系统环境变量当中就可以在任何位置执行此命令了。命令格式如下:
zipalign 4 New_Demo.apk New_Demo_aligned.apk
反编译:
@echo off
set FILE=%1
set EX=%FILE:~-4%
if "%EX%"==".apk" (goto work) else (echo 这不是apk文件&pause)
pause
:work
java -jar apktool.jar d %1 %2 %3 %4 %5 %6
打包:
@echo off
java -jar apktool.jar b %1 %2 %3 %4 %5 %6
打包并签名:
@echo off
set IN_DIR=%1
set FILE=%IN_DIR%_new.apk
java -jar apktool.jar b "%IN_DIR%" %2 %3 %4 %5 %6
for /f "delims=" %%i in ('dir /b /s /od "%IN_DIR%\dist\*.apk"') do (set IN_FILE=%%i&goto work)
echo 没有找到apk文件,打包失败
exit
:work
echo 复制apk
copy /Y "%IN_FILE%" "%FILE%"
call 签名 "%FILE%"
pause