1. 程式人生 > >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所支援。

以上來自百度百科,詳細的資料請翻閱Unity官方網站

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官方文件: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倉庫,支援傳遞性依賴管理,而不需要遠端倉庫或者是pom.xml和ivy.xml配置檔案,基於Groovy,build指令碼使用Groovy編寫,拋棄了基於XML的各種繁瑣配置。面向Java應用為主。當前其支援的語言限於Java、Groovy和Scala,計劃未來將支援更多的語言。

以上來自百度百科

那麼Gradle對於Android開發者來說到底有多麼的重要呢?最主要的是它真的很方便,以至於你再也不想使用傳統的jar包了。這裡舉個例子吧。比如上面的eclipse專案結構圖中的“libs”資料夾裡面存放著我們專案中所需要的jar包,從表面上看這沒有什麼。但是如果這個時候某個jar升級了是不是需要刪掉舊版本而放入新的版本呢?是的,這也沒什麼。但是如果有很多的jar包都需要升級,並且我們不僅僅使用jar包中類的功能(jar包中存放的是.class檔案)還需要使用相關的資原始檔(圖片、文字、尺寸等等),那麼是不是也需要都一個個的替換、修改呢?那麼當專案一旦很大的時候,這種工作量大不說,而且是需要很謹慎很細的活兒,我們不應該把時間都浪費在這上面,那麼這個時候解救Android程式猿的上帝橫空出世了,他就是——Gradle!有了它之後我們再也不需要這麼麻煩了,我們只需要在Gradle特定的檔案中修改下相關類庫的版本號就可以搞定了,剩下的事就交給Gradle和Android Studio來幫我們進行相應的替換即可。

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.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.android.support.constraint:constraint-layout:1.0.2'
    compile project(':arshowLibrary')
    //recyclerview
    compile 'com.android.support:recyclerview-v7:25.1.1'
    //butterknife
    compile 'com.jakewharton:butterknife:8.4.0'
}

比如上面的內容就是Gradle規定的指令碼,比如現在我們現在需要升級“recyclerview”的版本,那麼就只需要這樣修改即可:

    //recyclerview
    compile 'com.android.support:recyclerview-v7:26.0.0'

然後再點選同步按鈕,接下來的事就交給Android Studio吧。

這裡寫圖片描述

當然Gradle的功能也不僅僅是上面列舉的,它的強大會在我們使用過程中才能體現出來,但是唯一的詬病就是對於國內開發者來說每次升級Gradle版的時候那個是龜速啊。

最後附上Gradle各版本的下載地址

Unity匯出Android工程

上面提到Unity匯出Android工程分eclipse專案和AS(Android Studio,為了簡化書寫以後就使用AS來代替)專案,接下來我們就看看Unity匯出的專案有哪些檔案,以及它的工作流程。

  • Unity匯出操作

    1. Android SDK、Java環境的配置

    Edit --> Preferences

    Unity Preferences

File --> Build Settings

Build Settings

上圖需要說明的是我當前使用的Unity 5.6最新版本,注意“Build System”選項是在Unity 5.5.1版本才支援的,這裡表示支援匯出的Android專案。在這裡有3種選項,我主要針對後兩個進行講解,至於第一種還不太清楚等後續再補上吧,如果知道的朋友可以給我留言啊。

  • 這裡需要注意下,如果提示如下錯誤說明你當前使用的Android SDK版本太高了,Unity當前版本不支援解決的辦法就是隻能使用相對低版本的了,詳情可以參考Unity編譯時找不到AndroidSDK的問題

這裡寫圖片描述

  • 如果出現如下的錯誤提示說明你使用的Android SDK版本太低了,需要升級Android SDK了。不過需要注意的是如果在這裡點選升級的話可能會非常慢,整個節目都卡死了。建議還是直接到相關的網站上去下載對應的版本然後再進行設定。推薦一個國內的下載地址:Android Dev Tools

這裡寫圖片描述

總之當前使用的Unity版本必須是它能識別的SDK版本,想必其它平臺也應該存在這一的問題吧。

這裡寫圖片描述

  • 這個提示是你沒有配置Android專案所需的引數,比如包名、當前安裝包(APK)的版本、支援最低Android版本等。

這裡寫圖片描述

都配置好了後就可以匯出專案了。

  1. AS專案

    • 開啟專案

    這裡寫圖片描述

這裡寫圖片描述

如果有如上的提示是因為你當前AS配置的SDK與你專案的SDK版本不一致,這個時候就需要根據實際情況選擇版本了。

開啟後再整體看下專案結構:

這裡寫圖片描述

這個專案是可以直接拿來執行並生產安裝包(APK)的,當然如果你需要在此專案的基礎上進行新功能的開發,比如使用Android系統中的藍芽。至於Unity怎麼去使用藍芽的功能,那麼就需要Android這邊提供相應的API供Unity端來呼叫即可,當然Unity也可以直接去呼叫Android系統的方法,但是那樣的話對於Unity程式設計師來說可能有點困難,這個時候就涉及到多平臺之間的互動了。基本的互動圖如下:

這裡寫圖片描述

  1. Eclipse專案
    Eclipse整體的專案結構圖請參照上面小結。其實基本的使用跟AS專案一致,只是結構不一樣而已。

支援我寫更多的優質文章,支付寶掃一掃:
這裡寫圖片描述

相關推薦

UnityAndroid互動專案結構

概述 為什麼會寫這樣的文章,原因是我們在使用Unity做開發的時候少不了跟其它平臺做互動,特別是當前流行的Android和iOS。但是由於Unity官方文件缺少這方便詳細的資料,以及每個人的開發水平也參差不齊,再加上涉及到多平臺的互動(不同平臺的開發者不甚瞭解

Unity3D]Unity3D遊戲開發UnityAndroid互動呼叫研究

本文轉載自: http://blog.csdn.net/qinyuanpei/article/details/39348677    記得"仙劍之父“姚壯憲作為評委參加Unity亞洲區的比賽時曾經感慨道:"我學生時也是痴迷於自己不斷鑽研遊戲開發,從各種小遊戲和小工具做起,並

Unity3D遊戲開發UnityAndroid互動呼叫研究

各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我們研究了Android平臺上Unity3D的手勢操作並在之前的基礎上實現了手勢旋轉、放縮等功能。今天呢,我們繼續來研究Unity在Android平臺上擴充套件的內容

[Unity3D]Unity3D遊戲開發UnityAndroid互動呼叫研究

     各位朋友,大家好,我是秦元培,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。在前一篇文章中,我們研究了Android平臺上Unity3D的手勢操作並在之前的基礎上實現了手勢旋轉、放縮等功能。今天呢,我們繼續來研究Unity

unity-Android互動(unity5、android studio)

建議參考新的方式 使用的是工具是 unity5.4,Android Studio 2.0(後面簡稱 AS) 網上找到的教程大部分都是匯出jar給unity呼叫,極少是用AS匯出 aar 包給unity呼叫 用AS匯出jar需要修改一下 build.gra

卜若的程式碼筆記系列-unity系列-第三章:android互動android studio(as)打jar包-5003

1.本章的基礎是有一定的android基礎,當然,沒有android studio開發經驗的同學也可以參考一下,難度並不是太大。 我們這一章的主要目的是建立一個jar包,然後能夠在unity裡面引用。 當然,這一部分僅僅只是在android studio裡面打jar包的部

UnityAndroid互動,使用Android Studio匯出各Unity工程通用的Android外掛包

網上已經有很多關於Unity與Android之間的互動,教程基本都一樣,但是裡面有個都強調的重點是建立安卓工程時包名要和unity的bundle id要一致,這樣我就比較疑惑,如果一些

android H5互動基本

最基本的webView載入頁面 webView.loadUrl(url); 這裡面的url是String型別,可以載入本地的html頁面,如url =“file:///android_asset/index.html”; 載入網頁,如url =“www.baidu.co

Android混合開發(一)——移動端前端互動JSBridge引入

一丶概述 最近轉前端,在做一個混合專案,Android + 前端Vue技術,Vue沒那麼快上手,先分享一下Android部分的經驗,後期會學習Flutter,和RN,邊學邊做邊分享 二丶效果演示 三丶JSBridge引入 1.什麼是JSBridge JSBrid

Android前端互動JSBridge

    在app中,經常會遇到一些活動推廣的頁面,大多數活動具備時效性強、運營時間短的特徵,這些活動一般都是通過H5頁面快速投放到產品的活動模組,來和使用者進行互動。如何建立web頁面和本地Native頁面的深度互動,這就接下來要重點介紹的JSBridge,先看一個效果圖:圖

從零開始實現UnityAndroid互動(一)

之前有SDK接入方面的需求,涉及到一些Unity與Android和iOS原生互動,雖然關於這方面的教程網上有不少,但第一次接觸還是遇到不少問題,這裡有很多坑與程式設計無關,很大一部分是配置不當造成的。在此記錄下來,做個備忘,也方便後來人學習。 第一步:環境搭建 下面是你需

Android — ActivityService互動Binder總結

最近在複習Android跨程序呼叫,整理了一下自己對Binder的一些理解,希望能對大家也有所幫助,如有錯誤歡迎指正~ 為了加深理解,希望看完後能自己操練驗證一下,要不真的很容易眼高手低哦 ps:不想細看,可以只看裡面的3張圖片即可~ ^_^ 好了,迴歸

unityAndroid互動初接觸

嵌入sdk是比較常見的吧,如接入廣告啊,新浪的分享...... 這些都需要接入sdk的,現在我們從最基本的做吧,其實這些和什麼引擎都是沒多大關係的,不管是unity,還是cosos2d......

unity android交互

andro android版本 代碼 http 分享 cnblogs 希望 java blog 使用eclipse新建一個Android應用工程,在新建的過程中,使得這個工程的包名和Unity工程的包名一致,我選的android版本為4.x。unity 的版本是5.4.1

UnityAndroid交互-Unity接入高德地圖實現定位以及搜索周邊的功能(使用Android Studio)詳細操作

nac mcc 以及 分享 pack create lis red 效果 剛進公司給安排的任務就是Unity接入高德地圖,算是踩了不少坑總算做出來了,抽點時間寫個博客記錄一下 廢話不多說 先上效果圖 獲取定位並根據手機朝向顯示周邊信息 使用的Unity

UnityAndroid的問題

jdk android unity r.java appcompat 先說下自己的開發環境Win7 x64Unity5.2.2Android Studio 2.3.2(以下簡稱AS)JDK1.7再說下創建項目在AS中創建一個新項目用empty activity將Unity中的classes

UnityC++互動入門

Unity多執行緒和Job System Job System作業只能訪問blittable資料型別。當在託管程式碼和原生代碼之間傳遞資料時,該型別資料不需要轉換。 關於blittable資料型別在連結二里有介紹。 Unity與C++互動入門(1) https://www.jianshu.com/p/6

unity反饋訊息到ios Unityios互動

本文學習怎麼在unity裡返回訊息到iOS,現實功能(點選unity裡面的按鈕傳遞一個字串到ios顯示在訊息對話方塊上,並且開啟一個新的VeiwContoller)。言歸正傳 首先我們建立一個unity工程,建立一個MainScript指令碼,程式碼如下: using

Vue.js系列專案結構說明

轉:https://www.jb51.net/article/111658.htm 前言 在上一篇專案搭建文章中,我們已經下載安裝了node環境以及vue-cli,並且已經成功構建了一個vue-cli專案,那麼接下來,我們來梳理一下vue-cli專案的結構。 總體框架 一個

《資料結構演算法》資料結構簡介

資料結構=資料+結構,資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。 一、資料的邏輯結構:指反映資料元素之間的邏輯關係的資料結構,其中的