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

04-08 1090阅读

一.Unity导出Android工程:

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

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

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

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

 二.AS打开unity android工程

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

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

 三.AS集成unityLibrary(推荐)

方式:Import Library Module 

 1.AS先New一个空项目:

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

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

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

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

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

包名不用跟Unity的包名相同

删除多余的Test库

 2.导入 unityLibriry模块

2.1 Import unityLibriry模块

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

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

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

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

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

 *若出现如下错误

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

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

android {
    namespace 'com.android.library'
}

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

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

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

选择Module Dependency 

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

勾选unityLibrary - 点击OK

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

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

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

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

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

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

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

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

  flatDir {

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

            //dirs './unityLibrary/libs'

        }

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

 *若报错找不到路径:

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

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

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

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

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

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

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

android:launchMode="singleTask"

android:process="e.unity3d"

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

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

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

不然编译会报错

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

 2.8 其他配置修改 

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

        增加一句: 

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

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

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

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

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

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

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

 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全流程

 (2)配置AS ndk路径:

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

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

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

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

         进入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导出Android工程,导入AndroidStudio打包APK全流程

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

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

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

        1)注释掉BuildIl2Cpp相关代码

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

        2)用unity导出apk

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

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

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

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

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

 *若出现报错:

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

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

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

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

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

3.编写MainActivity启动代码

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

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

4.配置连接运行设备

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

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

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

5. 运行测试

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

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

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

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

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

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

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全流程

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

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

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

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

 *若出现报错: 

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

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

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

 7.构建APK

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

等待完成:

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

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全流程

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全流程

(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全流程

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

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

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

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

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

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

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

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

VPS购买请点击我

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

目录[+]