1.配置工程

这里我使用的Unity版本是2021.3.4,Android Studio是2021.2。

其实打包的我认为最主要的问题就是版本兼容,因为不同的版本有不同的迭代更新,使用最新版本进行打包的时候我基本会多多少少遇到一些报错,但其实就是一些简单的文件或者语句的增删,这些错误在以前的打包坑中往往会有解答,耐心多查查资料就出来了。

先下载一个雷电模拟器测试用雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器官网 (ldmnq.com)

这里我建议直接使用UnityHub自动下载好安卓所需要的配置JDK和SDK,因为我自己去官网下载经常遇到一些版本不符合要求的错误。

新建一个安卓工程,然后启动模拟器。

一般新建安卓工程左边和下面会有个进度条展示,表示这个项目还在构建中,等待构建完毕就可以了。

 

 

 构建完成会出现一些文件

 

 

 打开模拟器,打开安卓下面的Logcat窗口,点击运行,然后会自动在模拟器上面安装好安卓文件并且运行,就配置成功了。

 

 

 再检查Unity的JDK和SDK配置就ok了。

 

 

 2.打包测试

使用Unity打安卓包,先转换到平台,记得勾选Export Project导出文件包,而不是直接打apk包。

 

这里我第一次导出的时候直接给我闪退了- -。。。

 

 

 

然后第二次重新打包就可以了。????上面闪退我估计是我电脑开的东西太多了

 

 

 

然后使用 Android Studio 导入刚刚打包的文件

 

 

 然后点击运行,然后我这里报错了,打开下面的build控制输出能看到错误信息,查了下资料说这里的提示意思是说版本不同

 

 

先找到gradle.properties把这段代码删掉 android.enableR8=false

 

然后把下图中的gradle修改为7.0.1的版本,这里并不清楚Unity打出来的文件和安卓所需要的版本为啥不一样

 

 

 

 

 然后运行,就会自动在模拟器上面安装好我们刚刚的Unity工程项目,然后运行就能看到了。

可以看到我标记的框框里面的名字正好对应Unity的PackageName名字

 3.交互测试

打开新建的安卓工程,这里是新建,不是刚刚Unity打出来包,按照图中提示修改。

 

 

 这是修改后的样子

 

 

 写入测试语句

 

 

 然后选择Build Make Project开始构建,切换到Project就能看到构建出来的build文件了

 

 

 找到对应的aar文件,这里包含了资源和代码一些东西,我们需要修改为zip格式,然后打开里面拿到这个classes.jar文件,然后将这个东西放入Unity工程目录的Plugins文件下

 

 

 

 然后搭建测试UI,测试代码

 

 

 

 

 

 

然后这次直接打APK包,然后不出意外的话意外出现了- -

 

 

 

 

 找到刚刚导入Unity的classes文件,修改为zip格式,进入把BuildConfig文件删除掉,这里应该是安卓版本和Unity的版本对不上,所以安卓在构建文件的时候多了个这个东西。

修改完成后记得把classes改回jar格式

 

重新打包,然后又报错了!!!!!!

 

 

 

然后又百度,说要给钥匙,就添加了一个钥匙。

 

 

 

 然后终于成功了,放入模拟器进行运行,Perfect,然后发现运行没反应,原来是没有把场景build进去。

 

 

 然后发现又报错了,提示没找到这个东西方法。

 

 发现是这个包名要和安卓那边的一样

 

 这样交互就成功了!

 

 

 这里是演示C#调用Java那边的,如果想要在Java调用C#其实只要获取对应的API方法就可以了,有一个UnityPlayer.UnitySendMessage方法,直接拿过去用就可以了。

不过要先找到Unity安装目录的classes.jar文件,在放到安卓的位置,然后右键Add As Library添加进去就能引用到Unity封装的方法了,如果没有添加进去下面是没有这三个文件的。

 

 

 

 了解AndroidManifest.xml文件

在我们打包的文件中还有个叫AndroidManifest的文件,其实就是配置文件,我们可以修改它里面的属性来达到我们自己的启动效果。

先搭建我们自己的安卓UI

 

 然后创建测试脚本

 

 再修改xml文件配置,指定启动的时候运行我们的测试脚本,主要是这个intent-filter包含的东西,将它移动到我们自己的测试语句中。

 

 然后就是以下效果就代表成功了。

 

关于安卓动态请求

比如就是向手机发起是否能使用摄像机权限,这里要注意的是安卓SDK要和Unity的SDK要一致,然后要在Unity的andoridmanifest.xml添加对应的权限信息。

这里附上别人写的

(21条消息) Unity2019中的android动态申请权限(Permissions)_东方快弟的博客-CSDN博客_unity 动态申请权限

//如果没有摄像机权限,那就弹出权限提示框
        if(!Permission.HasUserAuthorizedPermission(Permission.Camera))
        {
            Permission.RequestUserPermission(Permission.Camera);
        }