總體說來,Android App Bundle打包有3種方式,每種方式都有成功上架Google Play進行測試通過,因此實用程度還是挺高的。能夠理解以下內容的前提是會打apk包,知道如何生成Asset Bundle檔案,這塊內容可以參考我的上一篇文章。

一、使用Unity3D自帶功能打aab包

圖1

此方法最簡單,勾選打包選項"Build App Bunlde(Goole Play)"即可。在點選Build的時候就會提示儲存xxx.aab檔案。【注意】這種方式打出的aab包的大小必須在150M以內,否則無法上架Google,不過這對於小遊戲來說應該是足夠了。

二、使用Google提供的外掛(新增)

下載地址:https://github.com/google/play-unity-plugins/releases

在今年6月份開始研究打aab包的時候,Google還沒有提供這種方式,對於需要從APK+OBB模式轉成AAB+Asset Pack模式還是一件比較麻煩的事情(參考方法三),也許是Google良心發現,所以才提供了一個折中的方案。

    打包步驟:

1. 下載外掛com.google.android.appbundle,匯入Unity3D。

2. 通過選單Google->Android App Bundle->Asset Delivery Settings... 開啟配置介面(如下圖2展示)。

3. 勾選Separate Base APK Asset(如下圖3展示)。

4. 然後通過選單Google->Build Android App Bundle...即可打出aab包。

圖2

圖3

圖3的英文也介紹的比較詳細,無需額外對資源載入等做處理,【注意】只需要將打好的Asset Bundle檔案拷貝的StreamingAssets目錄即可。這也是正常打APK包需要的步驟,因此接入專案非常的簡單,而且可以正常上架,無需考慮150M包大小的限制。

三、使用Google的分發模式(AAB + Asset Pack)

這是Google官方之前針對aab包提供的預設方式,而且通過官方的介紹文件可以知道這種方式提供了CDN,如果完全接入後可以免去自己搭建CDN的環境。

Play Asset Delivery (PAD) 將 app bundle 的優勢帶到遊戲中。它允許超過 150 MB 的遊戲替換舊版擴充套件檔案 (OBB),方法是將包含遊戲所需的所有資源的單個工件釋出到 Play。PAD 提供了靈活的分發模式、自動更新、壓縮和增量修補功能,並且可免費使用。使用 PAD,所有資源包均在 Google Play 上託管和提供,因此您無需使用內容分發網路 (CDN) 向玩家提供遊戲資源。

打包步驟:

1. 下載外掛com.google.play.assetdelivery,並匯入Unity(這裡可能也需要下載步驟二的外掛)。

2. 通過選單Google->Android App Bundle->Asset Delivery Settings... 開啟配置介面(如圖2展示)。

3. 【注意】這次不勾選Separate Base APK Asset選項,而是通過下面的Asset Pack Configuration介面進行Asset Bundle配置。

4. 點選Add Folder...按鈕選擇專案的Asset Bundle檔案目錄。

a.【注意1】這裡不能將Asset Bundle檔案放在StreamingAssets目錄。

b.【注意2】Asset Bundle檔案的總數不得超過50個

c.【注意3】這裡針對Asset Bundle的命名也有要求,類似程式碼變數名。

【備註】 針對超過50個Asset Bundle的可以使用AssetPack,就是先將Asset Bundle使用Google提供的API方法打成AssetPack(該方法可用,但未測試過)。

5. 針對每個Asset Bundle檔案設定其分發模式,最簡單就全部設定為Install Time模式(如下圖4)。

6. 設定完成後再通過Google->Build Android App Bundle...即可打成aab包,裡面的內容可以通過解壓軟體開啟檢視(如圖5)。

圖4

圖5

四、總結和另外的注意事項。    

圖6

上圖是某次上架測試過程中的錯誤提示(需注意API等級)。若參照我上面提供的三種方式且滿足Google的上架條件,基本上可以正常上架。另外,如果使用方法三進行aab打包的話,還需要額外針對載入Asset Bundle檔案的方法進行修改,不可使用AssetBundle.LoadFromXXX的方法,需要匯入 Play Asset Delivery 庫,然後呼叫 RetrieveAssetBundleAsync() 方法載入 AssetBundle(可去官網檢視例子)。

大體的內容就介紹到這裡,如果還有疑問歡迎一起溝通交流,我也是菜鳥一枚。

文章來自我的公眾號,大家如果有興趣可以關注,具體掃描關注下圖。