1.首先创建一个文件夹repack,用来存放接下来需要实现的内容
2.这里以替换apk的assets目录中的文件为例进行说明:
(1)创建一个assets目录,将要替换的文件拷贝到该目录里,文件夹目录结构需要和原始apk中的目录结构一致;
(2)将签名文件放到data文件夹中;
(3)创建一个output目录用来存放替换完成后最终生成的apk
(4)下面就是最重要的一步了,写脚本,新建一个脚本文件repack.bat;
最终的文件结构如下图所示:
脚本文件如下:
@echo off
SET KEYSTORE_NAME=.\data\xxx.jks
SET KEYSTORE_ALIAS=xxx
SET KEYSTORE_STOREPASS=1234
SET KEYSTORE_KEYPASS=1234
SET ASSETS=.\assets
set UNSIGNED=.\output\unsinged_
SET SIGNED=.\output\repack_
set ZIP_ALGIN=.\output\zipalign_
FOR %%i IN (*.apk) DO (
@echo start %%i
if exist %UNSIGNED%%%i del /F /Q %UNSIGNED%%%i
if exist %SIGNED%%%i del /F /Q %SIGNED%%%i
if exist %ZIP_ALGIN%%%i del /F /Q %ZIP_ALGIN%%%i
copy %%i %UNSIGNED%%%i
@echo replace file...
@REM 以下命令只能替换或新增文件,不能删除apk中原有的文件
jar -uf %UNSIGNED%%%i %ASSETS%
@echo replace file Completed !
@echo zipalign...
@REM 对齐优化
zipalign 4 %UNSIGNED%%%i %ZIP_ALGIN%%%i
@echo zipalign completed !
@echo apksigner...
call apksigner sign --ks %KEYSTORE_NAME% --ks-key-alias %KEYSTORE_ALIAS% --ks-pass pass:%KEYSTORE_STOREPASS% --key-pass pass:%KEYSTORE_KEYPASS% --out %SIGNED%%%i %ZIP_ALGIN%%%i
@echo sign Completed !
del /F /Q %UNSIGNED%%%i
del /F /Q %ZIP_ALGIN%%%i
@echo All Completed !
@echo output: %SIGNED%%%i
)
@pause
2. 原始的apk文件放在repack目录中,支持多个apk批量替换
3. 将要替换的文件放到repack\assets目录中,如果是替换其他文件,则将文件放在相应的目录即可
3. 双击执行repack.bat,等待脚本正确执行完成
4. 脚本执行完成后,生成的apk文件输出到repack\output目录中
注意:
脚本中使用了jar打包和apksigner签名命令,需要配置好JDK和apksigner的环境变量
apksigner的位置在api>=25的SDK中,例如SDK\build-tools\29.0.2\apksigner.bat