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

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);

相關文章
相關標籤/搜索