根據Google Play的政策要求,自 2021 年 8 月起,Google Play 將開始要求新應用使用 Android App Bundle(以下簡稱aab) 進行發布。該格式將取代 APK 作為標準發布格式。
想了解更多關于aab的介紹可以直接閱讀android官方文檔,有詳細的說明developer.android.com/guide/app-b…
但是 前提是我們沒有編譯通過的源碼,怎么辦?怎么辦?只能從apk一步步轉成aab文件了。
第一階段:準備工具
點擊下載準備工具
bundletool-all-1.18.1.jar
bundletool.jar 是google提供生成&測試aab的工具,gradle打包里面也是使用的這個工具。
獲取方式github: github.com/google/bund…
詳細文檔&使用方法: developer.android.com/studio/comm…
aapt2
aapt全稱Android Asset Packaging Tool是Android資源打包工具。
獲取方式ANDROID SDK: $ANDROID_SDK/build-tools/30.0.3/aapt2
獲取方式google maven: dl.google.com/dl/android/…
詳細文檔&使用方法:developer.android.com/studio/comm…
熟悉安卓的同學直接去build-tools 文件夾 找到自己需要的編譯的版本 復制到自己編譯的目錄文件夾就行了。
apktool_2.12.0.jar
反編譯安卓apk工具。
獲取方式github: github.com/iBotPeaches…
android.jar
android framework,提供了系統的資源和api。
獲取方式ANDROID SDK: $ANDROID_SDK/platforms/android-35/android.jar
android.jar
準備好自己的公司的簽名文件
***.jks 文件
下圖所示:
第二步:Apk 轉aab文件
:
解壓apk
1.通過apktool去解壓apk包
java -jar apktool_2.12.0.jar d test.apk -s -o decode_apk_dir
解壓apk后 decode_apk_dir 目錄結構:
編譯資源
2.編譯資源使用aapt2編譯生成 *.flat文件集合
aapt2 compile --dir "/Users/isurpass/Documents/test/decode_apk_dir/res" -o compiled_resources.zip
生成compiled_resources.zip文件
3.打包文件配置信息設置
版本信息:minSdk targetSdk versionCode verisonName
aapt2 link --proto-format -o android_test.apk -I android_35.jar \
--min-sdk-version 21 --target-sdk-version 35 \
--version-code 30 --version-name 1.0.30 \
--manifest "/Users/isurpass/Documents/test/decode_apk_dir/AndroidManifest.xml" \
-R compiled_resources.zip --auto-add-overlay
4.解壓android_test.apk ==> 需要引用里面的資源
./android_test
├── AndroidManifest.xml
├── res
└── resources.pb
5.替換資源拼接aab文件目錄:
以android_test文件夾為根目錄
創建 android_test/manifest 將 android_test/AndroidManifest.xml 剪切過來
拷貝assets , 將 ./temp/decode_apk_dir/assets 拷貝到 ./temp/android_test/assets
拷貝lib, 將 ./temp/decode_apk_dir/lib 拷貝到 ./temp/android_test/lib
拷貝unknown, 將 ./temp/decode_apk_dir/unknown 拷貝到 ./temp/android_test/root
拷貝kotlin, 將 ./temp/decode_apk_dir/kotlin拷貝到 ./temp/android_test/root/kotlin
拷貝META-INF,將./temp/decode_apk_dir/original/META-INF 拷貝到 ./temp/android_test/root/META-INF (刪除簽名信息***.RSA**、.SF、.MF)
創建./android_test/dex 文件夾,將 ./decode_apk_dir/*.dex(多個dex 編譯后代碼塊) 都要一起拷貝過來 )
android_test/manifest ============> android_test/AndroidManifest.xml
decode_apk_dir/assets ============> android_test/assets
decode_apk_dir/lib ============> android_test/lib
decode_apk_dir/unknown ============> android_test/root
decode_apk_dir/kotlin ============> android_test/root/kotlin
decode_apk_dir/original/META-INF ============> android_test/root/META-INF
decode_apk_dir/*.dex ============> base/dex/*.dex
查看目錄:
6.壓縮資源
將android_test文件夾,壓縮成android_test.zip 一定要zip格式
cd android_test && zip -r ../android_test.zip *
7.編譯aab
打包app bundle需要使用bundletool
java -jar bundletool-all-1.18.1.jar build-bundle \
--modules=android_test.zip --output=android_test.aab
8.abb簽名
jarsigner -keystore AndroidappKeyiSupper.jks \
-signedjar android_test_signed.aab \
android_test.aab key
注意 : key 是你的密鑰 別名哦!
第三步.檢測打包好的abb文件是不是可以用Apk文件。
1.執行bundletool命令 ,從 aab 生成一組 APK
java -jar bundletool-all-1.18.1.jar build-apks \
--bundle=android_test_signed.aab \
--output=android_test_signed.apks \
--ks=AndroidappKeyiSupper.jks \
--ks-pass=pass:123456 \
--ks-key-alias=key \
--key-pass=pass:123456
2.提取 apk文件:
unzip android_test_signed.apks universal.apk
對應的apk文件 : universal.apk