bat脚本案例:apk自动反编译、so加固、打包、签名

需求

项目中,apk进行so文件加固时采用了顶象的技术,相关流程比较长非常麻烦,故做成脚本一键生成。

知识点

本案例中主要运用了以下技术:

  • apktool的使用
  • apksigner的使用
  • 顶象加固工具的使用
  • 实现具有用户交互的菜单界面

源码

@echo off
color 9f & title DXLockUtil V1.0.0
:menu
cls
echo ====================================================================
echo.
echo 注意事项: 
echo 1. 使用本工具前app宿主必须先集成相关依赖库并且在APP初始化时进行初始化
echo 2. 目前仅支持armeabi-v7a的so文件加固
echo 3. 请将apk的名字命名为app-release.apk放入apk文件夹中
echo 4. 由于顶象加固工具不支持中文路径,请确保本工具放在无中文、无空格的文件路径下
echo.
echo 菜单选项:
echo 请选择要进行的操作,然后按回车
echo.
echo 1.从反编译开始
echo.
echo 2.从生成证书开始
echo.
echo 3.从生成apk开始
echo.
echo 4.从apk签名开始
echo.
echo Q.退出
echo.
echo ====================================================================
echo.
:cho
set choice=
set /p choice= 请选择:
IF NOT "%choice%"=="" SET choice=%choice:~0,1%
if /i "%choice%"=="1" goto step1
if /i "%choice%"=="2" goto step2
if /i "%choice%"=="3" goto step3
if /i "%choice%"=="4" goto step4
if /i "%choice%"=="Q" goto finish
echo 选择无效,请重新输入
echo.
goto cho

:step1
echo ====================================================================
echo [Step1]: decompile apk
echo ====================================================================
if not exist apk\app-release.apk echo app-release.apk does not exist, check your operation & goto finish 
if exist out call :clean
java -jar tools\apktool_2.4.1.jar d apk\app-release.apk -o out\temp -p out\apktool
if errorlevel 1 goto finish
:step2
echo ====================================================================
echo [Step2]: generate license
echo ====================================================================
java -jar tools\dx-lock-license-generator-1.0.5.jar -a apk\app-release.apk -i out\temp\lib\armeabi-v7a\libDXLockLib.so, -o out\so\armeabi-v7a -m pro -anti_debug 0 -anti_pkg -anti_sign
if not exist out\so\armeabi-v7a\libDXLockLib.so.release goto finish
echo [Message]:create lisence success!!!
if exist out\temp\lib\armeabi-v7a\libDXLockLib.so del out\temp\lib\armeabi-v7a\libDXLockLib.so
if exist out\temp\lib\armeabi-v7a\libDXLockLib.so echo [Message]:delete so file success!!! else goto finish
copy out\so\armeabi-v7a\libDXLockLib.so.release out\temp\lib\armeabi-v7a\libDXLockLib.so
if not exist out\temp\lib\armeabi-v7a\libDXLockLib.so echo [Message]:^copy so file failed!!! else goto finish
:step3
echo ====================================================================
echo [Step3]: generate unsigned apk
echo ====================================================================
java -jar tools\apktool_2.4.1.jar b out\temp -o out\apktool\app-release-unsign.apk
if errorlevel 1 goto finish
:step4
echo ====================================================================
echo [Step4]: generate signed apk
echo ====================================================================
set version=29.0.3
:: sign apk with jarsigner
:: jarsigner -verbose -keystore tools\BBGKeyStore(noisivkih).keystore -storepass noisivkih -keypass noisivkih -signedjar out\app-release-unsign-signed.apk out\apktool\app-release-unsign.apk noisivkih
:: sign apk with apksigner
if "%ANDROID_HOME%"=="" echo [Message]: ANDROID_HOME not configed & goto finish
if not exist %ANDROID_HOME%\build-tools\%version%\lib\apksigner.jar echo [Message]: apksigner %version% not downloaded & goto finish
if exist %ANDROID_HOME%\build-tools\%version%\zipalign.exe %ANDROID_HOME%\build-tools\%version%\zipalign.exe -v -p 4 out\apktool\app-release-unsign.apk out\apktool\app-release-aligned.apk
java -jar %ANDROID_HOME%\build-tools\%version%\lib\apksigner.jar sign  --ks tools\BBGKeyStore(noisivkih).keystore  --ks-key-alias noisivkih  --ks-pass pass:noisivkih  --key-pass pass:noisivkih  --out out\app-release-signed.apk out\apktool\app-release-aligned.apk
:finish
echo [Message]:all tasks finished & pause > nul
goto :eof
:clean
echo ====================================================================
echo [Step5]: clear temp folder
echo ====================================================================
echo [Message]: cleaning temp files...
@for /r . %%a in (.) do @if exist "%%a\out" rd /s /q "%%a\out" & @if exist "%%a\temp" rd /s /q "%%a\temp"
echo [Message]: cleaning finished
goto menu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值