本篇使用的 IDE 版本为 Android Studio 1.5.1,Unity 5.4,使用更高的版本理论上不会有很大问题。
在 Unity5 出来之前,我一直都是使用 Eclipse 来写 Android 插件为 Unity 提供支持,但随着 Android Studio 的出现,Google 官方宣布将停止对 Eclipse ADT 的维护,也就是说,用 Android Studio 来开发 Android 应用才是趋势。而 Unity 也跟上了这点,在 Unity5 推出时,表示支持 Android AAR(Android Archive:是一个 Android 库项目的二进制归档文件,为 Android 项目提供模块化支持)格式的文件作为 Unity 插件,而 AAR 格式的文件,正可以使用 Android Stdio 进行生成。
简单而言,AAR 文件我们可以理解成原来使用的 JAR+资源文件,我们不再需要在 Unity 项目中建立多个文件进行插件目录的构建,我们只需要简单地把从 Android Studio 导出的 AAR 文件和对应的 AndroidManifest 文件加到 Plugin/Android 目录下即可。
我们看下具体操作:
1、新建
首先我们要在 Android Studio 上新建一个工程(Project)或模块(Module),这个我想不用过多说明吧,会使用 IDE 的应该都会。
2、修改样式
我们需要在 AndroidManifest 中的 application 结点修改应用的主样式为系统样式,因为导出的 AAR 文件将不带自定义的样式,在我们的 Unity 项目中生成最终 apk 的时候会出现样式找不到的错误。
修改了配置清单后,我们还要对 styles 文件进行样式的注释移除,以防万一。
【Ps:除了样式,我们还要在主 activity 结点下添加<meta-data>信息,否则在 Unity 导出 APK 时会报找不到manifest 文件的错误信息】
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
3、添加 Unity 的 classes.jar 引用
使用过 Eclipse 开发 Android 插件的应该都知道,需要导入 Unity 自带的 classes.jar 包才能对 Unity 的封装方法进行引用。classes.jar 目录位置如下:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\classes.jar
直接烤到 Android Studio 的 app\libs 目录下,然后再 build.gradle 文件下添加依赖:
完成这些步骤,我们就可以使用 Unity 提供的封装方法了。
4、实现 Unity 所依附的 UnityPlayerActivity
在 Unity 中,整个应用都基于 UnityPlayerActivity,我们可以对自己的 Activity 继承 UnityPlayerActivity 实现我们一些特定的需求,也就是我们需要为 Unity 项目提供的功能。具体的内容大家可以参考 qinyuanpei 前辈的这篇文章,里面详细描述了怎样对 Android 和 Unity 实现交互。
5、修改 build.gradle 文件,为导出 AAR 做最后准备
最后我们需要修改上面提到的 build.gradle 文件,指定我们需要导出的是 AAR 文件。
如果我们一开始新建的是一个 Project,那么默认导出的是一个 APK,所以我们需要对导出进行设定:
修改
apply plugin: 'com.android.application'
为
apply plugin: 'com.android.library'
删掉
applicationId "com.xxx.xxx" //你的包名
最后我们得到的 gradle 文件是这样的:
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile files('libs/classes.jar')
}
6、导出 AAR 文件
依次点击 Build->Build APK 生成我们需要的 AAR 文件
生成的 AAR 文件会保存在 app\build\outputs\aar 目录下,名为 app-debug.aar
7、移除classes.jar引用
导出的 AAR 文件中,会包含我们之前导进去的 classes.jar,但是在 Unity 中已经存在该文件,我们需要把它移除,不然会发生冲突。我们用解压软件把 AAR 文件以压缩包的形式打开,删除 libs 下的 classes.jar 文件即可。
8、把 AAR 文件导入 Unity 项目中
最后就是把我们生成的 AAR 文件导入到 Unity 项目中了,把 AAR 文件和 AndroidManifest 文件直接拷到 Plugins/Android 下即可
至此我们就完成了 Android 插件的引入。
后续的交互操作,网上有很多教程,我这里就不再赘述了。
后续:
我在测试时导出的 apk 文件在安装的时候总是安装失败,在捣鼓了一天后发现这是 Unity 指定的安装路径的问题:
在 PlayerSetting 下的 Android 配置中有一项 Install Location,默认为 Prefer External,当我改成 Automatic 后问题就没有了,具体是什么原因,还没弄懂,先 mark 下,有知道的朋友欢迎留言交流。