zoukankan      html  css  js  c++  java
  • 安卓新发布机制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);

  • 相关阅读:
    bootmgr is conmpressed联想Z485
    数据库中用开窗函数和复制表结构
    左连接新认识
    sql中的日期查询
    一个数据表通过另一个表更新数据(在UPDAT语句中使用FROM子句)
    StarUML安装与Win7不兼容解决
    SQL中VARCHAR与NVARCHAR存储区别
    Cannot start service SPUserCodeV4 on computer
    SQL中空值与NULL区别
    验证码破解分析
  • 原文地址:https://www.cnblogs.com/xianguoguo/p/11090994.html
Copyright © 2011-2022 走看看