签到领奖

[图文教程] 放下Eclipse,用Android Studio开发Unity Android插件

[复制链接]
查看: 1551|回复: 0
3江湖小虾
472/500
排名
272
昨日变化
5
发表于 2016-12-30 11:33:10 | 显示全部楼层 |阅读模式
本篇使用的 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,所以我们需要对导出进行设定:
修改
[AppleScript] 纯文本查看 复制代码
apply plugin: 'com.android.application'

[AppleScript] 纯文本查看 复制代码
apply plugin: 'com.android.library'
删掉
[AppleScript] 纯文本查看 复制代码
applicationId "com.xxx.xxx"  //你的包名
最后我们得到的 gradle 文件是这样的:
[AppleScript] 纯文本查看 复制代码
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 下,有知道的朋友欢迎留言交流。


文/Ojors

[发帖际遇]: 天长第9 拉登想跟你学用unity做航母,这是 1 泰斗币当学费了. 幸运榜 / 衰神榜
最近访问 头像模式 列表模式
+1
1552°C
沙发哦 ^ ^ 马上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

在线客服(工作时间:9:00-22:00)
010-82609395
泰斗社区公众号

Copyright   ©2015-2016  【泰斗社区】-专注互联网游戏和应用的开发者平台  Powered by©Discuz!  技术支持:迪恩网络     ( 沪ICP备14023207号-9 )