Unity3D調用Android Java代碼

最近公司準備接入91手機平臺的支付系統,這邊要實現在安卓上Unity調用Java代碼,Unity剛剛上手,Android開發也接觸不多,在網上找了不少資料,但都不是很詳細,總覺得缺了些什麼,經過兩天摸索,基本完成功能,所遇問題頗多,在此一一總結

 

1.開發安卓環境的搭建

2.關於安卓開發

3.Unity調用安卓的各種問題

 

1. 安卓開發環境的搭建,在這裏隨便裝了個Eclipse和ADK那些雜七雜八的,這個是真的很簡單,網上的資料非常多,這裏我可以很負責任地略過,隨便參照網上的一個環境搭建,跑一個安卓的 Hello World,就OK了,下面隨便給出兩篇作爲參考

 

http://game.ceeger.com/Manual/android-sdksetup.html

 

http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html

 

2. 看了一下安卓開發的入門資料,對安卓的開發有一個大概的瞭解,理解了幾個簡單的概念,Activity,Intent,R.java,AndroidManifest.xml

 

Activity 是活動,相當於一個窗口,配置爲MAIN的Activity也相當於main函數

 

Intent 表示意圖,例如我希望從這個Activity切換到另外一個Activity,這就是一個意圖,這裏簡單理解爲窗口切換的一箇中介吧

 

R.java 是Eclipse自動生成的一個類,用來索引資源,在res目錄下的添加任何資源都會在這裏生成一個索引,它的好處是不容易寫錯資源名字,導致找不到資源,這個類也經常出問題,後面會提及

 

AndroidManifest.xml 是安卓應用程序的配置文件,配置了程序有哪些Activity,哪個是入口,需要哪些權限等等

 

3.進入主題了!

 

在開始調用任何安卓代碼之前,確保你可以把你的程序編譯成安卓的apk,在安裝完安卓環境之後,Unity需要進行一些設置纔可以編譯,第一次編譯需要設置ADK的目錄,打開Preferences設置

 

 

如果你運氣夠好的話,在編譯的時候就可以發現第一個錯誤,我的Unity是3.5的,它要求Android4.0的ADK,下載4.0的ADK後可以編譯,這裏經過驗證,打包出來的apk是可以在安卓2.0上面運行的,關於目標機器的最低安卓版本,可以在PlayerSettings->Minnimum API Level設置

 

 

點擊OK然後在彈出的窗口中選擇ADK的路徑即可,我的路徑是下圖,Unity會在platforms下面找相關的文件

 

 

打開File->Build Settings->Android->Build會生成apk文件,將apk安裝到手機或者虛擬機,然後可以運行查看效果。不要直接點右三角來運行你的程序了,調用安卓的代碼是執行不了的(聽說有一個插件可以直接在PC上面調試,但未曾用過)

 

好了,現在可以開始編寫安卓代碼了,以宣雨鬆的那個demo爲例子 

http://www.xuanyusong.com/archives/667

 

步驟如下:

1.創建Android 項目

 

2.導入Unity的classes.jar(這裏他只說了mac下的方法,win下我的目錄是 Unity\Editor\Data\PlaybackEngines\androidplayer\bin)

 

3.編寫代碼和相關的XML(這一點他把代碼都貼出來了,可以直接複製)

 

4.Build安卓項目,在bin/classes目錄下打包所有class成jar 在該目錄下執行 

jar -cvf class.jar *

5.將打包好的class.jar 放到Assert目錄下的 Plugins/Android 下,可以是任意名字和目錄,Unity會在這裏查找所有的jar作爲插件,另外將安卓項目的res文件夾以及AndroidManifest.xml拷貝到Plugins/Android目錄下

 

6.編寫調用Java的測試腳本,並拖到場景中的對象上(直接拖到攝像機上面就可以了)

 

7.設置好程序的PlayerSettings,Identification Bundle Identifier*,設置爲你的包名(我猜想,不設置這裏,在AndroidManifest設置Activity的android:name,在類名前加上完整的包名應該是可以的)

 

8.Build編譯成apk,然後安裝到手機或者虛擬機上,運行,查看Log cat

 

中間遇到了N個問題:

 

1.項目出現紅色的叉叉,代碼資源都沒錯誤

Problems窗口出現一個錯誤 Unparsed aapt error(s)! Check the console for output.

 

 

更新ADT後問題解決,因爲更新了ADK,導致ADK和ADT的版本衝突

 

 

2.項目出現紅色感嘆號,源碼和資源都沒有問題,經過排查得出是引用的jar包的問題,重新配置一下jar包,clean一下,紅色感嘆號消失

 

 

 

3.R.java文件丟失的問題,此問題比較常見,引入的第三方庫有問題(不存在,重複引用等),res資源文件出錯等等,會導致R.java丟失,修復問題後Clean一下項目會重新生成R.java

 

4.運行時閃退的問題,這一般是java的運行時錯誤導致,在Log cat可以看到錯誤信息 Unable to start activity ComponentInfo ...... 這一行是錯誤的原因,這裏的原因是空指針

 

 

5.引用到了其他jar包,在打包成apk之前需要把引用到的jar包一起放到Unity工程的Android目錄下,不然會找不到

 

關於代碼的理解:


1. currentActivity 在Unity代碼中我們通 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");來獲取當前的活動,這裏的"currentActivity"表示當前的活動

 

2. setContentView 這個函數會傳入一個佈局的ID,這個一般對應一個layout.xml配置文件,當調用這個函數的時候,會根據佈局配置文件來初始化界面


3.關於classes.jar 這裏的classes.jar是封裝了class文件一個包,類似於win下的dll,linux下的so,這裏包的名字是隨意的,但包的位置一定要在Andorid目錄下


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章