开源Android apk转aab工具

功能

  1. 自动化将apk转为aab文件.
  2. 自动化实现打包smali,签名,安装.

用法

配置文件(config.toml )

复制代码
[sign]
#"exec command: java -jar {} build-apks --bundle {} --output {} --ks {} --ks-pass pass:{} --ks-key-alias {} --key-pass pass:{}", config.jar.bundletool_path, aab_path.to_string_lossy(), apks_path.to_string_lossy(), config.sign.keystore, config.sign.keystore_pass, config.sign.keystore_key_alias, config.sign.keystore_key_pass
keystore = "your_keystore_path/yourkeystore.jks"
keystore_pass= "your keystore password"
keystore_key_alias="your keystore alias"
keystore_key_pass="your key password"

[apk]
#"exec command: java -jar {} d {} -s -o {}", config.jar.apktool_path, config.apk.apk_path, config.apk.apk_outdir
apk_path="your_apk_path/yourapk.apk"
apk_outdir="your output dir"
#"exec command: aapt2 link --proto-format -o {} -I {} --min-sdk-version {} --target-sdk-version {} --version-code {} --version-name {} --manifest {} -R {} --auto-add-overlay",base_apk_path.to_string_lossy(), config.jar.android_jar_path, config.apk.min_sdk_version, config.apk.target_sdk_version, config.apk.version_code, config.apk.version_name,manifest_path.to_string_lossy(),res_zip_path.to_string_lossy()
min_sdk_version="21"
target_sdk_version="31"
version_code="101"
version_name="1.0.1"
#"{}_{}-sign.apk", time, config.apk.app_name
app_name="your app name"

[jar]
#"exec command: java -jar {} d {} -s -o {}", config.jar.apktool_path, config.apk.apk_path, config.apk.apk_outdir
apktool_path="your_apktool_path/apktool.jar"
#"exec command: aapt2 link --proto-format -o {} -I {} --min-sdk-version {} --target-sdk-version {} --version-code {} --version-name {} --manifest {} -R {} --auto-add-overlay",base_apk_path.to_string_lossy(), config.jar.android_jar_path, config.apk.min_sdk_version, config.apk.target_sdk_version, config.apk.version_code, config.apk.version_name,manifest_path.to_string_lossy(),res_zip_path.to_string_lossy()
bundletool_path="your_bundletool_path/bundletool-all-1.15.2.jar"
android_jar_path="your_sdkpath/sdk/platforms/android-31/android.jar"

[config]
#"exec command: adb install -r {}", apk_sign_path.to_string_lossy().to_string()
install = true
#"exec command: adb shell am start -n {}", config.config.main_activity
launch = true
main_activity = "your_package/your_launcher_activity"
#"exec command: java -jar {} build-bundle --modules {} --output {} --config={}", config.jar.bundletool_path, zip_path.to_string_lossy(), aab_path.to_string_lossy(), config.config.bundletool_config_path)
bundletool_config_path = "bundletool config file path"

[build_apk]
#"exec command: java -jar {} b {} -o {}", config.jar.apktool_path, config.build_apk.app_path, apk_unsign_path.to_string_lossy().to_string();
app_path="your smali dir"

apk转aab命令

复制代码
./abtool_cli -c config.toml -a aab

config.toml为配置文件. aab为指定将apk转为aab流程.

主要流程如下:

复制代码
  let outdir = Path::new(config.apk.apk_outdir.as_str());

    if !outdir.exists() {
        decode_apk(&config)?;
    }

    compile_resources(&config)?;
    link_resources(&config)?;
    unzip_apk(&config)?;
    copy_resources(&config)?;
    zip_resources(&config)?;
    compile_app_bundle(&config, time)?;
    let aab_name = sign_app_bundle(&config, time)?;

    if config.config.install {
        build_apks(&config, time)?;
        install_apks(&config)?;
        if config.config.launch {
            launch_app(&config)?;
        }
    }

编译apk

复制代码
./abtool_cli -c config.toml -a apk

smali工程编译成apk并签名.

主要流程如下:

复制代码
    apktool_build(&config, time)?;
    zipalign(&config, time)?;
    let apk_name = apksigner(&config, time)?;
    if config.config.install {
        install_apk(&config, time)?;
        if config.config.launch {
            launch_app(&config)?;
        }
    }

源码

  1. 编译

    cargo build -p abtool_cli --release

  2. upx压缩(可选)
    target/release

    upx --best --lzma abtool_cli

压缩后linux平台二进制文件大小在880k左右.

  1. 从源码运行

    cargo run -p abtool_cli -- -c your_config_file_path/config.toml -a aab

跨平台

目前在linux设备上完美运行,理论上已经适配了Windowsmac OS系统, 但未能拿到相关设备进行测试.

github项目地址:https://github.com/tangxuesong6/abtool.

相关推荐
青阳流月32 分钟前
1.vue权衡的艺术
前端·vue.js·开源
小小鱼儿小小林1 小时前
免费一键自动化申请、续期、部署、监控所有 SSL/TLS 证书,ALLinSSL开源免费的 SSL 证书自动化管理平台
开源·自动化·ssl
androidwork2 小时前
深入解析内存抖动:定位与修复实战(Kotlin版)
android·kotlin
三花AI2 小时前
阿里开源 OmniAvatar:音频驱动数字人模型
开源·资讯
梦天20152 小时前
android核心技术摘要
android
说私域2 小时前
基于开源AI智能客服、AI智能名片与S2B2C商城小程序的微商服务质量提升路径研究
人工智能·小程序·开源
蚂蚁数据AntData2 小时前
从性能优化赛到社区Committer,走进赵宇捷在Apache Fory的成长之路
大数据·开源·apache·数据库架构
阿里云云原生3 小时前
Spring AI Alibaba 游乐场开放!一站式体验AI 应用开发全流程
开源
NocoBase4 小时前
为什么越来越多 Airtable 用户开始尝试 NocoBase?
低代码·开源·资讯
算家计算4 小时前
4 位量化 + FP8 混合精度:ERNIE-4.5-0.3B-Paddle本地部署,重新定义端侧推理效率
人工智能·开源