Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解

马肤

温馨提示:这篇文章已超过472天没有更新,请注意相关的内容是否还可用!

摘要:,,本文介绍了Unity与原生交互在AndroidStudio环境下的流程。内容包括Unity导出Android工程,然后导入AndroidStudio进行APK打包的全过程。文章旨在帮助开发者利用Unity和AndroidStudio的结合,实现更高效的游戏开发和原生应用交互。

一.Unity导出Android工程:

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第1张 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第2张

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第3张

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

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

 二.AS打开unity android工程

  直接Open unity导出的整个android项目,Launcher模块作为app启动模块

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第4张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第5张

 三.AS集成unityLibrary(推荐)

方式:Import Library Module 

 1.AS先New一个空项目:

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第6张

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第7张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第8张

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第9张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第10张

包名不用跟Unity的包名相同

删除多余的Test库

 2.导入 unityLibriry模块

2.1 Import unityLibriry模块

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第11张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第12张

  *等待编译后会出现报错:

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第13张

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第14张

 *若出现如下错误

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第15张

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

android {
    namespace 'com.android.library'
}

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第16张

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

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

选择Module Dependency 

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第17张

勾选unityLibrary - 点击OK

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第18张

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第19张

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

把 implementation 改为 api ,点击syncUnity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第20张

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

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第21张

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

  flatDir {

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

            //dirs './unityLibrary/libs'

        }

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第22张

 *若报错找不到路径:

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第23张

解决方式1:将内容改为如下

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第24张

 解决方式2:将内容改为如下

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第25张

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第26张

android:launchMode="singleTask"

android:process="e.unity3d"

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第27张

 2.7 将Launcher/src/main/res/values/strings.xml 文件拷贝进unityLibrary/src/main/res/values/里

不然编译会报错

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第28张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第29张

 2.8 其他配置修改 

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

        增加一句: 

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第30张

        运行后提示Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第31张,通过添加上面代码后可以解决

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

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

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第32张

 2.9 配置NDK 

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

 解决方式1:配置NDK (推荐采用此方式)

 (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','armeabi-v7a'

        }

       Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第33张

 (2)配置AS ndk路径:

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

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第34张

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第35张

         进入file/Project Structure-SDK Location 可以查看到SDK 与 NDK 路径配置

         若电脑没有ndk,可点击Download下载,自动下载到配置SDK的路径下的,下载完后再在local.properties文件中配置上对应路径ndk.dir=D\:/SDK/ndk-bundle即可

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第36张  Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第37张

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第38张

  解决方式2:(推荐情况:mac电脑,无法执行exe,只能采用此方式)

        1)注释掉BuildIl2Cpp相关代码

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第39张

        2)用unity导出apk

        3)然后解压apk,从中提取出libil2cpp.so文件

        4)拖入到AS中的unityLibrary/src/main/jniLibs/arm64-v8a/路径里

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第40张

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第41张

选取任意一种方式处理后,重新Build - Make Moudle 'xxx.unityLibrary' 进行编译

 *若出现报错:

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第42张

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

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

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第43张

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

3.编写MainActivity启动代码

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第44张

4.配置连接运行设备

        4.1 下载安装雷电模拟器,并运行打开模拟器

        4.2 AS会自动识别并设置运行目标设备为打开的模拟器 

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第45张

5. 运行测试

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第46张

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第47张

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

        Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第48张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第49张

6.集成unityLibrary补充配置

 6.1 在项目级别(app)的AndroidMainfest.xml文件里,在图中位置加入这两行代码(可选)

xmlns:tools="http://schemas.android.com/tools"

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

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第50张

6.2 保持原生与unityLibrary的SDK版本一致(可选)

同步项目级(app)的build.gradle部分数据到应用级(unityLibrary)的build.gradle

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第51张

6.3 选择unityLibrary,Build - Make Moudle 'xxx.unityLibrary',开始编译

 *若出现报错: 

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第52张

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

出现这个问题的原因是:unityLibrary编译时会依赖ndk 来执行il2cpp.exe生成libil2cpp.so文件

 7.构建APK

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第53张

等待完成:

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第54张

8.导入AS遇到的问题记录:

1.相关插件报错:

org.gradle.api.plugins.UnknownPluginException: Plugin [xxx] was not found in any of the following sources

当时的解决办法:

找到 gridle.properties 文件打开,在最下面添加一条
android.overridePathCheck=true 即可

然后重新编译(右键问题所有处的灯泡图标,点击TryAgain)

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第55张

2.编译时SDK相关报错:

个人理解原因是:Unity自身的SDK路径不允许AS再安装其他版本的SDK,需将AS的SDK路径修改为自定义路径

Failed to install the following Android SDK packages as some licences have not been accepted.    build-tools;30.0.3 Android SDK Build-Tools 30.0.3 To build this project,

accept the SDK license agreements and install the missing components using the Android Studio SDK Manager. All licenses can be accepted using the sdkmanager command line tool: sdkmanager --licenses Or, to transfer the license agreements from one workstation to another, see https://developer.android.com/studio/intro/update.html#download-with-gradle

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第56张

(1)首先licences have not been accepted的问题:

该错误是SDK中的licences未被接受

解决方法:

        1.打开cmd

        2.进入到AS里设置的SDK的安装目录下和tools下的bin目录:/tools/bin

   3.输入 sdkmanager --licenses回车,在接下来出现的lisenses中都输入y接受这些licenses,在回到AndroidStudio中重新编译项目即可。

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第57张

(2)SDK无法安装的问题:

这是由于缺少相关版本的SDK Tools,正常情况下AS在编译时会自动下载缺少的版本

我遇到的问题的原因是:我的AS内设置的SDK路径是Unity编辑器自身的SDK路径,但我试图在AS中手动下载SDK Tools时,会出现安装报错:

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第58张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第59张

Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第60张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第61张

 因此,我将AS的SDK路径修改为自定义的SDK路径

 Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第62张Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程,Unity与原生交互之AndroidStudio篇,Unity导出工程至AndroidStudio打包APK全流程详解 第63张

 再重新编译AS-Rebuild Project,运行正常不再有报错


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码