Sailor 后下载使用说明

客户端开关配置

基于 pyramid 插件实现 ISwanSailor 接口

  1. @Service
  2. @Singleton
  3. public class SwanSailorImpl implements ISwanSailor {
  4. /**
  5. * 是否使用预置Sailor,可根据实际情况返回结果
  6. */
  7. @Override
  8. public boolean isSailorPreset() {
  9. return true;
  10. }
  11. /**
  12. * Sailor是否安装,不要修改此方法实现
  13. */
  14. @Override
  15. public boolean isSailorInstalled() {
  16. return isSailorPreset() || SwanSailorConfig.isSailorCoreInstalled();
  17. }
  18. /**
  19. * 安装Sailor,不要修改此方法实现
  20. *
  21. * @param listener 安装结果回调
  22. */
  23. @Override
  24. public void installSailorCore(final SwanSailorInstallListener listener) {
  25. SwanSailorCoreInstaller.get().addListener(new OnInstalledListener() {
  26. @Override
  27. public void onSuccess() {
  28. listener.onSuccess();
  29. }
  30. @Override
  31. public void onFail() {
  32. listener.onFail();
  33. }
  34. @Override
  35. public void onProgress(long current, long sum) {
  36. listener.onProgress(current, sum);
  37. }
  38. }).tryInstall();
  39. }
  40. }
使用预置方式
  • 方法SwanSailorImpl#isSailorPreset 返回 true
  • lib-swan-core Module添加依赖 deps.swan.sailor_sosailor_so Module 包含了需要的 so 文件)
使用后下载方式
  • 方法SwanSailorImpl#isSailorPreset 返回 false
  • SwanDownloadUrlConfig#buildGetSailorUrl()方法中返回实际的后下载地址,此地址需要宿主方根据后下载协议实现Server逻辑。
  • 应用覆盖安装升级后,如果有更新 Sailor 的需要,需要在检测到应用升级后调用 SwanSailorConfig.markHostUpgrade();,以便在启动小程序前,向 Server 请求新的 Sailor

初始化

ApplicationonCreate 方法中需要执行 Sailor 初始化逻辑,可参考小程序开源仓库 SwanAppInitHelper#initSwanAppModule()方法中的逻辑

  1. WebViewFactory.initOnAppStart(AppRuntime.getAppContext(), false, false);
  2. if (SwanAppRuntime.getSwanSailorRuntime().isSailorInstalled()) {
  3. SwanSailorInitHelper.getInstance(appContext).initBWebkitAsync(ProcessUtils.isMainProcess());
  4. // 主进程中提前唤醒小程序进程,加快小程序启动速度
  5. if (ProcessUtils.isMainProcess()) {
  6. SwanAppEnv.get().initIfNecessary(null);
  7. }
  8. } else {
  9. SwanSailorCoreInstaller.get().addListener(new OnInstalledListener() {
  10. @Override
  11. public void onSuccess() {
  12. SwanSailorInitHelper.getInstance(appContext).initBWebkitAsync(ProcessUtils.isMainProcess());
  13. // 主进程中提前唤醒小程序进程,加快小程序启动速度
  14. if (ProcessUtils.isMainProcess()) {
  15. SwanAppEnv.get().initIfNecessary(null);
  16. }
  17. }
  18. @Override
  19. public void onFail() {
  20. if (DEBUG) {
  21. Log.e(TAG, "SwanSailorCoreInstaller onFail ");
  22. }
  23. }
  24. @Override
  25. public void onProgress(long current, long sum) {
  26. if (DEBUG) {
  27. Log.i(TAG, "SwanSailorCoreInstaller onProgress: " + current + "/" + sum);
  28. }
  29. }
  30. }).tryInstall();
  31. }

后下载CS协议

请求参数
参数 数据类型 说明
cuid string 用户唯一标识
uuid string 用户唯一标识
ua string 用户平台类型、客户端版本号等信息
host_app string 宿主App名称
host_app_ver string 宿主App版本
host_os string 宿主平台,Android/iOS
host_os_ver string 宿主平台版本号
network string 终端网络状态
sdk_ver string 小程序SDK版本
version_code int 当前客户端Sailor VersionCode
version_name string 当前客户端Sailor VersionName
abi_type string CPU架构
返回参数
参数 数据类型 说明
errno int 错误号,0-表示成功,1010-当前已经是最新包
errmsg string 错误描述信息
tipmsg string 错误描述信息,用于直接提示给用户
data object 数据字段,当errno不为0的时候,该字段值为null
data.bundle_id string 包唯一标识
data.version_name string 包版本号,string型,格式1.2.3
data.version_code int 包版本号,int型
data.size int 包大小,单位byte
data.md5 string 包md5
data.download_url string 包下载地址

示例:

  1. {
  2. "errno":0,
  3. "errmsg":"success",
  4. "tipmsg":"请求成功",
  5. "data":{
  6. "bundle_id":"sailor",
  7. "version_name":"1.0.0",
  8. "version_code":100,
  9. "size":381575,
  10. "md5":"6aa84bcf7011c228866d309e7f7",
  11. "download_url":"https://b.bdstic.com/0352eba74839fc661e2ab8fcd.zip"
  12. }
  13. }

小程序小游戏用到的SO库说明

so库 说明
libv8.engine.so 小游戏引擎,运行小游戏必备(其内部依赖了libzeusv8.so)
libzeusv8.so js的v8引擎,运行小游戏和小程序必备
libcom.baidu.zeus.so t7内核和小游戏引擎需要的资源文件,必备
libzeuswebviewchromium.so T7内核文件,同层渲染必备(这个so是经过7z压缩的,需要配套libzeuslzma.so使用)
libzeusplat_support.so T7内核的支持文件,必备
libzeuslzma.so 7z解压缩库,用于将libzeuswebviewchromium.so 解压