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

这篇具有很好参考价值的文章主要介绍了Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.Unity导出Android工程:

 unity导出整个项目,Unity与Android交互专栏,android,unity unity导出整个项目,Unity与Android交互专栏,android,unity

 unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

 二.AS打开unity android工程

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

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

 三.AS集成unityLibrary(推荐)

方式:Import Library Module 

 1.AS先New一个空项目:

 unity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

包名不用跟Unity的包名相同

删除多余的Test库

 2.导入 unityLibriry模块

2.1 Import unityLibriry模块

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unity

 *若出现如下错误

unity导出整个项目,Unity与Android交互专栏,android,unity

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

android {
    namespace 'com.android.library'
}

unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

选择Module Dependency 

unity导出整个项目,Unity与Android交互专栏,android,unity

勾选unityLibrary - 点击OK

 unity导出整个项目,Unity与Android交互专栏,android,unity

 unity导出整个项目,Unity与Android交互专栏,android,unity

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

把 implementation 改为 api ,点击syncunity导出整个项目,Unity与Android交互专栏,android,unity

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

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

unity导出整个项目,Unity与Android交互专栏,android,unity

 *若报错找不到路径:

unity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

android:launchMode="singleTask"

android:process="e.unity3d"

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

不然编译会报错

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

 2.8 其他配置修改 

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

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

        运行后提示unity导出整个项目,Unity与Android交互专栏,android,unity,通过添加上面代码后可以解决

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

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

 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导出整个项目,Unity与Android交互专栏,android,unity

 (2)配置AS ndk路径:

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

        unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity  unity导出整个项目,Unity与Android交互专栏,android,unity

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

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

        1)注释掉BuildIl2Cpp相关代码

        unity导出整个项目,Unity与Android交互专栏,android,unity

        2)用unity导出apk

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

        unity导出整个项目,Unity与Android交互专栏,android,unity

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

 *若出现报错:

unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

3.编写MainActivity启动代码

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

4.配置连接运行设备

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

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

5. 运行测试

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

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

        unity导出整个项目,Unity与Android交互专栏,android,unity

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

        unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

6.集成unityLibrary补充配置

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

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

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

 unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

unity导出整个项目,Unity与Android交互专栏,android,unity

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

 *若出现报错: 

unity导出整个项目,Unity与Android交互专栏,android,unity

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

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

 7.构建APK

unity导出整个项目,Unity与Android交互专栏,android,unity

等待完成:

unity导出整个项目,Unity与Android交互专栏,android,unity

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导出整个项目,Unity与Android交互专栏,android,unity

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导出整个项目,Unity与Android交互专栏,android,unity

(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导出整个项目,Unity与Android交互专栏,android,unity

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

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

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

 unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

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

 unity导出整个项目,Unity与Android交互专栏,android,unityunity导出整个项目,Unity与Android交互专栏,android,unity

 再重新编译AS-Rebuild Project,运行正常不再有报错文章来源地址https://www.toymoban.com/news/detail-667931.html

到了这里,关于Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Android Studio 混合开发实践(Unity工程导入Android项目进行开发)

    最近接到一个任务是将一个unity开发的游戏接入到现有的Android项目里,然后在现有的App实现点击一个按钮打开游戏,并且在游戏内提供一个可以退出到App的按钮。 整体需求是很明确的,难点主要有两个: 我们公司是做应用开发的,没有任何游戏开发的技能储备。 在游戏中需

    2024年02月11日
    浏览(43)
  • AndroidStudio导入Android源码

    导入工具阅读源码这里是依靠了Android源码自带的idegen神器,development/tools/idegen/目录下有个README文件 在导入源码之前,记得一定要正确的通过全部源码的编译。 1)、切换到Android源码的目录,导入环境变量  2)选择要生成的版本,lunch 3)编译idegen,生成idegen.jar 在这一步如果

    2024年02月12日
    浏览(23)
  • AndroidStudio导入Android AOSP源码

    编译完成后,就可以在Android源码的根目录下看到android.iml和android.ipr文件了。 打开android.iml文件看看,默认把几乎所有的源码都导入了,只有几个文件夹被排除在外,工程将会非常大,而且会很耗时间。 然而我们并不关心这么多的源码,我们可以自己加excludeFolder标签,把自己

    2024年02月01日
    浏览(79)
  • 【云原生】Docker镜像和容器的导入导出及常用命令

    大家好,本文是对 Docker 的镜像和容器的一些操作指令的汇总,比如镜像和容器的导入导出,以及一些在使用过程中的常用命令。希望对大家有所帮助~ 1.1、镜像的导入导出 1.1.1、镜像的保存 通过镜像ID保存 方式一: 例如: 方式二: 例如: 通过镜像 repository 和 tag 保存 例如

    2024年02月02日
    浏览(39)
  • Java原生POI实现的Excel导入导出(简单易懂)

    首先是Controller入口方法 这个接口在postman上传参是下面这样的: 注意里面的参数名称要和接口上的一致,不然会拿不到值 还有file那里key的类型要选file类型的,这样就可以在后面value里面选择文件 然后是Service方法 首先是Controller入口 strJson是用来接受其它参数的,一般导出的

    2024年02月11日
    浏览(35)
  • Unity中实现动画数据导出导入

    目录 数据导出: 数据导入 解析数据播放动画 根据曲线插值每帧计算数据,模拟Unity中动画播放系统,实现不通过动画控制器播放动画的功能,解决帧同步中动画结果无法预测问题,其实有可能涉及到对动画插值算法的模拟。 数据导出: 首先我们要大概梳理一下Unity中动画控

    2023年04月13日
    浏览(36)
  • 【Unity入门】资源包导入和导出

        大家好,我是Lampard~~     欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢     Unity的资源(模型,场景,脚本)等都保存在Assert目录下,我们 随便 选中一个资源,右键Show In Explore 就可以在Window文件夹中看到我们的资源目录     燃鹅,我们除了看到在编辑

    2023年04月26日
    浏览(39)
  • uniapp 与原生android 的交互

    uniapp打开第三方程序可以通过 HTML5+ API 的 runtime API 和 importClass 反射获取Android的Intent对象来实现,有两种方式,先说最简单的。 通过 runtime 可以跳转第三方程序,但是要指定的页面需要通过 runtime.openUrl 传入URLsheme地址 目前有个需求,需要和android进行交互并传参数过去然后进

    2024年02月14日
    浏览(21)
  • Flutter 与原生交互(Android,iOS)

    本质上 Flutter 和 原生通信是通过 Channel 来完成的:Flutter中消息的传递是完全异步的; 消息使用 Channel(平台通道) 在客户端(UI) 和主机(p平台) Flutter 与 native端交互三种方式 1.BasicMessageChannel (用于传递字符串和半结构化信息,持续通信使用,例如dart端将服务器的数据陆续传入到

    2024年02月17日
    浏览(36)
  • Android 原生功能与 Vue 交互实现

    前端用 Android webview 嵌入 vue 地址,如何在vue 页面中显示 Android 版本号 从Android中将该信息传递给Vue应用程序。可以通过使用WebView的Java Bridge来实现此目的。这里是一些可能有用的步骤: 在你的Android代码中,使用getBuildVersionName()或getBuildVersionCode()等方法来获取Android的版本号。

    2024年04月24日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包