安装apktool
1.apktool 下载https://ibotpeaches.github.io/Apktool/install/
2.新建文件apktool.bat 写入下面代码
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
3.将下载apktool_x.x.x.jar 改为apktool.jar,把 apktool.bat和apktool.jar放在一个文件夹
放在任意一个盘位置,然后配置环境变量
apktool配置完成
打开cmd 命令输入apktool -version 即可查看配置环境是否成功,如果以前有配置过,请重启电脑后再输入命令查看
反编译开始
1.反编译
输入
apktool d apk文件的路径 #【C:\Users\10544\Desktop\反编译\test.apk】 反编译
反编译成功后会在apk所在文件目录下生成apk名称命名的文件
如报错下图
apktool d apk文件的路径 --only-main-classes #即可忽略错误
成功反编译生成的目录结构如下图
如何修改内容此不做详细描述了,替换 res/string 文件中的 app_name 的值可以修改app名称
2.重新打包
输入
apktool b [反编译的文件夹] #反编译时生成的以apk名称命名的文件夹
重新打包的apk在dist文件下面
此时的apk是没有签名的,无法安装使用的
3.重新对apk进行签名
1.支持v1签名: jarsigner给apk签名,只支持V1签名
jks 签名:jarsigner -verbose -keystore xxx.jks -signedjar xxx.apk(签名后的apk名字) xxx.apk(需要签名的apk) xxx(keystore别名)
2.同时使用v1和v2签名
apksigner:
这个工具位于SDK目录的build-tools目录下。必须说明的是,v2签名方式时在Android7.0后才推出的,所以只有版本>25的SDK\build-tools\中才能找到apksigner.jar。
打开cmd,把目录切到SDK\build-tools\版本号\lib下(例如E:\SDK\build-tools\25.0.2\lib
),执行
java -jar apksigner.jar sign //执行签名操作
--ks 你的jks路径 //jks签名证书路径
--ks-key-alias 你的alias //生成jks时指定的alias
--ks-pass pass:你的密码 //KeyStore密码
--key-pass pass:你的密码 //签署者的密码,即生成jks时指定alias对应的密码
--out output.apk //输出路径
input.apk //被签名的apk
示例
java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey --ks-pass pass:pp123456 --key-pass pass:pp123456 --out output.apk input.apk
验证是否签名成功
java -jar apksigner.jar verify -v my.apk
一般使用apksigner签名,防止没有v2签名无法安装apk
v2签名方法引用:https://www.jianshu.com/p/e1e2fd05bb62
查看apk信息:
aapt dump badging apk文件位置