Play Asset Delivery實踐篇 (踩坑—2021.11.27修改)

閑聊

最近一段時間坞靶,開始負責一個游戲項目安卓SDK對接工作,又是熟悉的味道還是那個配方传货。從游戲研發(fā)邊緣成員折騰回安卓SDK對接工作中(再次入坑)晃跺。

馬上快8月了Google 上架游戲政策又發(fā)生變化,手中對接游戲主要發(fā)往海外也糊。所以Google的要求我們還是要滿足的炼蹦。想想發(fā)往國內(nèi)的游戲渠道,真是幸福狸剃。

廢話說完掐隐,進入今天正題。針對Google 8月份新規(guī) 游戲這塊需要作出調(diào)整以應(yīng)對新規(guī)钞馁,正好做個記錄虑省,以踩坑者的角度去記錄一下過程。

1.png

上架Google時間軸

開發(fā)者應(yīng)該著重關(guān)注8月份起新政策僧凰。新應(yīng)用8月份上架Google Play 強制API>=30探颈,老應(yīng)用截止11月份前強制API >=30。同理训措、同樣的操作還有 Play結(jié)算庫要升級到3.x+版本才被允許上架商店伪节。可參考另一篇博客Google Play-v4.0結(jié)算庫

8月起光羞,新應(yīng)用需要使用 Android App Bundle 才能在 Google Play 中發(fā)布。對于超過150MB的新應(yīng)用怀大,谷歌提供兩種方式供大家使用纱兑,分別是Play Feature DeliveryPlay Asset Delivery

Google時間軸.png

Android App Bundle 簡介

Android App Bundle 是官方提供一種新發(fā)布格式(后綴.aab),其中包含應(yīng)用的所有經(jīng)過編譯的代碼和資源。 APK 生成及簽名全部交由 Google Play 來處理化借。

Google Play 會根據(jù)你上傳的 App Bundle,針對每種設(shè)備生成配置潜慎,并提供經(jīng)過優(yōu)化的 APK,因此只會下載特定設(shè)備所需的代碼和資源來運行你的應(yīng)用屏鳍。

你可以不必再構(gòu)建勘纯、簽署和管理多個 APK 來優(yōu)化對不同設(shè)備的支持,而用戶也可以獲得更小且更優(yōu)化的下載文件包钓瞭。

上傳 app bundle 時驳遵,如果 Play 管理中心發(fā)現(xiàn)應(yīng)用下載大小超過 150MB會收到如下錯誤提示(我不死心,已經(jīng)大膽的試了一下山涡〉探幔看官們就別在試水了)

2021719-135639.png

有一點需要注意,超過150MB的應(yīng)用鸭丛。 Android App Bundle 不支持 APK 擴展 (.obb) 文件竞穷,只支持 Play Feature Delivery和Play Asset Delivery兩種方式用來替代傳統(tǒng)的.obb文件

aab文件.png

Play Feature Delivery和Play Asset Delivery

Play Asset Delivery (后續(xù)簡稱-PAD)將 app bundle 的優(yōu)勢帶到游戲中。它允許超過 150 MB 的游戲替換舊版擴展文件 (OBB)鳞溉,方法是將包含游戲所需的所有資源的單個文件發(fā)布到 Play瘾带。

PAD 提供了靈活的分發(fā)模式、自動更新熟菲、壓縮和增量修補功能看政,并且可免費使用。使用 PAD抄罕,所有資源包均在 Google Play 上托管和提供允蚣,因此你無需使用內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN) 向玩家提供游戲資源。

Play Asset Delivery 使用資源包呆贿,資源包由資源(如紋理嚷兔、著色器和聲音)組成,但不包含可執(zhí)行代碼做入。通過 Dynamic Delivery冒晰,可以按照以下三種分發(fā)模式自定義如何以及何時將各個資源包下載到設(shè)備上:安裝時分發(fā)、快速跟進式分發(fā)和按需分發(fā)竟块。

Play Feature Delivery(后續(xù)簡稱-PFD)功能模塊的獨特優(yōu)勢在于能夠自定義應(yīng)用的不同功能如何以及何時下載到搭載 Android 5.0(API 級別 21)或更高版本的設(shè)備上翩剪。例如,為了減小應(yīng)用的初始下載大小彩郊,你可以將某些功能配置為按需下載前弯,或者只能由支持特定功能(比如拍照或增強現(xiàn)實)的設(shè)備下載蚪缀。

雖然將應(yīng)用作為 App Bundle 上傳時,默認即可獲得高度優(yōu)化的下載文件恕出,但如需使用更高級和可自定義的 Feature Delivery 選項询枚,你就必須使用功能模塊對應(yīng)用的功能進行額外的配置和模塊化處理。也就是說浙巫,功能模塊為你提供了用于創(chuàng)建模塊化功能的基塊金蜀,而你可以將這些功能配置為按需下載。

PAD和PFD推薦選擇方式

這兩種方式的畴,游戲類應(yīng)用更建議是用PAD形式渊抄,為什么 ?我產(chǎn)生過這樣的疑問Iゲ谩;よ搿!從字面上來看PAD 翻譯過來就是應(yīng)用資源下發(fā)煎娇。常規(guī)的U3D或者COCOS引擎接入SDK 給到安卓或者IOS二庵,通常是以資源的(Asset)形式輸出的,這種方式更符合PAD設(shè)計 缓呛。

而PFD偏向非游戲類應(yīng)用(例如電商應(yīng)用)催享,它的設(shè)計更傾向于模塊化性質(zhì)。如果游戲用了模塊化方式無形中增加了游戲代碼和設(shè)計的成本哟绊。所以游戲類型應(yīng)用不建議PFD方式因妙。

PAD分發(fā)模式

  • install-time 資源包在用戶安裝應(yīng)用時分發(fā)。這些資源包以拆分 APK(APK 集的一部分)的形式提供票髓。它們也稱為“預(yù)先”資源包攀涵;你可以在應(yīng)用啟動時立即使用這些資源包。這些資源包會增加 Google Play 商店上列出的應(yīng)用大小炬称。用戶無法修改或刪除這些資源包。

  • fast-follow 資源包會在用戶安裝應(yīng)用后立即自動下載涡拘;用戶無需打開應(yīng)用即可開始 fast-follow 下載玲躯。此類下載不會阻止用戶訪問應(yīng)用。這些資源包會增加 Google Play 商店上列出的應(yīng)用大小鳄乏。

  • on-demand 資源包會在應(yīng)用運行時下載:Google Play 商店會以歸檔文件(而非拆分 APK)的形式提供配置為 fast-follow 和 on-demand 的資源包跷车。這些資源包隨后會在應(yīng)用的內(nèi)部存儲空間中展開。你可以使用 Play Core API 查詢以這種方式提供的資源包的位置橱野。
    應(yīng)用無法假設(shè)這些文件的存在或其位置朽缴,因為它們可能會被用戶刪除,或由 Play Core SDK 在游戲會話之間移動水援。盡管這些文件可由應(yīng)用寫入密强,你也應(yīng)將其視為只讀文件茅郎,因為資源包補丁程序依賴于這些文件的完整性。

PAD下載大小上限

Asset Pack 因具有較高的大小上限而成為大型游戲的理想之選

  • 每個 fast-follow 和 on-demand Asset Pack 的下載大小上限為 512 MB或渤。

  • 所有 install-time Asset Pack 的總下載大小上限為 1 GB系冗。

  • 一個 Android App Bundle 中的所有 Asset Pack 的總下載大小上限為 2 GB。

  • 一個 Android App Bundle 中最多可以使用 50 個資源包薪鹦。

PAD分發(fā)模式選擇

游戲在使用 PAD會面臨三種模式的選擇分別對應(yīng)著掌敬、 安裝時分發(fā)(install-time)、快速跟進式分發(fā)(fast-follow)和按需分發(fā)(on-demand)3卮拧1己Α!

建議用安裝時分發(fā)(install-time)方式地熄,對于游戲和SDK壓力非常小,清晰明了华临。基本不需要額外的代碼和邏輯离斩。按分發(fā)模式文檔配置即可簡單方便银舱。安裝時分發(fā)模式的總下載大小為 1 GB,一般的游戲基本不會超過此范圍跛梗⊙傲螅可以作為初期使用。

PAD實踐操作

前置工作

  • 新游戲 targetSdkVersion >=30 才能提交google play

  • 必須將 Android Studio 升級至 4.1.0 及以上版本核偿,才能使用此功能

  • Android Gradle 插件的版本更新為 4.0.0 或更高版本的同時诚欠,還需要使用對應(yīng)的 Gradle 版本。查看 Android Gradle 插件與 Gradle 版本對應(yīng)關(guān)系請見 Gradle文檔

install-time模式配置

  • 建好application應(yīng)用,在同級目錄新建一個名為install_time_asset_pack 的Modle目錄漾岳。Asset Pack 名稱規(guī)范轰绵、必須以字母開頭,并且只能包含字母尼荆、數(shù)字和下劃線左腔。
目錄結(jié)構(gòu).png
install模式.png
  • install-time-asset_pack/build.gradle 文件并添加以下代碼。需要指定 Asset Pack 的名稱捅儒,并且只能指定一種分發(fā)類型液样。
apply plugin: 'com.android.asset-pack'

assetPack {
    // packName 的名稱可更改,但是要和配置對應(yīng)上
    packName = "install_time_asset_pack" 
    dynamicDelivery {
    //只能指定一種類型巧还,對應(yīng)PAD分發(fā)模式
        deliveryType = "install-time"  
    }
}

  • 然后app/settings.gradle加上如下配置

include ':install_time_asset_pack'   //命名要和packName一致(這段配置可復(fù)制)

settings.gradle.png
  • 接著在app級別的build.gradle android字段內(nèi)配置依賴屬性
android {
 //指定了install-time模式鞭莽,其他兩種模式大同小異
 //命名要和packName一致
    assetPacks = [":install_time_asset_pack"] 
}
  • 最后app/build.gradle 添加遠程依賴庫
dependencies {  
    implementation 'com.google.android.play:core:1.10.0'
}

  • 游戲占用大的資源復(fù)制到install_time_asset_pack文件夾內(nèi)assets里面,下面拿 cocosCreator引擎資源為例麸祷,游戲給到我這里的資源大文件占用都在安卓assets路徑下澎怒。
cocosCreator.png
  • 生成AAB

??此時生成AAB是未簽名,僅供測試用。上傳到谷歌上會提示該文件未簽名

生成aab.png
  • 注意事項??

    Unity引擎不要把bin.Data文件放到install-pack/assets下,容易導致報錯或者游戲主場景出問題(下圖正確展示)

image.png

本地測試Play Asset Delivery

測試沒問題的標準=纂埂E缑妗星瘾!aab通過bundletool轉(zhuǎn)換為apks能正常安裝,能正常進入游戲 乖酬,各個游戲功能點正常死相。

注意一點:使用aab轉(zhuǎn)換成apks測試,是如果不指定簽名 咬像,會用安卓默認簽名算撮。可能會導致Google支付拉不起县昂,詳細用法如下鏈接:Google文檔中bundletool使用

上傳谷歌商店測試

本地測試沒問題后肮柜,建議上傳到Google 商店真實的系統(tǒng)的測試一遍。谷歌上傳應(yīng)用時候開啟了簽名計劃倒彰,需要秘鑰才能提交审洞,按下面三圖生成一個名為private_key.pepk秘鑰,把生成的秘鑰提交至GP待讳,添加測試計劃芒澜,然后發(fā)布內(nèi)部Beta版供測試需要。

Generate Signed Bundle or APk.png
Android App Bundle.png
生成aab簽名.png

把aab成功上傳到GP后臺创淡,會看到如下類似內(nèi)容痴晦,說明上傳內(nèi)容是沒問題的。后臺會根據(jù)你上傳包體包含資源進行分發(fā)

Lark20210719-140046.png

解惑踩坑過程中出現(xiàn)的問題

問題一:為什么生成出來的AAB 依舊是很大(超越了150MB)琳彩?

答: 先通過兩種圖做個比較便知分曉誊酌,下圖是正常沒有進行分包的,能看到base里面直接600多mb露乏,這種aab提交GP 會出錯碧浊,錯誤內(nèi)容上面已經(jīng)展示過了

正常的aab內(nèi)容.png

而下面是經(jīng)過install-time分發(fā)模式分包后的樣子 ,可以看到base文件夾其實不到12mb瘟仿。資源被分到了 install_time_asset_pack文件下箱锐。這種方式aab大小沒有變化還是600mB, 但是提交Google Play既不會提示出錯, 還能正常對外發(fā)布劳较。

拆分后的aab內(nèi)容.png

為什么第二種方式?jīng)]有問題? 你上傳的aab包整體大小沒變還是600mb 驹止,但是aab已經(jīng)包含了分包后的內(nèi)容,只要你上傳到GP后臺兴想,剩下內(nèi)容例如 APK生成及簽名幢哨、下發(fā)設(shè)備等全部交由 Google Play 來自動處理赡勘。

aab后綴格式本質(zhì)和apk沒區(qū)別 是個zip包嫂便,當用戶實際從Google Play Store點擊安裝的時候,根據(jù)用戶設(shè)備信息闸与,GP后臺服務(wù)器通過bundletool工具 下發(fā)符合這個設(shè)備的apks文件

問題二:文檔中明明提到了分發(fā)模式有讀取路徑的操作你為什么沒有這個邏輯

答: 如果沒有特殊邏輯需求下毙替,只要你gradle遠程依賴了core庫岸售,路徑讀取等相關(guān)操作 core庫自動幫你解決了。Play Core庫的作用 就是運行時執(zhí)行了幾個操作厂画,操作內(nèi)容如下所示:

  • 下載對應(yīng)國家的語言資源

  • 管理功能模塊分發(fā)

  • 管理資源包

  • 觸發(fā)應(yīng)用內(nèi)更新

  • 請求應(yīng)用內(nèi)評價

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凸丸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子袱院,更是在濱河造成了極大的恐慌屎慢,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽洛,死亡現(xiàn)場離奇詭異腻惠,居然都是意外死亡,警方通過查閱死者的電腦和手機欲虚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門集灌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人复哆,你說我怎么就攤上這事欣喧。” “怎么了梯找?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵唆阿,是天一觀的道長。 經(jīng)常有香客問我初肉,道長酷鸦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任牙咏,我火速辦了婚禮臼隔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妄壶。我一直安慰自己摔握,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布丁寄。 她就那樣靜靜地躺著氨淌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伊磺。 梳的紋絲不亂的頭發(fā)上盛正,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音屑埋,去河邊找鬼豪筝。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的续崖。 我是一名探鬼主播敲街,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼严望!你這毒婦竟也來了多艇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤像吻,失蹤者是張志新(化名)和其女友劉穎峻黍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拨匆,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡奸披,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涮雷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阵面。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洪鸭,靈堂內(nèi)的尸體忽然破棺而出样刷,到底是詐尸還是另有隱情,我是刑警寧澤览爵,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布置鼻,位于F島的核電站,受9級特大地震影響蜓竹,放射性物質(zhì)發(fā)生泄漏箕母。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一俱济、第九天 我趴在偏房一處隱蔽的房頂上張望嘶是。 院中可真熱鬧,春花似錦蛛碌、人聲如沸聂喇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽希太。三九已至,卻和暖如春酝蜒,著一層夾襖步出監(jiān)牢的瞬間誊辉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工亡脑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堕澄,地道東北人洲尊。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像奈偏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躯护,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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