Unity与Android的交互之项目结构

Unity与Android的交互之项⽬结构
概述
为什么会写这样的⽂章,原因是我们在使⽤Unity做开发的时候少不了跟其它平台做交互,特别是当前流⾏的Android和iOS。但是由于Unity 官⽅⽂档缺少这⽅便详细的资料,以及每个⼈的开发⽔平也参差不齐,再加上涉及到多平台的交互(不同平台的开发者不甚了解其它平台的特性、语⾔)也不尽相同,所以很多时候我们在开发过程中遇到各种各样的问题,从⽽导致我们开发效率低下、问题很多。因此,为了避免这⽅⾯的开发者少⾛弯路我在这⾥记下相关的知识。
先简单的介绍下各平台的简历吧。
Unity3D
是由Unity
Technologies开发的⼀个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发⼯具,是⼀个全⾯整合的专业游戏引擎。Unity类似于Director,Blender
game engine, Virtools 或 Torque Game
Builder等利⽤交互的图型化开发环境为⾸要⽅式的软件。其编辑器运⾏在Windows 和Mac OS
X下,可发布游戏⾄Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone
8和Android平台。也可以利⽤Unity web
player插件发布⽹页游戏,⽀持Mac和Windows的⽹页浏览。它的⽹页播放器也被Mac widgets所⽀持。
以上来⾃,详细的资料请翻阅
Android
是⼀种基于Linux的⾃由及开放源代码的操作系统,主要使⽤于移动设备,如智能⼿机和平板电脑,由Google公司和开放⼿机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要⽀持⼿机。2005年8⽉由Google收购注资。2007年11⽉,Google与84家硬件制造商、软件开发商及电信营运商组建开放⼿机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权⽅式,发布了Android的源代码。第⼀部Android智能⼿机发布于2008年10⽉。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。
发⾏版本:测试版本、1.1、1.5、1.6、2.0、2.3、3.0、4.x、5.0、6.0、7.0
系统结构:系统内核、后缀简介、硬件抽象层、中介软件、安全权限机制
应⽤组件:Activity、Service、Broadcast Receiver、Content Provider
平台优势:开放性、丰富的硬件、⽅便开发、Google应⽤
每个版本的新特性也都不⼀样,如果需要了解各版本的区别请翻阅Google官⽅⽂档:
平台架构
Android 是⼀种基于 Linux 的开放源代码软件栈,为⼴泛的设备和机型⽽创建。下图所⽰为 Android 平台的主要组件。
Linux 内核
电话报警系统
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执⾏底层功能,例如线程和低层内存管理。
使⽤ Linux 内核可让 Android 利⽤主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
硬件抽象层 (HAL)
硬件抽象层 (HAL) 提供标准界⾯,向更⾼级别的 Java API 框架显⽰设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现⼀个界⾯,例如相机或蓝⽛模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
Android Runtime
对于运⾏ Android 5.0(API 级别 21)或更⾼版本的设备,每个应⽤都在其⾃⼰的进程中运⾏,并且有其⾃⼰的 Android Runtime (ART) 实例。ART 编写为通过执⾏ DEX ⽂件在低内存设备上运⾏多个虚拟机,DEX ⽂件是⼀种专为 Android 设计的字节码格式,经过优化,使⽤的内存很少。编译⼯具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运⾏。
ART 的部分主要功能包括:
预先 (AOT) 和即时 (JIT) 编译
优化的垃圾回收 (GC)
更好的调试⽀持,包括专⽤采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段
在 Android 版本 5.0(API 级别 21)之前,Dalvik 是 Android Runtime。如果您的应⽤在 ART 上运⾏效果很好,那么它应该也可在 Dalvik 上运⾏,但反过来不⼀定。
Android 还包含⼀套核⼼运⾏时库,可提供 Java API 框架使⽤的 Java 编程语⾔⼤部分功能,包括⼀些 Java 8 语⾔功能。
原⽣ C/C++ 库
许多核⼼ Android 系统组件和服务(例如 ART 和 HAL)构建⾃原⽣代码,需要以 C 和 C++ 编写的原⽣库。Android 平台提供 Java 框架API 以向应⽤显⽰其中部分原⽣库的功能。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以⽀持在应⽤中绘制和操作 2D 和 3D 图形。
如果开发的是需要 C 或 C++ 代码的应⽤,可以使⽤ Android NDK 直接从原⽣代码访问某些原⽣平台库。
Java API 框架
您可通过以 Java 语⾔编写的 API 使⽤ Android OS 的整个功能集。这些 API 形成创建 Android 应⽤所需的构建块,它们可简化核⼼模块化系统组件和服务的重复使⽤,包括以下组件和服务:
丰富、可扩展的视图系统,可⽤以构建应⽤的 UI,包括列表、⽹格、⽂本框、按钮甚⾄可嵌⼊的⽹络浏览器
资源管理器,⽤于访问⾮代码资源,例如本地化的字符串、图形和布局⽂件
通知管理器,可让所有应⽤在状态栏中显⽰⾃定义提醒
Activity 管理器,⽤于管理应⽤的⽣命周期,提供常见的导航返回栈
内容提供程序,可让应⽤访问其他应⽤(例如“联系⼈”应⽤)中的数据或者共享其⾃⼰的数据
电加热棒开发者可以完全访问 Android 系统应⽤使⽤的框架 API。
系统应⽤
Android 随附⼀套⽤于电⼦邮件、短信、⽇历、互联⽹浏览和联系⼈等的核⼼应⽤。平台随附的应⽤与⽤户可以选择安装的应⽤⼀样,没有特殊状态。因此第三⽅应⽤可成为⽤户的默认⽹络浏览器、短信 Messenger 甚⾄默认键盘(有⼀些例外,例如系统的“设置”应⽤)。
系统应⽤可⽤作⽤户的应⽤,以及提供开发者可从其⾃⼰的应⽤访问的主要功能。例如,如果您的应⽤要发短信,您⽆需⾃⼰构建该功能,可以改为调⽤已安装的短信应⽤向您指定的接收者发送消息。
开发环境
Android开发主要分应⽤层开发和框架层开发。
应⽤层开发
开发语⾔开发⼯具说明
Java Android Studio(推荐)由IDEA的基础上开发过来,已经集成了⼤量Android所需的开发环境
C/C++eclipse(已废弃)Android开发早期使⽤,在2014年被Google废弃
XML IDEA(不推荐)强⼤的Java集成开发环境,可以安装Android插件来开发,但是还是推荐使⽤Android Studio
SQL NDK、CMake Android应⽤层调⽤C/C++库所需的⼯具,不过⽬前⽀持不是很好
水密电缆
总⽽⾔之,不管是Unity开发者还是Android开发者,上⾯的平台架构、开发环境等都应该能掌握(Android开发者应该精通才⾏),这样在开发过程中能帮你解决不少问题。同时率
Eclipse与Android Studio的项⽬结构
虽然eclipse已经被废弃了,但是作为Android开发者,我们还是有必要了解下早期的开发⼯具,这样有助于我们更好的了解我们的项⽬。
eclipse项⽬结构
eclipse是早期的开发⼯具,⽽对于低版本的Unity来说,Unity导出的Android⼯程也是eclipse项⽬,不过在Unity 5.5.1版本开始⽀持Android Studio项⽬了,这样对于Unity与Android之间的交互变得更简单了。
可利霉素作用与用途Android Studio项⽬结构
这⾥需要重点说明⼀下“libs”和“assets”⽂件夹,这两个⽂件夹对于Unity导出的Android项⽬来说很重要,后⾯会重点介绍。
Gradle
对于Android Studio来说,gradle也是⼀个需要重点掌握的⾃动化构建⼯具。有了它我们在开发Android应⽤就很⽅便了。
Gradle是⼀个基于Apache Ant和Apache Maven概念的项⽬⾃动化建构⼯具。基于JVM的构建⼯具,
是⼀款通⽤灵活的构建⼯具,⽀持maven, Ivy仓库,⽀持传递性依赖管理,⽽不需要远程仓库或者是l和l配置⽂件,基于Groovy,build脚本使⽤Groovy编写,抛弃了基于XML的各种繁琐配置。⾯向Java应⽤为主。当前其⽀持的语⾔限于Java、Groovy和Scala,计划未来将⽀持更多的语⾔。
以上来⾃
那么对于Android开发者来说到底有多么的重要呢?最主要的是它真的很⽅便,以⾄于你再也不想使⽤传统的jar包了。这⾥举个例⼦吧。⽐如上⾯的eclipse项⽬结构图中的“libs”⽂件夹⾥⾯存放着我们项⽬中所需要的jar包,从表⾯上看这没有什么。但是如果这个时候某个jar升级了是不是需要删掉旧版本⽽放⼊新的版本呢?是的,这也没什么。但是如果有很多的jar包都需要升级,并且我们不仅仅使⽤jar包中类的功能(jar包中存放的是.class⽂件)还需要使⽤相关的资源⽂件(图⽚、⽂字、尺⼨等等),那么是不是也需要都⼀个个的替换、修改呢?那么当项⽬⼀旦很⼤的时候,这种⼯作量⼤不说,⽽且是需要很谨慎很细的活⼉,我们不应该把时间都浪费在这上⾯,那么这个时候解救Android程序猿的上帝横空出世了,他就是——Gradle!有了它之后我们再也不需要这么⿇烦了,我们只需要在Gradle特定的⽂件中修改下相关类库的版本号就可以搞定了,剩下的事就交给Gradle和Android Studio来帮我们进⾏相应的替换即可。
⽐如上⾯的内容就是Gradle 规定的脚本,⽐如现在我们现在需要升级“recyclerview”的版本,那么就只需要这样修改即可:然后再点击同步按钮,接下来的事就交给Android Studio 吧。
当然Gradle 的功能也不仅仅是上⾯列举的,它的强⼤会在我们使⽤过程中才能体现出来,但是唯⼀的诟病就是对于国内开发者来说每次升级Gradle 版的时候那个是龟速啊。
最后附上Gradle 各版本的。
Unity 导出Android ⼯程
上⾯提到Unity 导出Android ⼯程分eclipse 项⽬和AS (Android Studio ,为了简化书写以后就使⽤AS 来代替)项⽬,接下来我们就看看Unity 导出的项⽬有哪些⽂件,以及它的⼯作流程。
Unity 导出操作
1. Android SDK 、Java 环境的配置
上图需要说明的是我当前使⽤的Unity 5.6最新版本,注意“Build System”选项是在Unity 5.5.1版本才⽀持的,这⾥表⽰⽀持导出的Android 项⽬。在这⾥有3种选项,我主要针对后两个进⾏讲解,⾄于第⼀种还不太清楚等后续再补上吧,如果知道的朋友可以给我留⾔啊。
这⾥需要注意下,如果提⽰如下错误说明你当前使⽤的Android SDK 版本太⾼了,Unity 当前版本不⽀持解决的办法就是只能使⽤相对低版本的了,详情可以参考。
如果出现如下的错误提⽰说明你使⽤的Android SDK 版本太低了,需要升级Android SDK 了。不过需要注意的是如果在这⾥点击升级的话可能会⾮常慢,整个节⽬都卡死了。建议还是直接到相关的⽹站上去下载对应的版本然后再进⾏设置。推荐⼀个国内的下载地址:
总之当前使⽤的Unity 版本必须是它能识别的SDK 版本,想必其它平台也应该存在这⼀的问题吧。
这个提⽰是你没有配置Android 项⽬所需的参数,⽐如包名、当前安装包(APK )的版本、⽀持最低Android 版本等。
都配置好了后就可以导出项⽬了。4g手机电子围栏
dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.st.espresso:espresso-core:2.2.2', {        exclude group : 'com.android.support', module: 'support-annotations'    })    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:25.2.0'    compile 'com.android.support:design:25.2.0'    compile 'com.android.support:recyclerview-v7:25.2.0'    compile 'com.straint:constraint-la
yout:1.0.2'    compile project(':arshowLibrary')    //recyclerview    compile 'com.android.support:recyclerview-v7:25.1.1'    //butterknife    compile 'com.jakewharton:butterknife:8.4.0'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16    //recyclerview    compile 'com.android.support:recyclerview-v7:26.0.0'
1
2
1. AS项⽬
1. 打开项⽬
如果有如上的提⽰是因为你当前AS配置的SDK与你项⽬的SDK版本不⼀致,这个时候就需要根据实际情况选择版本了。
打开后再整体看下项⽬结构:
这个项⽬是可以直接拿来运⾏并⽣产安装包(APK)的,当然如果你需要在此项⽬的基础上进⾏新功能的开发,⽐如使⽤Android系统中的蓝⽛。⾄于Unity怎么去使⽤蓝⽛的功能,那么就需要Android这边提供相应的API供Unity端来调⽤即可,当然Unity也可以直接去调⽤Android系统的⽅法,但是那样的话对于Unity程序员来说可能有点困难,这个时候就涉及到多平台之间的交互了。基本的交互图如下:
1. Eclipse项⽬
Eclipse整体的项⽬结构图请参照上⾯⼩结。其实基本的使⽤跟AS项⽬⼀致,只是结构不⼀样⽽已。

本文发布于:2024-09-22 05:42:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/159932.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:开发   平台   需要   版本   硬件   功能   系统   例如
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议