Version: 1.0
语言 : 中文
HMI Android 开发入门
Render As Service -- 工程隔离版

Render As Service – 非工程隔离版

Render As Service介绍

  • Render As Service,英文简称为URAS,下同。
  • 基于UAAL(Render As Library),支持把渲染服务嵌入原生安卓APP
    • Tuanjie引擎作为Render Service,嵌入原生Android APP,为原生Android APP提供3D内容
    • 支持多个view,支持非全屏渲染,每个APP仅需集成View组件,脱离Activity
    • 支持加载多个Tuanjie实例
  • 提供单进程和多进程的开发模式
    • 单进程模式下,Tuanjie Editor打包出的Android Studio工程或APK包括Client和Service
    • 跨进程模式下,Service端由Tuanjie Editor打包得到;Client端由Tuanjie Editor打包出RenderServiceLibrary,在安卓原生APP工程中导入RenderServiceLibrary作为Library,Service和Client之间进行IPC通信
    • 支持Service运行在独立进程,支持Service和Client一对多,即把不同APP中的多份引擎整合到一份,提供统一的后台渲染服务,节省对系统资源的占用
    • 架构更灵活,Service和Client可以形成M对N的关系
    • 具备保活机制,自动重连

单进程模式URAS使用说明

URAS架构
URAS架构

Notes:单进程模式下,Editor打包出的Android Studio工程或APK包括Client和Service

使用Tuanjie Editor开发说明

Build Setting设置

  • 点击File >> Build Settings,打开面板

  • 切换至HMI Android平台

  • Export as Render Service中,选择Single Process Mode后,关闭窗口

    URAS Single Process Mode
    URAS Single Process Mode

配置Target Display

  • 切换至HMI Android平台后,Editor里已集成完整的URAS功能
    • 选择需要使用URAS的Camera

    • 在该Camera的Inspector面板中,找到Camera下的Target Display参数

    • 展开下拉列表,选择一个Display使用

    • 注:此处的Display与Android端工程TuanjieView的tuanjieDisplay对应

    • tuanjieDisplay
      tuanjieDisplay
  • Touch事件处理的代码sample:

    void HandleTouch()
    {
        for (int i = 0; i < 10; i++)
        {
            #if ENABLE_INPUT_SYSTEM
            if(i < Touch.activeTouches.Count)
            {
                var touch = Touch.activeTouches[i];
                Vector3 touchPos = touch.screenPosition;
                Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
            }
            #else
            if (i < Input.touchCount)
            {
                Touch touch = Input.GetTouch(i);
                Vector3 touchPos = touch.position;
                Debug.Log($"Get touch position {touchPos} at display {touch.displayIndex}");
            }
            #endif
        }
    }
    
  • 注意:若有Canvas,Canvas的Render Mode不能为Overlay

    • Render Mode

导出Android Studio工程

  • 点击左上角 File >> Build Settings
  • 再次检查参数设置
  • 切换至HMI Android
  • 勾选“Export Project”
  • “Export as Render Service”一栏,选择single process mode
  • 点击“Export”,选择导出路径可导出Android Studio工程文件

使用Android Studio开发说明

添加View并配置交互

  • 将Tuanjie Editor导出的Android工程文件导入Android Studio

  • XML文件中

    • XML file
      XML file
    • tuanjieDisplay:对应在Tuanjie Editor里Camera上的Target Display,输出camera的渲染结果

    • tuanjieRenderFrameInterval:camera渲染间隔

    • tuanjieView既可以在layout.xml中配置,也可以通过代码动态添加

      tuanjieView
      tuanjieView
    • tuanjieViewType:分为TextureView和SurfaceView两种,对应安卓的原生控件。并提供接口在运行时切换

  • 设置Tuanjie View交互
    • 可调用TuanjieView.sendMessageToTuanjie方法向场景中物体发送信息,例如可以向Cube物体发送消息,将颜色进行改变。传入参数分别为物体名称、方法名称和方法参数

    • TuanjieView.sendMessageToTuanjie
      TuanjieView.sendMessageToTuanjie
    • Render Mode
      Render Mode

Service调试

  • 启动渲染服务调用ensureStarted方法

  • 停止渲染服务调用ensureStopped方法

  • 【示例】:Android Studio运行app之后,点击页面上的start render service按钮,调用ensureStarted开启服务,等待服务启动成功后可出现画面另外两个按钮分别对应增加/减少帧渲染间隔

    URAS example 1URAS example 1 UI

导出APK文件

  • 开发完成后,可通过Build >> Build Bundle(s)/APK(s) >> Build APK(s)正常打包APK文件

    Build APK
    Build APK

跨进程/多进程模式URAS使用说明

URAS工程隔离架构
URAS工程隔离架构

Notes:跨进程模式下Tuanjie editor只会打包Service,Client需要在安卓原生app基础上导入RenderServiceLibrary作为Library,Service和Client之间通过aidl进行通信

Service开发说明

Build Setting设置

  • 点击File >> Build Settings,打开面板
  • 切换至HMI Android平台
  • Export as Render Service中,选择Inter-Process Mode后,关闭窗口

URAS Inter-Process Mode

使用Tuanjie Editor开发并导出Android Studio工程和RenderServiceLibrary包

  • 配置Target Display
    • 同单进程
  • 导出Android Studio工程
    • 同单进程
  • 导出RenderServiceLibrary包
    • 点击File >> Build Settings

    • 再次检查参数设置
      • 切换至HMI Android
      • 勾选“Export Project”
      • “Export as Render Service”一栏,选择inter-process mode
      • “Service Package Name”一栏,配置导出的service包名,如果只有单个service用默认包名com.tuanjie.renderservice即可
      • 点击“Export”,选择导出路径可导出RenderServiceLibrary包和Android Studio工程

使用Android Studio开发并导出APK(Service)

同单进程

Client开发说明

导入RenderServiceLibrary包并配置

  • 使用Android Studio,将RenderServiceLibrary包导入Android Studio工程

    Import Android Studio Project
    Import Android Studio Project
  • 在原生app的build gradle中添加implementation project :RenderServiceLibrary ,路径根据需求可修改

    Add Implementation Project
    Add Implementation Project
  • 在AndroidManifest.xml中添加:

    XML
    XML

View配置

TuanjieView创建时需要指定service包名进行绑定

TuanjieView配置
TuanjieView配置

Service调试

  • 启动渲染服务调用ensureStarted方法
  • 停止渲染服务调用ensureStopped方法
  • 在初始化、启动和停止service时也需要传入包名

导出APK文件

同单进程

APK安装调试

  • 将Service和Client分别打包的APK文件进行安装
  • Service app在安装后设置应用启动管理权限,以华为为例,也可能不需要设置,与设备品牌有关
  • Service需要开启后台弹窗权限

|安卓应用启动管理|URAS权限管理| | :- | :- |

HMI Android 开发入门
Render As Service -- 工程隔离版