Android apk和aab互相轉(zhuǎn)換

前言:

根據(jù)Google Play的政策要求,自 2021 年 8 月起察署,Google Play 將開始要求新應(yīng)用使用 Android App Bundle(以下簡稱aab) 進(jìn)行發(fā)布梢莽。該格式將取代 APK 作為標(biāo)準(zhǔn)發(fā)布格式是偷。
想了解更多關(guān)于aab的介紹可以直接閱讀android官方文檔膘融,有詳細(xì)的說明developer.android.com/guide/app-b…
正常情況:直接Android Studio上面點(diǎn)擊打包或者用Gradle命令直接生成一個aab马昙,交給運(yùn)營提包到Google Play商店上面去茵瘾,任務(wù)完成踢关,下班~ 。
存在問題:我沒有工程库物,也沒有源碼霸旗,到我手上的就只有一個apk,走google提供的方案就不行了戚揭。
思 考:我們常做的事情是把a(bǔ)pk拿過來诱告,反編譯一下,修改修改代碼民晒,換換參數(shù)精居,然后重新打成新apk。 apk和aab都是同一個項(xiàng)目生成的潜必,代碼資源都一樣靴姿,那么可不可以相互轉(zhuǎn)化?
查資料ing.....
本文向大家介紹如何從apk一步步轉(zhuǎn)化成aab磁滚,文末提供本文所使用到的工具&python腳本源碼

需要工具

  • bundletool-all-1.6.1.jar
    bundletool.jar 是google提供生成&測試aab的工具佛吓,gradle打包里面也是使用的這個工具。
    獲取方式github: github.com/google/bund…
    詳細(xì)文檔&使用方法: 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/…
    詳細(xì)文檔&使用方法:developer.android.com/studio/comm…

  • apktool_2.5.0.jar
    反編譯安卓apk工具维雇。
    獲取方式github: github.com/iBotPeaches…

  • android.jar
    android framework,提供了系統(tǒng)的資源和api。
    獲取方式ANDROID SDK: $ANDROID_SDK/platforms/android-30/android.jar

apk生成aab

Android Studio打包可選Android App Bundle(aab)晒他,并提供詳細(xì)教程吱型,本文不再說明。

解壓apk

通過apktool去解壓apk包

java -jar apktool_2.5.0.jar d test.apk -s -o decode_apk_dir

解壓apk后 decode_apk_dir 目錄結(jié)構(gòu):

./decode_apk_dir
├── AndroidManifest.xml
├── apktool.yml
├── assets
├── classes2.dex
├── classes.dex
├── lib
├── original
├── res
└── unknown

編譯資源

編譯資源使用aapt2編譯生成 *.flat文件集合

aapt2 compile --dir decode_apk_dir\res -o compiled_resources.zip
復(fù)制代碼

生成compiled_resources.zip文件
為什么要加.zip的后綴陨仅,不和谷歌官方文檔一樣直接生成compiled_resources文件津滞,或者compiled_resources文件夾铝侵。此處為了windows能正常的編譯打包,linux和mac隨意~

關(guān)聯(lián)資源

aapt2 link --proto-format -o base.apk -I android_30.jar \
--min-sdk-version 19 --target-sdk-version 29 \
--version-code 1 --version-name 1.0 \
--manifest decode_apk_dir\AndroidManifest.xml \
-R compiled_resources.zip --auto-add-overlay

生成base.apk

解壓base.apk

通過unzip解壓到base文件夾触徐,目錄結(jié)構(gòu):

./base
├── AndroidManifest.xml
├── res
└── resources.pb

拷貝資源

以base文件夾為根目錄

創(chuàng)建 base/manifest 將 base/AndroidManifest.xml 剪切過來

拷貝assets , 將 ./temp/decode_apk_dir/assets 拷貝到 ./temp/base/assets

拷貝lib咪鲜, 將 ./temp/decode_apk_dir/lib 拷貝到 ./temp/base/lib

拷貝unknown, 將 ./temp/decode_apk_dir/unknown 拷貝到 ./temp/base/root

拷貝kotlin锌介, 將 ./temp/decode_apk_dir/kotlin拷貝到 ./temp/base/root/kotlin

拷貝META-INF,將./temp/decode_apk_dir/original/META-INF 拷貝到 ./temp/base/root/META-INF (刪除簽名信息.RSA猾警、.SF孔祸、*.MF)

創(chuàng)建./base/dex 文件夾,將 ./decode_apk_dir/*.dex(多個dex都要一起拷貝過來)

base/manifest                        ============> base/AndroidManifest.xml
decode_apk_dir/assets                ============> base/assets
decode_apk_dir/lib                   ============> base/lib
decode_apk_dir/unknown               ============> base/root
decode_apk_dir/kotlin                ============> base/root/kotlin
decode_apk_dir/original/META-INF     ============> base/root/META-INF
decode_apk_dir/*.dex                 ============> base/dex/*.dex

最終的目錄結(jié)構(gòu)

base/
├── assets
├── dex
├── lib
├── manifest
├── res
├── resources.pb
└── root

壓縮資源

將base文件夾发皿,壓縮成base.zip 一定要zip格式

編譯aab

打包app bundle需要使用bundletool

java -jar bundletool-all-1.6.1.jar build-bundle \
--modules=base.zip --output=base.aab

aab簽名

jarsigner -digestalg SHA1 -sigalg SHA1withRSA \
-keystore luojian37.jks \
-storepass ****** \
-keypass ****** \
base.aab \
******

注意:您不能使用 apksigner 為 aab 簽名崔慧。簽名aab的時候不需要使用v2簽名,使用JDK的普通簽名就行穴墅。

測試

此時我們已經(jīng)拿到了一個aab的包惶室,符合Google Play的上架要求,那么我們要確保這個aab的包是否正常呢玄货?作為一個嚴(yán)謹(jǐn)?shù)某绦騿T還是得自己測一下皇钞。

上傳Google Play

上傳Google Play的內(nèi)部測試,通過添加測試用戶從Google Play去下載到手機(jī)測試松捉。更加能模擬真實(shí)的用戶環(huán)境夹界。

bundletool安裝aab(推薦)

每次都上傳到Google Play上面去測試,成本太高了隘世,程序員一般沒上傳權(quán)限可柿,運(yùn)營也不在就沒法測試了。此時我們可以使用bundletool模擬aab的安裝丙者。

連接好手機(jī)复斥,調(diào)好adb,執(zhí)行bundletool命令進(jìn)行安裝

1.從 aab 生成一組 APK

java -jar bundletool-all-1.6.1.jar build-apks \
--bundle=base.aab \
--output=base.apks \
--ks=luojian37.jks \
--ks-pass=pass:****** \
--ks-key-alias=****** \
--key-pass=pass:******

2.將 APK 部署到連接的設(shè)備

java -jar bundletool-all-1.6.1.jar install-apks --apks=base.apks

還原成apk

竟然apk可以轉(zhuǎn)化成aab械媒,同樣aab也可以生成apk目锭,而且更加簡單

java -jar bundletool-all-1.6.1.jar build-apks \
--mode=universal \
--bundle=base.aab \
--output=test.apks \
--ks=luojian37.jks \
--ks-pass=pass:****** \
--ks-key-alias=****** \
--key-pass=pass:******

此時就可以或得一個test.apks的壓縮包,解壓這個壓縮包就有一個universal.apk纷捞,和開始轉(zhuǎn)化的apk幾乎一樣侣集。
原文作者:https://juejin.cn/post/6982111395621896229

最后總結(jié)

在此感謝37互娛的同學(xué) 因?yàn)楣居袀€需求是要能修改aab里面的部分內(nèi)容 所以我個人的思路是把別人提供的apk 拆包后修改里面部分內(nèi)容然后重新編譯后 修改重新編譯簽名成新的apk 然后通過37互娛同學(xué)提供的腳本工具 來轉(zhuǎn)換成aab 還有aab 先轉(zhuǎn)apk 然后拆包修改里面部分 重新編譯 然后再用腳本轉(zhuǎn)成aab 即可 在此感謝37互娛的同學(xué)提供方案和腳本 希望給后人多些幫助 減少被坑的概率 最后希望我的文章能幫助到各位解決問題 ,以后我還會貢獻(xiàn)更多有用的代碼分享給大家兰绣。各位同學(xué)如果覺得文章還不錯 世分,麻煩給關(guān)注和star,小弟在這里謝過啦!

腳本地址

碼云 :https://gitee.com/qiuyu123/build_aab_tool

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀辩,一起剝皮案震驚了整個濱河市臭埋,隨后出現(xiàn)的幾起案子踪央,更是在濱河造成了極大的恐慌,老刑警劉巖瓢阴,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆馒,死亡現(xiàn)場離奇詭異,居然都是意外死亡弄贿,警方通過查閱死者的電腦和手機(jī)求类,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叠穆,“玉大人少漆,你說我怎么就攤上這事∨鸨唬” “怎么了示损?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嚷硫。 經(jīng)常有香客問我检访,道長,這世上最難降的妖魔是什么仔掸? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任脆贵,我火速辦了婚禮,結(jié)果婚禮上起暮,老公的妹妹穿的比我還像新娘丹禀。我一直安慰自己,他們只是感情好鞋怀,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布双泪。 她就那樣靜靜地躺著,像睡著了一般密似。 火紅的嫁衣襯著肌膚如雪焙矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天残腌,我揣著相機(jī)與錄音村斟,去河邊找鬼。 笑死抛猫,一個胖子當(dāng)著我的面吹牛蟆盹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闺金,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逾滥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了败匹?” 一聲冷哼從身側(cè)響起寨昙,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤讥巡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舔哪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欢顷,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年捉蚤,在試婚紗的時候發(fā)現(xiàn)自己被綠了抬驴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缆巧,死狀恐怖布持,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盅蝗,我是刑警寧澤鳖链,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布姆蘸,位于F島的核電站墩莫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逞敷。R本人自食惡果不足惜狂秦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望推捐。 院中可真熱鬧裂问,春花似錦、人聲如沸牛柒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皮壁。三九已至椭更,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛾魄,已是汗流浹背虑瀑。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滴须,地道東北人舌狗。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像扔水,于是被迫代替她去往敵國和親痛侍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容