本文屬于「Unity與iOS誉裆、Android平臺的整合」系列文章之一顿颅,轉(zhuǎn)載請注明出處。
Unity默認(rèn)導(dǎo)出的是Android-Eclipse工程足丢,畢竟Eclipse for Android開發(fā)在近一兩年才開始沒落粱腻,用戶量還是非常巨大的。
個人認(rèn)為AndroidStudio非常好用斩跌,能輕易解決很多Eclipse解決不了或者很難解決的問題绍些。
所以我將Unity導(dǎo)出的Andoid工程分為Eclipse和AndroidStudio兩部分。
不過我之后的相關(guān)內(nèi)容都會使用AndroidStudio耀鸦,希望依然使用Eclipse的同學(xué)盡快跟上~
本文主要講解Unity導(dǎo)出的Android-Studio工程的目錄結(jié)構(gòu)柬批。
話先說在前面,這篇文章和1、導(dǎo)出的Xcode工程 非常相似氮帐,我建議手游開發(fā)者將兩篇結(jié)合起來看~
同時锻霎,我建議大家完整閱讀姊妹篇2、導(dǎo)出的Android-Eclipse工程 揪漩,以建立完整的流程認(rèn)知體系。
我所用軟件的版本:
Unity 5.3.5f1
AndroidStudio 1.3.1
前導(dǎo)步驟
第一步吏口,創(chuàng)建一個新的工程 Unity_Build_to_Android
第二步奄容,創(chuàng)建以下文件
//為了演示原生Android的jar包
Plugins/Android/libs/Jar.jar
//為了演示原生Android調(diào)用jni所需要的.so文件
Plugins/Android/libs/x86/libnative.so
//為了演示原生Android調(diào)用jni所需要.so文件
Plugins/Android/libs/armeabi-v7a/libnative.so
//為了演示Unity中隨包只讀文件的去向
StreamingAssets/ALL_EmptyTxt.txt
第三步,保存一下場景产徊,如下圖
第四步昂勒,打開PlayerSettings,修改Bundle Identifier(包名)舟铜,Unity里面不修改不讓導(dǎo)出Android的~
第五步戈盈,選擇Android平臺,Export導(dǎo)出Android工程
第六步谆刨,使用AndroidStudio打開該Eclipse工程
選中Unity導(dǎo)出了Eclipse工程塘娶,OK。
存儲到合適的路徑痊夭,Next刁岸。
三個勾都選上,F(xiàn)inish
進(jìn)入正題
0她我、Eclipse -> AndroidStudio
我們先來看看從Eclipse工程到AndroidStudio工程虹曙,在結(jié)構(gòu)上有哪些變化,下圖為AndroidStudio工程自動生成的導(dǎo)入摘要番舆。
通過這個文件我們可以看到酝碳,AndroidStudio其實是建立了一個新的AndroidStudio工程,然后將原Eclipse工程中有用的文件轉(zhuǎn)移到對應(yīng)目錄恨狈。
顯而易見的遷移就不說了疏哗,主要看看libs文件夾中的遷移方向,我們可以看到.jar文件都轉(zhuǎn)移到了app/libs文件夾下拴事、/.so文件都轉(zhuǎn)移到了app/src/main/jniLibs文件夾下/*.so沃斤。
1、程序入口
任何程序都有一個入口刃宵,Unity導(dǎo)出的Android工程中也不例外衡瓶,通過下圖我們可以看到,在AndroidManifest.xml文件中牲证,將UnityPlayerActivity設(shè)置為應(yīng)用的入口哮针。(AndroidManifest.xml是Android的配置文件之一,具體請自行搜索~)
通過下圖我們可以看到,UnityPlayerActivity是繼承了Activity十厢,至于它是什么我就不贅述了等太,大家可以看一下這一篇文章:Activity詳解(生命周期、以各種方式啟動Activity蛮放、狀態(tài)保存缩抡,完全退出等)
下圖為一個Activity的生命周期,我們可以看到系統(tǒng)事件存在著非常有用的監(jiān)聽包颁,在UnityPlayerActivity.java里面我們也可以看到對應(yīng)的函數(shù)瞻想,這意味著在Unity中一樣可以收到這些事件,以后我們將繼承UnityPlayerActivity娩嚼,并重寫這些監(jiān)聽蘑险。
2、C# -> C++
這就是個很尷尬的問題了岳悟,現(xiàn)在5.3.5的版本還不支持在Android平臺下使用IL2CPP的模式佃迄,但是5.4的版本已經(jīng)可以支持了,這一點我打算等5.4的版本出了再補上~
3贵少、資源 StreamingAssets -> app/src/main/assets
Unity導(dǎo)出Android工程后呵俏,原工程中的各種資源都被壓縮、打包春瞬、加密后存放在app/src/main/assets/bin/Data文件夾中柴信,見下圖,這一點和iOS是一致的宽气,網(wǎng)上也有很多資源解密的方法随常,大家有需要可以自行搜索。
我們重點說一下Unity中的StreamingAssets文件夾萄涯,關(guān)于這個文件的作用绪氛,大家可以看一下這篇文章:Unity3D研究院之手游開發(fā)中所有特殊的文件夾
通過下圖我們可以看到,StreamingAssets文件夾中的ALL_EmptyTxt.txt文件被完整地拷貝到assets文件夾中涝影,實際上不光是文件枣察,文件夾也會原封不動地拷入該文件夾。
至于這有什么用燃逻,比如說序目,配置文件放在這里,上手機(jī)調(diào)試的話可以在Android工程中直接修改配置伯襟,而不需要到Unity里重新導(dǎo)出Android工程猿涨。
4、 Plugins/Android/libs -> app/libs 姆怪、app/src/main/jniLibs
Plugins/Android文件夾中通常會放一些.jar叛赚、.so文件澡绩,這些文件是什么、有什么用俺附,大家可以看一下官方的文檔:Building Plugins for Android
在Android-Studio工程中肥卡,.jar文件都轉(zhuǎn)移到了app/libs文件夾下、/.so文件都轉(zhuǎn)移到了app/src/main/jniLibs文件夾下/*.so事镣。
這些文件將拷貝至在的libs文件夾中步鉴,在Android編譯時也將被編譯。
5璃哟、unity-classes.jar唠叛、libmain.so、libmono.so沮稚、libunity.so
unity-classes.jar是unity的封裝好的一些Java類,用于在Android原生環(huán)境下處理相關(guān)業(yè)務(wù)册舞,如果有興趣的同學(xué)可以去反編譯看看蕴掏。
libmain.so、libmono.so调鲸、libunity.so文件是Unity寫的底層CPP盛杰,當(dāng)然其中也包含我們的C#邏輯,由于我們的重點不在這馍乙,就不展開講了茵烈。(這個超綱胚想,我沒研究過~)
6、 Icon
在Unity的Player Settings是中逗嫡,我們可以添加相應(yīng)的Icon
這些Icon圖片將被重新壓縮、命名最后放入下圖中的位置株依。
關(guān)于在哪邊設(shè)置icon的問題驱证,看項目需要吧,如果覺得分辨率不夠可以到導(dǎo)出工程這邊添加修改~
比如:多渠道打包時恋腕,可能要多次替換Icon抹锄,寫腳本在Android工程中自動化替換打包是一種不錯的選擇~
7、閃屏
Unity在Android是可以設(shè)置單圖片閃屏的荠藤,如下圖伙单。
不過Android天生是不帶閃屏這種東西的,所以APP會在第一個Activity中先顯示預(yù)先設(shè)定的圖片哈肖。想深入了解可以看一看這篇文章:Android進(jìn)階篇之引導(dǎo)頁系列之Splash閃屏Logo
Unity的在Android的閃屏實現(xiàn)應(yīng)該也是這樣處理的吻育,注意注意!牡彻!這個思路很重要扫沼,以后我們Unity的閃屏也是這個思路做的出爹。
8、Player Settings -> 設(shè)置
在Unity的Player Settings中存在著大量的配置缎除,這些配置將反應(yīng)到Android工程中严就,在下圖中圈出了部分,這些東西并不復(fù)雜器罐,我也就不贅述了梢为。
9、build.gradle
此處是上篇文章沒有的轰坊,這個文件可以幫助我們又快又好又簡單地接入其他SDK铸董。關(guān)于gradle文件,可以看一下這篇文章:Android Studio系列教程四--Gradle基礎(chǔ)