安卓新发布机制----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);

相关文章
相关标签/搜索