標籤:unity android
這段時間在研究Unity4.3開發環境下,如何調用由Android SDK4.4.2寫的Activity。參考了很多網上的部落格,百度出了幾十篇大部分都是轉載雨松MOMO的,這裡必須向雨松MOMO表示敬意!但雨松MOMO寫的部落格太舊了,不少內容已經過時,我嚴格按他說的步驟進行,還是出了問題,所以本部落格就是告訴大家在Unity4.3+Android SDK4.4.2環境,起動Activity的細節。
我這篇部落格不會從零講起,所以首先給出兩個重要的連結,大家應該看一下:
第一個是雨松MOMO的 http://www.xuanyusong.com/archives/667 這篇部落格的概念是正確的,但操作過程已過去
第二個是一個比較新的部落格 http://www.narkii.com/club/thread-320335-1.html 這篇部落格的概念和操作都是正確的,但細節有所省略,重點不夠明確,我的部落格即是對它的補充。
步驟:
1:開啟Eclipse,建立一個Android工程,注意,要麼在建立時選擇建立庫,要麼建立之後在工程屬性的Android頁面勾選Is Library。
2:在工程屬性中的Java Build Path -> Libraries中,用Add External JARs按鈕,把Unity的classes.jar加進來,比如我的Unity是裝在D盤,則路徑是:D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin。
3:寫兩個Activity,A和B,實現在A中啟動B。這個過程可以參考上述推薦的部落格,他們講的很詳細,我這裡只是強調一下,A需繼承自UnityPlayerActivity,而B則只需繼承自Activity。
4:編譯Android工程,會在bin目錄下產生一個XXX.jar檔案,注意,這個jar只有2k左右大小是不能用的,原因是很多class沒有包含進去,比如很重要的R.layout.class。編譯完了後必須使用Export匯出,並選擇正確的打包項才會產生一個100-600k大小的jar,這一點雨松MOMO沒有講。下面是我選擇的打包項:
5:至此,Android部分基本OK。開啟Unity建立一個Project,在Assets\Plugins\Android下面,把剛剛產生的jar拷貝過來,另外還有res檔案夾。
6:到Unity的安裝目錄下D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer找到AndroidManifest.xml,將其拷貝到Unity工程的Assets\Plugins\Android目錄下,然後修改它有兩個地方要修改,1是把package改為你的android工程的包名,2是把<activity android:name=這句等號後面的內容改為你的Android工程的主Activity的名字,比如我的:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.unitytestactivity"
android:installLocation="preferExternal"
android:theme="@android:style/Theme.NoTitleBar"
android:versionCode="1"
android:versionName="1.0">
..........
..........
<activity android:name=".UnityTestActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
注意名字前的點。第二句表示啟動時不顯示Title,這個問題曾折騰我很久。第三句直接拷貝。
7:寫Unity下的指令碼cs檔案,這裡沒什麼好說的,參考雨松MOMO。
8:Unity的Build Setting注意把Bundle Identifier改為你的Android工程的包名。
9:注意,從Unity中啟動一個Activity的功能無法在Unity中類比運行,必須安裝到真機中才能看到效果,我曾傻傻的並鬱悶的試了好久。估計後續的Unity版本會改進這個問題。