一)、环境配置及命令熟悉。
1:安装J AVA并设置环境变量
Java jdk下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java环境参考地址http://jingyan.baidu.com/article/e75aca85508d15142edac6b8.html
2:下载apktool 工具
Apktool下载地址 :https://ibotpeaches.github.io/Apktool/
3:对apk进行反编译
该命令用于进行反编译apk文件,一般用法为
apktool d <file.apk> <dir>
<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
<dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer,也可以不写,默认存在apktool工具所在目录下。
如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
这样就会强行覆盖已经存在的文件
如:Cmd 中切换apktool 工具所在的目录中,apktool d hello.apk(此处换成你apk 的绝对路径)
4:对反编译的apk文件进行再次打包
apktool b<dir>
这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
如:Cmd 中切换apktool 工具所在的目录中, apktool b F:\android_package\hello\dist\ hello.apk(此处放反编译的apk文件)进行打包生成apk.(此时的apk没有签名不可以安装需要再次签名)
5:对再次打包的生成的APK进行签名
Apksigner签名工具下载地址:http://apk.aq.163.com/apkpack.do#download
java -jar ApkSigner.jar [-appname test] -keystorekeystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword]apkPath(or directory)
-appname | 待签名的应用程序名,可选,但建议不同的APP填上对应的app名(可以为中文),有助于【加速】 |
-keystore | 后跟.keystore签名文件 |
-alias | 后跟签名别名 |
-pswd | 后跟对应签名的密码,例如这里是:android 可选,如果不填,则签名的时候需要手动输入 |
-aliaspswd | 对应别名 alias 的密码,如果没有则默认使用 keystorePassword |
最后跟待签名的apk路径或者目录路径,如果跟的是目录则是批量签名 |
如:对上一步打包好的apk进行签名:
java -jar apksigner.jar -appname hello -keystore F:\android_package\android-keystore -alias hello_alias -pswd hello –aliaspswd hello F:\android_package\hello \dist\hello .apk
对F:\android_package\hello\dist\hello.apk进行签名,签名后既可以在手机上安装
6:对签名后的apk进行优化(此步骤需要配置android JDK环境)
签名之后,如果需要进行对齐操作,请调用命令: zipalign -f 4 in.apk out.apk, zipalign 这个程序在 android sdk 有提供。
如:zipalign -v 4 F:\android_package\hello\dist\hello.apk hello_align.apk
二)、实战编译反编译签名过程
1):对F:\android_package目录下的hello.apk进行反编译:
进入cmd中切换目录到F:\android_package中执行
Apktool d F:\android_package\hello.apk;
在F:\android_package目录中生成对应的hello文件,
我们可以修改hello文件的资源文件及替换图片,修改渠道等操作。
此操作我们可以通过运行:F:\android_package目录下的apktool_d.bat完成。
(注意:有时可能会因为我们修改了文件后会生成对应修改文件的bak文件导致再次打包时报错,我们删除该文件就ok了)
2):对反编译后修改的hello文件进行打包
进入cmd中切换目录到F:\android_package中执行
Apktool b F:\android_package\hello
在F:\android_package\hello \dist文件中会生成一个对应的hello.apk 。此时的apk没有进行签名是无法安装到手机上,需要再次签名才可以安转。
此操作我们可以通过运行:F:\android_package目录下的apktool_b.bat完成。
3):对再次打包后生成的apk进行签名:
进入cmd中切换目录到F:\android_package中执行
java -jar apksigner.jar -appname hello -keystore F:\android_package\android-keystore -alias hello_alias -pswd hello –aliaspswd hello F:\android_package\hello \dist\hello .apk
对apk进行签名;之后会在F:\android_package\hello\dist\生成签名后的apk覆盖之前未签名的apk,此时的apk已经可以安装到手机中了。
此操作我们可以通过运行:F:\android_package\apksigner目录下的apksigner.bat完成。
4):用zipalign 对apk进行对齐优化操作:
进入cmd中切换目录到F:\android_package中执行
zipalign -v 4 F:\android_package\hello\dist\hello.apk hello_align.apk
后会在F:\android_package中生成一个hello_align.apk 的apk
到此二次打包完成。