Unity工程导出Android项目并集成到已有Android项目

前言:阅读本文档,默认已具备Unity开发经验,以及Android开发基础知识。此文不再讲解Unity和Android Studio等工具使用细节,本文使用Unity2018.4.13f版本。

1.Unity导出Android项目

1.1 Unity导出关键配置以及步骤

图1 Unity项目切换到Android平台,并且勾选Export Project。

图2 OtherSetting中,选择相应的架构

图3 确保Unity中配置了正确的SDK,NDK

图4 点击build界面下方的Export,导出项目

图5 导出的项目结构

1.2 导出项目说明

1.导出的Android项目会把Unity工程中使用到的jar,so整合在一起,Unity本身会生成jar和对应的so,第三方(项目开发者主动引用的jar和so)的不会改变,Export只是简单的Copy操作,意味着关注度低一些,在已有的Android项目中可以代替用到的第三方的jar和so。

2.Unity中可能会有多个Scenes,但是Unity运行到Android设备上时,本质是一个Activity,切换Scene都是在同一个Activity中切换界面。

2.Export项目结构

图6 红圈需要重点关注

2.1 libs文件夹

Libs文件夹存放是Unity项目中Plugin下面的jar包,以及Unity项目Export时生成的对应的jar,如下图,unity-classes.jar是Android和Unity生成so交互的中间件,一般不会重新生成,如果换Unity3d工具版本(例如:原来使用2018.4.13f,后来使用2019.1.1f),这个jar就会重新生成,意味着这个jar需要替换为新生成的jar。若这个jar不替换,在运行Android工程时,会报错(例如:JNI方法找不到)。

图7 unity本身生成的jar

2.2 proguard-unity.txt

proguard-unity.txt文件是Unity混淆文件,在Unity中如果没有修改过,这里只会生成Unity自身的混淆逻辑,第三方jar的混淆需要自行添加。

2.3 src文件夹

图8 src下main文件夹的目录

  1. assets文件夹很重要,Unity项目中的所有模型、场景和数据都会在这里生成。
  2. Java文件夹,关注度低,第一次需要关注,只包含一个java文件,也是唯一的Activity,这个文件一般不会变。
  3. jniLibs文件夹很重要,这个文件夹包含Unity自动生成的so以及第三方依赖的so。
  4. res文件夹关注度低,第一次需要关注,除非在Unity的Plugins中有新增过资源。
  5. AndroidManifest.xml 关注度低,第一次需要关注,集成时,只需要关注Unity生成Activity名称,添加到已有Android项目的AndroidManifest中,以及一些权限等特殊的配置。

2.3.1 assets文件夹

图9 assets文件夹的目录

assets文件夹下,主要关注bin目录,此目录下的数据,每次Export工程,都会重新生成,意味着每次Export项目,都要全部替换此目录下的数据。

2.3.2 java文件夹

图10 java文件夹的目录

Java文件夹下,只有一个Acticity,基本不会变动,不用每次Export后替换。

2.3.3 jniLibs文件夹

图11 jniLibs目录

此目录下存放Unity项目中所有的so库,以及Unity本身生成的so库,第三方依赖so不会改变,我们只需要关注libil2cpp.so、libmain.so和libunity.so这三个文件,因为每次Export,都会生成新的so库,需要主动替换到已有Android项目中。

2.3.4 res文件夹

res虽然不用特别关注,但是根据2018.4.13fExport出的项目,发现strings.xml中有一行item必须添加到已有Android项目中,因为Unity生成的jar中,强制依赖这个资源。如下图。

图12 strings.xml内容

总结

  1. 第一次导出的项目需要关注每个文件,合入到已有Android项目中。之后只需要替换以下文件:

a.assets下的bin/data

b.jniLibs下的libil2cpp.so、libmain.so和libunity.so

2.目前我使用的版本是2018.4.13f,太旧与太新的UnityExport后可能会有所不同,此文可做参考。