安卓新發布機制----app bundle


Android App Bundle是一種改進的應用程序打包方式,能大幅度減少應用體積

unity可以直接導出appbundle,只需要在導出的時候勾選

但是通常項目有sdk離不開java端,我這里是用unity導出的gradle來做的

我的unity版本2018.4.0,android studio版本3.4

unity設置:  

  scripting backend選用il2cpp

  armv7是肯定需要的;arm64在今后的版本提交android包必須要有,不然會給你警告;x86可選

  arm64和x86勾選上的話,每個項通常會給包大小增加10M,(都勾選的話增加了20M)

  所以,不管是為了谷歌新發布機制(以后都會用appbundle提包,apk會不再使用),還是為了減少包大小,app bundle是趨勢

File->Build Setting->(Android平台)Player Setting->Other Settings

設置完后導出gradle吧:File->Build Setting->(Android平台)勾選導出->Export

這是我導出的gradle:

 

打開build.gradle:

appbundle減少包大小,我所理解的是它將包內容拆分成各個包,然后根據手機類型來安裝它所需要的包,這樣多余的內容就不需要安裝進手機了(apk是將所有內容打包安裝進手機),從而減少包大小

開啟拆分:

android {
  bundle {
  language {
  enableSplit = true
  }
  density {
  enableSplit = true
  }
  abi {
  enableSplit = true
  }
  }
}
gradle工具版本:

build.gradle:
buildscript {
  dependencies {
  classpath 'com.android.tools.build:gradle:3.2.0'
  }
}
gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
我之前打出appbundle包安裝到手機上啟動就會崩潰,然后查了資料,各種測試,發現gradle工具版本如果對應不上也是部分原因,
com.android.tools.build:gradle:3.2.0對應的是gradle-4.6-all.zip

前置條件完成(你得同步成功吧),接下來就是打包成appbundle了:

生成.aab文件:跟生成apk文件一樣,Android Studio里面Build->Generate Signed Bundle or APK->Android App Bundle

 

--------導出的key

編譯完成后的.aab文件就是我們需要的東西了,這個時候其實已經over了,如果測試沒問題,就可以用.aab文件發布了

接下來測試:

測試方法一:

 測試工具:bundletool-all-0.6.0.jar  這個東西unity已經幫你下好了,路徑:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools

 步驟是,使用工具將.aab文件導出一個.apks文件,再用.apks文件安裝到你的手機上,

用到的命令行:

.aab文件導出.apks文件:

java -jar "工具bundletool-all-0.6.0.jar路徑" build-apks --bundle=".aab文件路徑" --output="導出的.apks文件路徑,你想放哪放哪" --ks="keystore路徑" --ks-key-alias="keystore別名" --ks-pass="keystore密碼"

.apks文件安裝到手機(需連接設備):

 java -jar "工具bundletool-all-0.6.0.jar路徑" install-apks --apks=".apks文件路徑" --adb="adb路徑(xxx/adb.exe)"

測試方法二:

新建一個.sh文件,輸入下面內容,將對應的路徑和名字密碼改成你自己的,記住這里路徑不同於windows的c://xxxx,而是/c/xxx

#!/bin/sh
KEYSTORE=/C/Users/Administrator/Desktop/AndroidAppBundle/windforce_keystore
KS_ALIAS="windforce games"
PASS='pass:Wfwindforce123'
BUNDLETOOL_PATH=/C/Users/Administrator/Desktop/AndroidAppBundle/bundletool-all-0.6.0.jar
TMP_APKS_PATH=/C/Users/Administrator/Desktop/AndroidAppBundle/DragnMerge.apks
AAB_PATH=/C/Users/Administrator/Desktop/AndroidAppBundle/DragnMerge.aab
ADB_PATH=/G/Users/Administrator/AppData/Local/Android/Sdk/platform-tools/adb.exe

echo "Creating $TMP_APKS_PATH from $AAB_PATH"
java -jar $BUNDLETOOL_PATH build-apks --bundle=$AAB_PATH --output=$TMP_APKS_PATH \
--ks=$KEYSTORE --ks-key-alias="$KS_ALIAS" --ks-pass=$PASS && \

echo "Installing $TMP_APKS_PATH" && \
java -jar $BUNDLETOOL_PATH install-apks --apks=$TMP_APKS_PATH --adb=$ADB_PATH

 

保存.sh文件,你可以下載一個Git來運行它

 

 ----------------------------------------------------------------------------------------------------------------------------------------------

 

后記:

生成出來的.apks文件可以改后綴為.zip解壓看看里面的內容(此步驟可省略,只為看appbundle本質)

Google play到時候安裝到玩家手機上時,會自動根據玩家的機型配置安裝對應的.apk,達到減小包大小的目的

小米8測試:

安裝后大小對比

 

 

前面提到閃退,一個原因是gradle工具版本號不對應,另外一個原因就是我在unity里面使用了Marshal下面的這個函數public static IntPtr StringToCoTaskMemAnsi(string s);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM