一.Unity导出Android工程:
unityLibrary: unity的功能库模块 , android工程用到的重要文件夹
launcher: unity的启动器模块,包含很少的java代码
二.AS打开unity android工程
直接Open unity导出的整个android项目,Launcher模块作为app启动模块
三.AS集成unityLibrary(推荐)
方式:Import Library Module
1.AS先New一个空项目:
Empty Activity 不能选择Language,默认为Kotlin语言
Empty Views Activity 可以选择Language (新版本推荐)
包名不用跟Unity的包名相同
删除多余的Test库
2.导入 unityLibriry模块
2.1 Import unityLibriry模块
*等待编译后会出现报错:
解决方式:在工程级的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'
}
*若报错找不到路径:
解决方式1:将内容改为如下
解决方式2:将内容改为如下
2.6 修改unityLibrary下的 /src/main/AndroidManifest.xml文件,内容如下
在<activity 中增加一句: android:process="e.unity3d"
android:launchMode="singleTask"
android:process="e.unity3d"
这两句使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:配置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'
}
(2)配置AS ndk路径:
打开工程级下的local.properties文件,添加如下代码 ,指定ndk路径:
可以直接使用Unity的NDK,也可以使用自己下载的
进入file/Project Structure-SDK Location 可以查看到SDK 与 NDK 路径配置
若电脑中没有ndk,可点击Download下载,自动下载到配置SDK的路径下的,下载完后再在local.properties文件中配置上对应路径ndk.dir=D\:/SDK/ndk-bundle即可
(3)修改unityLibrary 下的build.gradle文件,打开BuildIl2Cpp相关代码
解决方式2:(推荐情况:mac电脑,无法执行exe,只能采用此方式)
1)注释掉BuildIl2Cpp相关代码
2)用unity导出apk
3)然后解压apk,从中提取出libil2cpp.so文件
4)拖入到AS中的unityLibrary/src/main/jniLibs/arm64-v8a/路径里
选取任意一种方式处理后,重新Build - Make Moudle 'xxx.unityLibrary' 进行编译
*若出现报错:
解决方式:根据日志信息,把unityLibrary下的AndroidMainfest.xml文件里第二行中的package="com.unity3d.player" 删除即可,再次Build不再报错
注:但是不知道删除此句会不会影响其他,目前运行打包均正常,未发现异常影响
自此,unityLibrary就全部集成完毕,Android工程app模块可以正常引用com.unity3d.player.UnityPlayerActivity
3.编写MainActivity启动代码
修改app下的MainActivity.java,继承UnityPlayerActivity
4.配置连接运行设备
4.1 下载安装雷电模拟器,并运行打开模拟器
4.2 AS会自动识别并设置运行目标设备为打开的模拟器
5. 运行测试
5.1点击绿色三角图标,运行
5.2 等待编译、构建,成功后如下
切换到模拟器窗口,app已被安装运行
6.集成unityLibrary补充配置
6.1 在项目级别(app)的AndroidMainfest.xml文件里,在图中位置加入这两行代码(可选)
xmlns:tools="http://schemas.android.com/tools"
tools:replace="android:icon,android:theme,android:allowBackup"
6.2 保持原生与unityLibrary的SDK版本一致(可选)
同步项目级(app)的build.gradle部分数据到应用级(unityLibrary)的build.gradle
6.3 选择unityLibrary,Build - Make Moudle 'xxx.unityLibrary',开始编译
*若出现报错:
则就是ndk配置问题,找不到ndk,解决方式查看上面2.9
出现这个问题的原因是:unityLibrary编译时会依赖ndk 来执行il2cpp.exe生成libil2cpp.so文件
7.构建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)
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
或
(1)首先licences have not been accepted的问题:
该错误是SDK
中的licences
未被接受
解决方法:
1.打开cmd
2.进入到AS里设置的SDK
的安装目录下和tools
下的bin目录:/tools/bin
3.输入 sdkmanager --licenses
回车,在接下来出现的lisenses
中都输入y
接受这些licenses
,在回到AndroidStudio
中重新编译项目即可。
(2)SDK无法安装的问题:
这是由于缺少相关版本的SDK Tools,正常情况下AS在编译时会自动下载缺少的版本
我遇到的问题的原因是:我的AS内设置的SDK路径是Unity编辑器自身的SDK路径,但我试图在AS中手动下载SDK Tools时,会出现安装报错:
因此,我将AS的SDK路径修改为自定义的SDK路径
文章来源:https://www.toymoban.com/news/detail-667931.html
再重新编译AS-Rebuild Project,运行正常不再有报错文章来源地址https://www.toymoban.com/news/detail-667931.html
到了这里,关于Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!