当前位置: 首页 > news >正文

Unity作为库导入Android原生工程

1、前言

在一次项目过程中,使用unity进行了android程序的开发,但启动部分内容需要由Android Studio实现,所以只能查阅多方资料,将unity作为库导入到Android Studio中混合开发。期间查阅了许多资料,也踩了许多坑,在此做一下记录,以便后续自己参考与分享。

2、软件版本

Unity

(unity已经安装完成了OpenJDK、Android SDK&NDK Tools,具体安装步骤请查阅资料,在此不做赘述。)

Android (就是在官网上下载了目前的最新版)

3、操作步骤

①将unity程序导出

unityLibrary: unity的功能库模块 , android工程用到的重要文件夹

launcher: unity的启动器模块,包含很少的java代码

②Android Studio集成unityLibrary
1.Android Studio先New一个空项目

Empty Activity 不能选择Language,默认为Kotlin语言

Empty Views Activity 可以选择Language (新版本推荐)

注:包名不用跟Unity的包名相同

 2.导入 unityLibriry模块
2.1在File中选择Import Module

等待编译后会出现报错:

解决方式:在工程级的gradle.properties文件中添加 unityStreamingAssets=.unity3d 后点右上角Try Again

若出现如下错误或警告信息:

解决方式:打开unityLibrary下的build.gradle文件,添加如下代码,点击Try Again

android {namespace 'com.android.library'
}

2.2将unityLibrary模块加入到主工程app模块的module依赖

然后打开file/Project Structure - Dependencies - 选择app - 点击右侧的+号 -

选择Module Dependency 

勾选unityLibrary - 点击OK

2.3修改unityLibrary下的build.gradle文件内容:

把 implementation 改为 api ,点击sync

2.4 修改主工程级的setting.gradle文件内容,点击sync

project(':unityLibrary').projectDir=new File('unityLibrary')

2.5 修改主工程级的setting.gradle文件内容,点击sync

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

若报错找不到路径:

将内容改为如下

 2.6 修改unityLibrary下的 /src/main/AndroidManifest.xml文件,内容如下

在<activity 中增加一句: android:process="e.unity3d">

并确认android:launchMode="singleTask"的值正确,若没有,则添加此句

这两句使unity成为独立的进程,这样退出unity时不会闪退

2.7 将Launcher/src/main/res/values/strings.xml 文件拷贝进unityLibrary/src/main/res/values/里,不然编译会报错

2.8 其他配置修改 

(1)修改项目级app下的strings.xml文件

        增加一句: <string name="game_view_content_description"></string>

        解决某些程序直接闪退的问题

        

        运行后提示,通过添加上面代码后可以解决

    (2)在项目级app下AndroidManifest.xml application中添加

        tools:replace="android:icon,android:theme,android:allowBackup"  

        解决合并AndroidManifest.xml文件AppTheme冲突问题

        

 2.9 配置NDK 

unityLibrary编译时会依赖 ndk 来执行il2cpp.exe 生成libil2cpp.so文件

(1)设置支持的SO库架构

 注意:SDK中使用的so文件支持五种架构:

                       x86,x86_64,,armeabi,armeabi-v7a,arm64-v81

  如果您应用中支持的架构超出这五种

  请在build.gradle中使用abiFilters选择支持的架构

  在项目级(app)的build.gradle文件里的defaultConfig里加入以下代码

  设置支持的SO库架构 解决unityLibrary库 .so文件兼容问题

 ndk {abiFilters 'arm64-v8a'}

(2)配置Android Studio ndk路径:

        打开工程级下的local.properties文件,添加如下代码 ,指定ndk路径:

        可以直接使用Unity的NDK,也可以使用自己下载的

app和unityLibrary都要设置NDK Version:

        

若电脑中没有ndk,可以在此处下载,下载完成后,ndk目录为Android SDK Location目录下的ndk文件夹

(3)修改unityLibrary 下的build.gradle文件,打开BuildIl2Cpp相关代码

注意:此处有坑,不同版本函数参数含义不同,需要仔细甄别

3.0选择Build - Make Moudle 'xxx.unityLibrary' 进行编译

若出现报错:

 解决方式:根据日志信息,把unityLibrary下的AndroidMainfest.xml文件里第二行中的package="com.unity3d.player" 删除即可,再次Build不再报错

注:但是不知道删除此句会不会影响其他,目前运行打包均正常,未发现异常影响

若出现报错: 

则就是ndk配置问题,找不到ndk,解决方式查看上面2.9

出现这个问题的原因是:unityLibrary编译时会依赖ndk 来执行il2cpp.exe生成libil2cpp.so文件,大概率是unityLibrary与app没有设置ndkVersion

 自此,unityLibrary就全部集成完毕,Android工程app模块可以正常引用com.unity3d.player.UnityPlayerActivity

③编写MainActivity启动代码

修改app下的MainActivity.java,继承UnityPlayerActivity 

④配置连接运行设备

根据需求配置,此处我选择了arm架构设备

等待安装完成后,在顶部运行按钮旁边的设备按钮就有设备了

⑤ 运行测试
        5.1点击绿色三角图标,运行

         5.2 等待编译、构建,成功后如下

        切换到模拟器窗口,app已被安装运行

4、最后

感谢大佬的指引,根据大佬的步骤一步步配置,踩了一些坑后终于成功,Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程

http://www.dtcms.com/a/337936.html

相关文章:

  • AVB(Android Verified Boot)中vbmeta结构浅析
  • Unity2022打包安卓报错的奇葩问题
  • Java面试宝典:Redis 入门与应用
  • 【OpenAI】 GPT-4o-realtime-preview 多模态、实时交互模型介绍+API的使用教程!
  • 线程间同步机制与进程间通信
  • 数据处理和统计分析 —— Pandas 基础(附数据集)
  • SMTPman,smtp ssl助力安全高效邮件传输!
  • redhat9从github下拉软件包一直报错
  • petalinux2023.1编译pmu-rom-native...fetch error问题
  • 39-Linux下安装python
  • BPO(Business Process Optimization,业务流程优化)
  • FPGA驱动量子革命:微美全息(NASDAQ:WIMI)实现数字量子计算关键验证
  • 任务六 歌手页面功能开发
  • single cell ATAC(11)ArchR鉴定标记Peak
  • Spring AI RAG 检索增强 应用
  • RAG深入解读:文本分块、混合检索、重排序、bge微调(工程落地实践)
  • Android 流式布局实现方案全解析
  • Android输入框文字不垂直居中
  • Maven Shade Plugin 插件使用说明
  • 【音视频】ISP能力
  • 阿里云odps和dataworks的区别
  • 多数据源 Demo
  • 机器学习之数据预处理(二)
  • HBM CPU Cache / GPU Cache 的关系
  • 第一阶段C#-14:委托,事件
  • ubuntu 下载安装tomcat简单配置(傻瓜式教程)
  • minio安装和配置
  • JUC读写锁
  • 视觉语言导航(7)——VLN的数据集和评估方法 3.2
  • openfeign 只有接口如何创建bean的