Uniapp/android嵌入Unity3d,实现交互_uniapp unity-程序员宅基地

技术标签: unity  webview  java  android  

因为官方文档写的很多不清楚,所以走了很多弯路,现将实现方法总结分享一下,因为之前接触原生开发较少,不规范地方也请多包容指正。

uniapp应用在android开发的实现的思想是将uniapp作为主程序,分别开发或引入其他原生插件作为module供主程序调用,进而实现功能更加全面。

1.uniapp与android混合开发相关配置

之前文章中有提过,不过多赘述。大概思路是下载和Hbuilder相同版本的Android SDK,在相关模板改成自己程序的配置。

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121920418

首先下载与uniapp版本相对应的供安卓调用的App离线SDK,版本不一致将会出现无法兼容的问题。然后在安卓开发工具Android Studio中打开已经下载好的Android离线打包SDK中的UniPlugin-Hello-AS安卓项目,因为该项目已经作为安卓调用uniapp的示例将相应配置、依赖包引用等设置完毕,因此可以直接在示例基础上改成自己程序的配置即可。导入成功之后会自动下载相应依赖包。最后根据项目情况进行相应设置:

(1)将打包好的uniapp项目替换掉app\src\main\assets\apps\assets路径下的示例项目。

(2)打开安卓项目assets文件下的data目录中dcloud_control.xml文件 ,将uni-app项目的文件夹名字粘入appid。

(3)申请Appkey,在开发者中心,点击刚才创建的app,进行安卓包名和安卓证书签名设置,并将生成后的key值替换到AndroidManifest.xml(app)中meta-data节点的value中。

(4)将安卓包名替换到build.gradle(app)中defaultConfig下applicationId 中包名、AndroidManifest.xml(app)中的mainfest节点下的package及provider节点下的authorities。

                      

 

(5)对build.gradle(app)的signingConfigs 节点根据安卓证书的实际情况进行设置。

(6)并将安卓许可证书(***.keystore)放到app根目录下。

(7)AndroidManifest.xml(app)文件中 application节点下修改App名字和图标

(8)打开 assets下的data 下dcloud_control ,将文件夹名字粘入appid

2.Unity3d 打包成安卓版本

在Build Setting界面点击Player Settings,面板中查找Identification,设置好英文包名(中文会报错),scripting Backend 选择L2CPP模式并选中ARM64

以确保能与android程序匹配,具体如下图所示。

Unity3d的Android二次开发包导出后,目录结构如下图所示:

此后需要按照导出为含有源代码的Android项目工程方式将其导入android studio中,之后需要开展如下几个步骤的模块配置:

按照Unity3d官方例子,在安卓项目同级创建文件夹UnityProject->androidBuild

将Unity3d导出的项目拷入androidBuild文件夹下。

安卓中嵌入该Unity3d项目,作为一个module进行调用

1)setting.gradle 文件添加 unityLibrary module

include ':unityLibrary'

project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary')

2)选择 build.gradle(:app)添加 dependencies

dependencies {

    implementation project(':unityLibrary')

implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

// 自己项目的配置

}

3)选择 build.gradle(:UniPlugin-Hello-AS)

allprojects {

    repositories {

        google()

        jcenter()

        // Add Code

        flatDir {

            dirs "${project(':unityLibrary').projectDir}/libs"

        }

        // End

    }

}

4)选择 NativeAndroidApp 的 strings.xml 添加,点击 AS 的 sync project,可以看到已经多了一个 module。

<resources>

    <string name="app_name">NativeAndroidApp</string>

    <string name="action_settings">Settings</string>

    // Add Code

    <string name="game_view_content_description">Game view</string>

    // End

</resources>

5)在主运行程序的app下的main->assets->dcloud_uniplugin.json添加依赖,其中name为插件名。

"plugins": [

   {

     "type": "module",

     "name": "Unity",

     "class": "com.unity3d.player.UnityPlayerActivity"

  }

1)将AndroidManifest.xml(:unityLibrary)中intent-filter节点注释掉。

2).将除了unity-classes.jar包以外的包拷入app下的lib中,用于项目的引用包。

(3)将build.gradle(unityLibrary)中相关包引用注释掉。

3.uniapp-Unity3d应用在android中的交互

通过uni-app中点击按钮事件对Unity3d界面进行调用,另一方面Unity3d中设置返回按钮,进行Unity3d界面退出,返回安卓界面,最终实现uniapp-Unity3d在安卓中的交互。具体实现方法如下:

(1)uni-app对Unity3d的调用:

goActivity(){

                var main = plus.android.runtimeMainActivity();

                var Intent = plus.android.importClass("android.content.Intent");

                var intent = new Intent(main.getIntent());

                intent.setClassName(main, "com.unity3d.player.UnityPlayerActivity");

                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                main.startActivity(intent);

            },

(2)Unity3d中返回按钮调用安卓端的实现

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

 jo.Call("onBackPressed");

(3)安卓端对Unity3d信息的接收,退出Unity3d,返回安卓界面。

@Override

    public void onBackPressed() {

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                mUnityPlayer.quit();

            }

        });

        super.onBackPressed();

    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45284208/article/details/123444712

智能推荐

【Echarts】echarts tooltip小箭头,及阴影样式修改,双Y轴显示,折线图和柱状图同时展示,legend分开展示_echarts tooltip 箭头-程序员宅基地

文章浏览阅读7k次。this.circleChart = { tooltip: { trigger: 'item', backgroundColor: '#fff', textStyle: { color: '#666', ..._echarts tooltip 箭头

java scriptengine,使用Java ScriptEngine(Groovy),如何使它更具性能?-程序员宅基地

文章浏览阅读1.1k次。I am using ScriptEngine in my app to evaluate some client code in my application.The problem is it's not performant enough and I need to take measures to improve the time of execution.Currently, it ca..._scriptenginemanager 性能优化

msys2 环境配置记录-程序员宅基地

文章浏览阅读968次。命令行添加镜像地址首次安装后,配置软件源sed -i "1iServer = http://mirrors.ustc.edu.cn/msys2/mingw/i686" /etc/pacman.d/mirrorlist.mingw32sed -i "1iServer = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64" /etc/pacma...

FAT32文件_fat32返回值-程序员宅基地

文章浏览阅读1.1k次。/*---------------------------------------------- * 模 块 名:文件系统 * 功能描述:读写基于FAT32格式的数据 * 调试平台:UMP3 * * 当前版本:1.0 * 作 者:xx * 完成日期:2010-6-28 * 存在BUG:未知 * 调试结果:完成调试 * * 说 明:本文件系统_fat32返回值

Python初学者笔记(3):输出列表中的奇数/奇数项,字符串中的偶数项,字符串大小写转换...-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏12次。【1】a=[8,13,11,6,26,19,24]1)请输出列表a中的奇数项2)请输出列表a中的奇数解:1)1 a=[8,13,11,6,26,19,24]2 print a[::2]Result:>>>[8, 11, 26, 24]2)1 a = [8,13,11,6,26,19,24]2 b = []3 for it..._用for语句筛选出自然数序列中的奇数与偶数,分别存入奇数列表ls1 与 偶数列表ls2,分两行打印输出

Python安装包下载、环境配置与工具包安装教程(详细版)_pystdf安装包-程序员宅基地

文章浏览阅读7k次,点赞11次,收藏62次。一、安装包下载网盘:链接:https://pan.baidu.com/s/1FrFj8Flcwr_ZJH91OxoF5A 提取码:2442二、环境配置1、下载完解压后双击 python-3.8.0a4-amd64.exe,注意:一定勾选Add Python 3.8 to PATH, 会自动配置环境变量 2、在cmd中输入python 验证是否安装成功三、工具包下载1、安装pip,首先进入cmd命令是:pip install pip查看是否安装成功命令: == pip show pi_pystdf安装包

随便推点

前端面试题1(html)-程序员宅基地

文章浏览阅读607次。HTML * Doctype作用?严格模式与混杂模式如何区分?它们有何意义?1.<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范2. 所谓的标准模式是指,浏览器按 W3C 标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览..._html 面试题

选项卡:选择一个按钮改变div的背景颜色_点击修改颜色按钮,输入颜色,修改div背景颜色-程序员宅基地

文章浏览阅读1.2k次。<!-- 选项卡:选择一个按钮改变div的背景颜色1. 获取三个button按钮和一个div2. 最先给div设置基本背景颜色3. 3个button设置onclick事件4. 点击按钮之后,div.style.cssText={background-color:选定颜色}--><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta _点击修改颜色按钮,输入颜色,修改div背景颜色

GUI是什么-程序员宅基地

文章浏览阅读7.3w次,点赞38次,收藏135次。GUI的全称为Graphical User Interface,图形化界面或图形用户接口,是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。_gui

gitlab安装,使用,备份,恢复-程序员宅基地

文章浏览阅读96次。gitlab安装,使用,备份,恢复git是一个版本控制器在分布式版本控制系统里,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。1.gitlab介绍GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并..._gitlab-ce-8.9.5-ce.0.el6.x86_64.rpm

Centos7下Hortonworks的Ambari-server和Hadoop集群平台重装._ambari集群中有一台重装系统-程序员宅基地

文章浏览阅读6.3k次。Ambari是apache的顶级项目, 是一套类似一键包安装hadoop集群的快速部署工具.地址在这里: https://ambari.apache.org/Apache Ambari本文是因为配置kerberos 授权的时候, 需要加安装一些功能, 比如tez的时候, 某个包(pig 安装失败,) 导致禁用kerberos 无效. 进而陷入死循环不得不重装. 因为是物理机没有回滚机制. 所以记录_ambari集群中有一台重装系统

使用SDL2_mixer库播放MP3音乐_sdl play mp3-程序员宅基地

文章浏览阅读1.7k次。使用SDL2_mixer库播放MP3音乐运行环境:Ubuntu:16.04开发环境准备安装libsdl2-mixer-dev~$ sudo apt install libsdl2-mixer-dev需要包含的头文件#include <SDL2/SDL.h>#include <SDL2/SDL_mixer.h>需要链接的库文件set(CMAKE_CX..._sdl play mp3