放下Eclipse,用Android Studio开发Unity

作者: Ojors | 来源:发表于2016-09-12 15:16 被阅读2325次

本篇使用的 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 的时候会出现样式找不到的错误。


Android应用主样式

修改了配置清单后,我们还要对 styles 文件进行样式的注释移除,以防万一。


styles目录位置 styles文件,注释即可

【Ps:除了样式,我们还要在主 activity 结点下添加<meta-data>信息,否则在 Unity 导出 APK 时会报找不到manifest 文件的错误信息】

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
meta-data

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 文件下添加依赖:

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 文件即可。

libs目录

8、把 AAR 文件导入 Unity 项目中
最后就是把我们生成的 AAR 文件导入到 Unity 项目中了,把 AAR 文件和 AndroidManifest 文件直接拷到 Plugins/Android 下即可

文件目录结构

至此我们就完成了 Android 插件的引入。
后续的交互操作,网上有很多教程,我这里就不再赘述了。


后续:
我在测试时导出的 apk 文件在安装的时候总是安装失败,在捣鼓了一天后发现这是 Unity 指定的安装路径的问题:
在 PlayerSetting 下的 Android 配置中有一项 Install Location,默认为 Prefer External,当我改成 Automatic 后问题就没有了,具体是什么原因,还没弄懂,先 mark 下,有知道的朋友欢迎留言交流。

相关文章

网友评论

  • 5a3f41ef653b:安装到手机上闪退怎么解决呀
  • 男爵卡波:“8、把 AAR 文件导入 Unity 项目中
    最后就是把我们生成的 AAR 文件导入到 Unity 项目中了,把 AAR 文件和 AndroidManifest 文件直接拷到 Plugins/Android 下即可” 你这个AndroidManifest 是哪里来的,是哪里来的啊,能不能把话说得清楚一点啊。
    5a3f41ef653b:安装到手机上 闪退 怎么解决:pray:
    东北大熊:@男爵卡波 android项目中manifest
  • ssdfsj:请问多个AAR互相依赖怎么解决?
    有个安卓SDK是3个AAR的。我再写了一个AAR来调用,里面import到那三个aar的东西。全部放到在unity时候就报错了,xml文件说找不到com.XXXXX(就是安卓SDK里面的东西)。但是我在AS是可以引用的。求救
    东北大熊:copy过去就行,不用在grade引用代码
    ssdfsj:@东北大熊 我导出的aar里只有我自己的代码跟布局文件, 没有任何关于其他aar的东西....

    引用其他aar, 我做法是直接放到libs然后在grade里面写添加代码, 最后在代码中能正确import里面的任何类, build apk出来的aar就是没有包含其他aar , 请问是哪里出错吗?
    东北大熊:@ChokWah 可以在as项目中引用其他aar,修改manifest文件,再导出一个总得aar包。。
  • 这真不是玩笑:按照你的步骤在unity中引入aar文件,但在导出apk的时候出现
    IOException: Failed to Move File / Directory from 'Temp/StagingArea/android-libraries/app-debug/classes.jar' to 'Temp/StagingArea/android-libraries/app-debug/libs/classes.jar'.
    Ojors:@请叫我百米冲刺 你在移除classes.jar包是整个libs删了还是只移除里面的.jar包?如果是后者的话应该是没问题的

本文标题:放下Eclipse,用Android Studio开发Unity

本文链接:https://www.haomeiwen.com/subject/nyupettx.html