Unity3D調用Android Java代碼


最近公司准備接入91手機平台的支付系統,這邊要實現在安卓上Unity調用Java代碼,Unity剛剛上手,Android開發也接觸不多,在網上找了不少資料,但都不是很詳細,總覺得缺了些什么,經過兩天摸索,基本完成功能,所遇問題頗多,在此一一總結
 
1.開發安卓環境的搭建
2.關於安卓開發
3.Unity調用安卓的各種問題
 
1. 安卓開發環境的搭建,在這里隨便裝了個Eclipse和ADK那些雜七雜八的,這個是真的很簡單,網上的資料非常多,這里我可以很負責任地略過,隨便參照網上的一個環境搭建,跑一個安卓的 Hello World,就OK了,下面隨便給出兩篇作為參考
 
 
 
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目錄下





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM