Version: 1.5
语言 : 中文
URAS 中的 AssetBundle 和 Addressable
HMI Android 构建与交付

Tuanjie Android App View (Experimental)

Android App View 支持将安卓应用(包括第三方应用)以 App View 2D 或 App View 3D 的形式直接嵌入场景中。 从 Tuanjie 1.5.0 版本开始,Tuanjie Editor 中支持直接创建 Android App View 2D 和 Android App View 3D 组件,并提供了接入安卓应用的完整工作流,具体使用方法和注意事项请参考下文。

  • 注意
    • Android App View 目前为 Experimental 版本。若有任何问题及反馈欢迎至 Tuanjie 官方社区提问交流;
    • Android App View 当前仅支持 OpenGLES,对于 Vulkan 的支持将在后续版本中释放;
    • Android App View 当前仅支持在 HMI Android 平台运行,请确认 Build Setting 中 Platform 已切换至 HMI Android 平台;
    • Android App View 当前版本使用内置 Material 实现,建议场景中新建 App View 2D 或 App View 3D 后,使用自定义 Material 进行替换,否则对 App View 的修改同样会影响场景中使用内置 Material 的 Object,且 Editor 关闭后再次重启,App View 会不生效。

组件及功能

Android App View 在 Tuanjie Editor 中包含一个 Settings 和两个 Component:

Android App View Settings

Android App View Settings

  • 用于设置需要嵌入的安卓应用的包名、宽、高和 Render Scale;
  • 默认位于 Assets 中, 在 Assets 中新建。新建时,Tuanjie 会自动创建并关联一张 Render Texture,用于承接安卓应用的内容;
  • 可拖动并绑定到 Android App View 2D 或 Android App View 3D 上;
  • 一个 Android App View Settings 允许被绑定到多个 Android App View 2D 或 Android App View 3D 上;
  • 同一个工程中,建议一个安卓应用对应一个 Android App View Settings,若一个安卓应用对应了多个 Android App View Settings,则仅一个 Android App View Settings 生效。

Android App View 2D

Android App View 2D

  • 用于绘制接入的安卓应用;
  • 默认以 Canvas 的形式存在于场景中,支持在场景中新建,新建后,自动添加一个 Android App View 2D 组件,可在 Inspector 中修改相关参数;
  • 可调整参数如下:
    • Android App View Settings: 绑定并绘制的安卓应用,通过放置 Android App View Settings 完成绑定;
    • 其他可调整参数及效果同 Raw Image;
  • 一个 Android App View 2D 组件默认只允许设置一个Android App View Settings(即绑定一个安卓应用),且不支持再次添加 Raw Image;
  • 一个场景中支持放置多个 Android App View 2D.

Android App View 3D

Android App View 3D

  • 用于绘制接入的安卓应用;
  • 默认以 Plane 的形式存在于场景中,可自行修改为其他 3D Object,支持在场景中新建,新建后,自动添加一个 Android App View 3D 组件,可在 Inspector 中修改相关参数;
  • 可调整参数如下:
    • Android App View Settings: 绑定并绘制的安卓应用,通过放置 Android App View Settings 完成绑定;
    • Target Renderer: 默认 Mesh Renderer,自动绑定,不建议修改;
    • Target Input Collider: 默认 Mesh Collider,自动绑定,不建议修改;
  • 一个 Android App View 3D 组件默认只允许设置一个Android App View Settings(即绑定一个安卓应用);
  • 一个场景中支持放置多个 Android App View 3D.

推荐使用流程

Android App View 推荐使用流程如下:

  1. 打开 Tuanjie Editor 1.5.0 版本及以上;

  2. 切换至 HMI Android 平台;

  3. 勾选 Enable Android App View;

    Android App View Settings Check

  4. 创建 Android App View Settings 并设置需要接入的安卓应用:
    • 在 Asset 中,右键 >> Create >> Android App View Settings;
    • 点击创建好的 Android App View Settings,在 Inspector 中填写安卓应用包名、默认宽高、调整 Render Scale;
    • Tuanjie 会自动生成并绑定一张 Render Texture,无特殊需求无需修改。

    Android App View Settings Detail

  5. 在场景中新建 Android App View 组件并绑定:
    • 顶部菜单栏 GameObject / Component >> Android App View (Experimental) >> Android App View 2D / Android App View 3D,或直接在场景列表中右键 >> Android App View (Experimental) >> Android App View 2D / Android App View 3D, 创建 2D 或 3D 组件;

    Android App View Create

    • 在场景列表中,选中创建的 2D 或 3D 组件,打开 Inspector,将 Asset 中的 Android App View Settings 拖动至 Android App View Settings 框,即可完成绑定。

    Android App View Inspector

  6. 调整其余参数,导出工程或直接打包在真机运行(真机需确保已安装对应保包名的安卓应用)。

权限签名及安装启动

安卓权限及签名

为了接入安卓应用并在安卓设备上正常运行,安卓工程中需对权限进行说明,需要在 AndroidManifest.xml 文件中增加如下内容(Tuanjie 导出工程中已自动新增,无需额外修改):

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.INJECT_EVENTS" />
  <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
  <uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT" />
  <uses-permission android:name="android.permission.GET_PACKAGES" />
  <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
  <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />

  android:sharedUserId="android.uid.system"

同时,需要使用系统签名,为应用设置签名可查看:Application signing

安装及启动

需要将接入了安卓应用的 App 设置为系统应用,因此,需要在安装和启动时按照下列操作进行设置,或编写脚本启动:

1. adb root
2. adb remount
3. adb push %apk本地路径%  /system/app/appview/
4. 解压缩app拿到so
5. 如果是 ARM 64 位,则:adb push %so本地路径%  /system/app/appview/lib/arm64/
6. 如果是 ARM 32 位,则:adb push %so本地路径%  /system/app/appview/lib/arm/
7. adb reboot

输入系统支持

Android App View 3D 当前不支持 New Input System,请检查 Edit >> Project Settings >> Player >> Other Settings >> Active Input Handling,确保选择的是 “Input Manager (Old)” 或 “Both”。

如果必须使用 New Input System,请添加如下脚本:

using UnityEngine;
using UnityEngine.Experimental.Android.AppView;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem.EnhancedTouch;
using UnityEngine.UI;
using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch;
using TouchPhase = UnityEngine.InputSystem.TouchPhase;
#endif

public class NewBehaviourScript : MonoBehaviour
{
    public AndroidAppViewSettings settings;

    private void Awake()
    {
#if ENABLE_INPUT_SYSTEM
        EnhancedTouchSupport.Enable();
#endif
        AndroidAppViewManager.view3DTouchInputDelegate = (() =>
        {
            AndroidAppViewTouchRawData data = null;
#if ENABLE_INPUT_SYSTEM
            if (Touch.activeTouches.Count < 1)
                return null;
            Touch touch = Touch.activeTouches[0];
            data = new AndroidAppViewTouchRawData(touch.screenPosition, TransferTouchPhase(touch.phase), touch.displayIndex);
#endif
            return data;
        });
    }

#if ENABLE_INPUT_SYSTEM
    UnityEngine.TouchPhase TransferTouchPhase(TouchPhase phase)
    {
        UnityEngine.TouchPhase ret = UnityEngine.TouchPhase.Ended;
        switch (phase)
        {
            case TouchPhase.Began:
                ret = UnityEngine.TouchPhase.Began;
                break;
            case TouchPhase.Moved:
                ret = UnityEngine.TouchPhase.Moved;
                break;
            case TouchPhase.Stationary:
                ret = UnityEngine.TouchPhase.Stationary;
                break;
            case TouchPhase.Ended:
                ret = UnityEngine.TouchPhase.Ended;
                break;
            case TouchPhase.Canceled:
                ret = UnityEngine.TouchPhase.Canceled;
                break;
            default:
                break;
        }
        return ret;
    }
#endif
}
URAS 中的 AssetBundle 和 Addressable
HMI Android 构建与交付