閑聊
最近一段時間坞靶,開始負責一個游戲項目安卓SDK對接工作,又是熟悉的味道還是那個配方传货。從游戲研發(fā)邊緣成員折騰回安卓SDK對接工作中(再次入坑)晃跺。
馬上快8月了Google 上架游戲政策又發(fā)生變化,手中對接游戲主要發(fā)往海外也糊。所以Google的要求我們還是要滿足的炼蹦。想想發(fā)往國內(nèi)的游戲渠道,真是幸福狸剃。
廢話說完掐隐,進入今天正題。針對Google 8月份新規(guī) 游戲這塊需要作出調(diào)整以應(yīng)對新規(guī)钞馁,正好做個記錄虑省,以踩坑者的角度去記錄一下過程。
上架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 Delivery 和 Play Asset Delivery
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)大膽的試了一下山涡〉探幔看官們就別在試水了)
有一點需要注意,超過150MB的應(yīng)用鸭丛。 Android App Bundle 不支持 APK 擴展 (.obb) 文件竞穷,只支持 Play Feature Delivery和Play Asset Delivery兩種方式用來替代傳統(tǒng)的.obb文件
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ù)字和下劃線左腔。
- 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ù)制)
- 接著在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路徑下澎怒。
- 生成AAB
??此時生成AAB是未簽名,僅供測試用。上傳到谷歌上會提示該文件未簽名
-
注意事項??
Unity引擎不要把bin.Data文件放到install-pack/assets下,容易導致報錯或者游戲主場景出問題(下圖正確展示)
本地測試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版供測試需要。
把aab成功上傳到GP后臺创淡,會看到如下類似內(nèi)容痴晦,說明上傳內(nèi)容是沒問題的。后臺會根據(jù)你上傳包體包含資源進行分發(fā)
解惑踩坑過程中出現(xiàn)的問題
問題一:為什么生成出來的AAB 依舊是很大(超越了150MB)琳彩?
答: 先通過兩種圖做個比較便知分曉誊酌,下圖是正常沒有進行分包的,能看到base里面直接600多mb露乏,這種aab提交GP 會出錯碧浊,錯誤內(nèi)容上面已經(jīng)展示過了
而下面是經(jīng)過install-time分發(fā)模式分包后的樣子 ,可以看到base文件夾其實不到12mb瘟仿。資源被分到了 install_time_asset_pack文件下箱锐。這種方式aab大小沒有變化還是600mB, 但是提交Google Play既不會提示出錯, 還能正常對外發(fā)布劳较。
為什么第二種方式?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)評價