替换APK文件内容后重新打包签名脚本

来源:互联网 发布:直播音效软件 编辑:程序博客网 时间:2024/05/21 09:20

由于业务需求,需要替换APK文件内容后重新打包签名,调研后发现使用JDK里提供的命令可以很方便地实现。关键命令如下:

jar -uf:替换apk文件内的某个文件或文件夹。

jarsigner:为apk文件签名

zipalign:对签名后的apk文件进行字节对齐优化

下面以替换某apk包中assets目录下的1.ini和2.ini文件,并重新打包签名优化为例,先放上脚本代码:

start.bat(windows版本)

SET KEYSTORE_NAME=.\data\signature.keystoreSET KEYSTORE_ALIAS=xxxSET KEYSTORE_STOREPASS=xxxSET KEYSTORE_KEYPASS=xxxSET INPUT_APK=.\input.apkSET META-INF=.\META-INFSET ASSETS=.\assetsSET UNSIGNED=.\output\Unsinged.apkSET SIGNED=.\output\Signed.apkSET OPT=.\output\output.apkcopy %INPUT_APK% %UNSIGNED%jar -uf %UNSIGNED% %META-INF%jar -uf %UNSIGNED% %ASSETS%@echo 替换文件完成!jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore %KEYSTORE_NAME% -storepass %KEYSTORE_STOREPASS% -keypass %KEYSTORE_KEYPASS% -signedjar %SIGNED% %UNSIGNED% %KEYSTORE_ALIAS%@echo 签名完成!del /F /Q %OPT%zipalign  4 %SIGNED% %OPT%@echo 优化完成!del /F /Q %UNSIGNED%del /F /Q %SIGNED%@echo 操作完成!@pause

start.sh(Linux版本)

#!/bin/bashKEYSTORE_NAME=./data/signature.keystoreKEYSTORE_ALIAS=xxxKEYSTORE_STOREPASS=xxxKEYSTORE_KEYPASS=xxxINPUT_APK=./input.apkMETA_INF=./META-INFASSETS=./assetsOUTPUT=./output/UNSIGNED=./output/input.apkSIGNED=./output/Signed.apkOPT=./output/output.apkcp $INPUT_APK $OUTPUTjar -uf $UNSIGNED $META_INFjar -uf $UNSIGNED $ASSETSecho Replace OK!jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore $KEYSTORE_NAME -storepass $KEYSTORE_STOREPASS -keypass $KEYSTORE_KEYPASS -signedjar $SIGNED $UNSIGNED $KEYSTORE_ALIASecho Signe OK!rm -r $OPTzipalign 4 $SIGNED $OPTecho Zipalign ok!rm -r $UNSIGNEDrm -r $SIGNEDecho Operate OK!

操作如下:

1、将apk包放在根目录下,命名为input.apk。将要替换的1.ini和2.ini文件放在assets目录下。

2、双击根目录下的start.bat(windows)或start.sh(linux or mac)。

3、待操作完成后,进入output目录即可看到生成的新apk包:output.apk。

注意事项:
1、必须安装JDK,配置好JDK的相关环境变量。
2、必须将zipalign加入到环境变量中,zipalign在Android SDK的build tool下。

3、将上述脚本里的相应参数改为实际的参数值,并在data目录下放入相应签名文件。

整个脚本执行的环境如图所示:


此外,需要在根目录下新建一个META-INF目录,并在里面放入原apk中META-INF目录对应的空文件(新建空文件并重命名为对应的名称即可),用于在重签名之前替换清空原签名文件。META-INF目录如下所示(不同的apk可能不同):


全文完!

0 0