Android App Bundle是一種改進的應用程序打包方式,能大幅度減小應用體積java
unity能夠直接導出appbundle,只須要在導出的時候勾選android
可是一般項目有sdk離不開java端,我這裏是用unity導出的gradle來作的windows
個人unity版本2018.4.0,android studio版本3.4app
unity設置: 函數
scripting backend選用il2cpp工具
armv7是確定須要的;arm64在從此的版本提交android包必需要有,否則會給你警告;x86可選測試
arm64和x86勾選上的話,每一個項一般會給包大小增長10M,(都勾選的話增長了20M)gradle
因此,無論是爲了谷歌新發布機制(之後都會用appbundle提包,apk會再也不使用),仍是爲了減小包大小,app bundle是趨勢ui
File->Build Setting->(Android平臺)Player Setting->Other Settingsspa
設置完後導出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);