怎麼引入安卓項目
『壹』 unity項目如何導入android項目中成為安卓項目中的一部分
1.Android端代碼可以在Eclipse中開發(AndroidStudio沒有試,應該也可以)
2.Unity3D端代碼要在Unity中開發
3.Android和Unity3D端,兩邊都需要加入一些代碼從而可以使之關聯交互。
4.將Android端代碼編譯成jar文件以插件形式放入到Unity端中
5.在Unity中將整個項目Build成apk文件,然後安裝到手機或模擬器里運行
本文主要講解1,2,3。對於4,5建議大家去看雨松MOMO的Unity博客的第17篇和第18篇。
UnityPlay:
在編寫Android端和Unity3d端代碼前,有必要先了解一下可以使兩部分交互的類UnityPlay。
個人理解UnityPlay是個Unity提供給外部交互的一個介面類。
為什麼是「個人理解」?這我不得不爆粗口了,TMD官網根本就沒有相關的API和文檔(如果大家有誰找到一定給我來一份,就當我罵自己了)。
在關聯Android時,想拿到UnityPlay以及相關類的jar包可以從下面的地址找到:Unity安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夾下有一個classes.jar的jar文件,它就是我們想要的。
而在bin同目錄下有一個src文件,點擊到最後有3個類,分別是UnityPlayerActivity.java,UnityPlayerProxyActivity.java,UnityPlayerNativeActivity.java。前兩個打開個後只有一行代碼,說的是UnityPlayerActivity和UnityPlayerProxyActivity都繼承自UnityPlayerNativeActivity。而打開UnityPlayerNativeActivity中居然有代碼,而且我估計這應該是UnityPlayerNativeActivity的源碼。
由於關於UnityPlay的資料我只找到這么一個,所以我把UnityPlayerNativeActivity中的代碼都貼出來,如果我註解有不對的地方希望大家指正。
/**
* UnityPlayerActivity,UnityPlayerProxyActivity都繼承自UnityPlayerNativeActivity
* 而UnityPlayerNativeActivity繼承自NativeActivity
* 在該類里定義了一些和ANDROID生命周期相同的回調方法,留給自定義的Activity子類重寫。
*/
public class UnityPlayerNativeActivity extends NativeActivity
{
//UnityPlayer的引用,並且我們不能改變這個引用變數的名字,它被native code所引用
protected UnityPlayer mUnityPlayer;
protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 設置顯示窗口參數
getWindow().takeSurface(null);
setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
getWindow().setFormat(PixelFormat.RGB_565);
// 創建一個UnityPlayer對象,並賦值給全局的引用變數
mUnityPlayer = new UnityPlayer(this);
//為UnityPlayer設置一些參數
if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
boolean trueColor8888 = false;
// UnityPlayer.init()方法需要在將view附加到layout之前調用。它將會調用native code
mUnityPlayer.init(glesMode, trueColor8888);
// 從UnityPlayer中獲取到Unity的View視圖
View playerView = mUnityPlayer.getView();
// 將Unity視圖載入到根視圖上
setContentView(playerView);
// 使Unity視圖獲取焦點
playerView.requestFocus();
}
protected void onDestroy ()
{
// 當Activity結束的時候調用UnityPlayer.quit()方法,它會卸載之前調用的native code
mUnityPlayer.quit();
super.onDestroy();
}
// 下面幾個方法都是ANDROID相關回調方法,確保在ANDROID執行相應方法時UnityPlayer也需調用相應方法
protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), event);
return super.dispatchKeyEvent(event);
}
}
看完這個類後就知道了為什麼在自定義的Activity中繼承了UnityPlayerActivity等類以後,只要重寫了onCreate並調用super.onCreate()方法後不需要任何其他的代碼就會自動的顯示出Unity3D的視圖。因為初始化Unity視圖的代碼都在UnityPlayerNativeActivity父類中實現了。
ANDROID端代碼:
在寫ANDROID代碼的時候,一定要導入Unity3D提供給我們的jar包,jar包的位置我在上面說了。引入jar包加入到buildpath中這些最基本的我就不多說了。
要想和Unity交互,我們就不能繼承ANDROID提供給我們的Activity,我們需要繼承剛才jar包中引入的Unity提供的Activity類,一共有這么3個:
UnityPlayerActivity,UnityPlayerProxyActivity,UnityPlayerNativeActivity。具體區別不知道,因為沒有文檔,沒有API,沒有源碼(這里再次鄙視一下)。剛才我們看過UnityPlayerNativeActivity的代碼(雖然很短,但我覺得這個就是源碼),知道UnityPlayerActivity,UnityPlayerProxyActivity都是它的子類,而且最終父類為NativeActivity。所以我們繼承Unity提供的最外層的子類是最好的選擇,我這里選擇的是UnityPlayerActivity,因為名字最簡單,覺得該封裝的都應該封裝好了。
public class MainActivity extends UnityPlayerActivity {
private Button topButton;
private Button bottomButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設置test為我們的根布局
setContentView(R.layout.test);
// 通過剛才的源碼分析,知道mUnityPlayer為一個全局的引用變數,而且已經在父類中設置好了,所以直接拿來用就可以了
View playerView = mUnityPlayer.getView();
// 將Unity的視圖添加到我們為其准備的父容器中
LinearLayout ll = (LinearLayout) findViewById(R.id.unityViewLyaout);
ll.addView(playerView);
// 上面的button設置監聽器
topButton = (Button) findViewById(R.id.topButton);
topButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//發送消息給Unity端,該函數第一個參數為接受消息的類對象,第二個該類對象用接受消息的方法,第三個參數為傳遞的消息
//所以下面的意思就為:調用Main Camera下面的Previous方法,傳送的消息為空
UnityPlayer.UnitySendMessage("Main Camera","Previous","");
}
});
// 為下面的button設置監聽器
bottomButton = (Button) findViewById(R.id.bottomBtn);
bottomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//調用Main Camera下面的Next方法,傳送的消息為空
UnityPlayer.UnitySendMessage("Main Camera","Next","");
}
});
}
}
最後看一下Android端的布局文件,布局很簡單,上下各有一個button按鈕,兩個按鈕中間是Unity的視圖。
『貳』 android studio怎麼使用
Android Studio是一套面世時間還不長的IDE(即集成開發環境),目前已經免費向谷歌及Android的開發人員發放。Android Studio以IntelliJ IDEA為基礎,後者同樣是一套相當出色的Android開發環境。在今天的文章中,我們將共同了解如何創建一個全新Android項目,同時充分發揮 Android Studio所提供的各項功能優勢。
1.項目設置
在開始暢游Android Studio的世界之前,大家首先需要點擊此處下載並進行安裝。請注意,各位必須事先安裝好JDK 6或者更高版本。如果是在Windows系統環境下,先啟動.exe文件、而後按照安裝向導的指示一步步完成。如果大家使用的是OS X系統,則首先雙擊啟動磁碟鏡像,然後將Android Studio拖拽到自己的應用程序文件夾當中。
在成功完成了以上各項步驟後,那麼大家的開發環境應該已經得到了正確設置。接下來,我們可以准備好利用Android Studio創建自己的第一款Android應用程序了。當大家第一次啟動Android Studio時,應該會看到該軟體的歡迎屏幕,其中還提供一些選項、指導我們以此為起點邁出Android應用開發的第一步。
在今天的教程中,我們將選擇「New Project(新項目)」選項。不過如果大家希望把Eclipse等其它環境中的現有項目轉化為Android Studio項目,也可以選擇「Import Project(導入項目)」。Android Studio能夠將Eclipse項目轉換為Android Studio項目,並在項目中為用戶提供必要的配置文件。
如果大家在選項列表中點擊了「Open Project(打開項目)」,則可以開啟已經利用Android Studio或者IntelliJ IDEA創建出的項目。而選擇「Check out from Version Control(版本控制檢查)」的話,大家能夠對處於版本控制之下的項目副本進行檢查。通過這種方式,我們可以將現有項目作為基礎、快速構建起新的針對 性版本。
由於我們需要從零開始,因此這里選擇「新項目」。這時大家會看到一份選項列表,旨在對我們的新項目作出配置。在今天的教程中,我們將創建一款簡單的 應用程序,主要目的是為大家演示Android Studio中最為重要的一部分功能特性。相信大家也和我一樣,會認為「HelloWorld」這個名稱最適合本次開發出的新項目。
正如大家在上面這幅截圖中所看到,我把自己的應用程序命名為HelloWorld,並為其設定了模塊名稱。如果大家對IntelliJ IDEA不太熟悉,可能不知道模塊這東西到底是什麼。模塊實際上就是一個可以進行編譯、運行、測試以及調試的獨立功能單元。模塊當中包含有源代碼、編譯腳 本以及用於特定任務的其它組成部分。
在創建新項目時,大家還可以為該項目設定軟體包名稱。在默認情況下,Android Studio會將項目包名稱的最後一項元素設置為模塊名稱,但只要願意、大家可以隨意對其作出變更。
其它設定內容還包括項目在設備上的保存位置、最低與推薦SDK、項目編譯需要使用的SDK以及項目主題等等。大家也可以要求Android Studio創建一個Activity類、為其自定義一個啟動圖標,或者設定該項目是否支持GridLayout、Fragments、 Navigation Drawer或者Action Bar等。
這里我們不會為自己的應用程序創建自定義圖標,因此大家可以取消「Create custom launch icon(創建自定義啟動圖標)」項目前的勾選框。點擊「Next(下一步)」繼續進行其它項目設置步驟。
由於我們在之前的步驟中勾選了「Create activity(創建activity)」項目的勾選框,因此這里導航會要求大家對Android Studio將為我們創建的Activity類進行配置。
由於我們將從空白Activity類開始進行配置,因此大家可以點擊「Next」執行設置流程的下面幾個步驟。這里大家需要對該Activity 類、主布局以及片段布局進行命名。大家也可以設置導航類型,在今天的示例項目中我們將其設置為「None」。下面這幅截圖顯示的是我們的設置方案看起來是 什麼樣子。
在點擊「Finish」之後,大家會看到如下圖所示的Android Studio用戶界面。其中窗口左側為項目資源管理器,右側則為工作區。在Android Studio中對項目進行設置之後,現在我們可以逐一查看Android Studio當中的各項關鍵功能。
回到頂部
2. Android虛擬設備
所謂Android虛擬設備——或者簡稱AVD——是一套模擬器配置方案,它允許大家設定出與實際情況相符的Android設備型號。這就讓開發者 在多種多樣的設備平台上運行並測試應用程序變得更為輕松。在Android虛擬設備功能的支持下,大家可以為Android模擬器指定需要模擬的硬體與軟 件組合。
創建Android虛擬設備的首選方式是通過AVD Manager。大家可以在Android Studio用戶界面的Tools菜單中依次選擇Android〉AVD Manager。
如果大家之前對開發環境的設置工作正確無誤,那麼Android虛擬設備管理器的界面應該如下圖所示。
要創建新的AVD,我們需要點擊右側的「New…」、為AVD設定名稱並如下圖所示對虛擬設備進行配置。最後點擊「OK」以創建自己的第一套AVD。
要使用我們剛剛創建好的AVD,首先需要在AVD管理器的列表中將其選中,然後點擊窗口右側的「Start…」。如果大家的AVD設置過程正確無誤,那麼Android模擬器在啟動後應該如下圖所示。
既然Android模擬器已經成功啟動並開始運行,現在是時候啟動我們的應用程序了。在「Run」菜單中選擇「Run 『helloworld』」——沒錯,在Android模擬器中運行應用程序就是這么簡單。
回到頂部
3.實時布局(Live Layout)
Android Studio中的實時布局功能允許大家在無需將應用程序運行在設備或者模擬器中的前提下,直接預覽應用的用戶界面。實時布局是一款極為強大的工具,能夠幫助開發者節約大量時間。在實時布局的幫助下,查看應用程序用戶界面的任務變得輕松而且快捷。
要使用實時布局,我們需要雙擊對應XML布局文件並選擇工作區下方的「Text」標簽。接下來選擇工作區右側的「Preview」標簽來預覽當前布局。我們對XML布局作出的任何變更都會直接反映在右側的預覽窗口當中。大家可以查看下面這幅截圖來深入理解這項功能。
實時布局功能為我們帶來了諸多值得稱道的顯著優勢。舉例來說,大家可以在Preview面板的第一項菜單中選擇選項,從而對當前正在使用的XML布 局隨意作出調整。譬如說,大家可以分別創建不同的縱向與橫向顯示視圖,Android Studio會承擔起創建必要文件夾及文件的任務。
Preview面板中的第二項菜單允許大家變更顯示在Preview面板內的設備大小。第三項菜單的作用則是調整設備在Preview面板中的朝向,這樣我們就能更輕松地查看同一套布局方案在不同顯示模式(縱向與橫向)下的效果與主題。
Preview面板中的第四項菜單允許我們輕松訪問Activity或者布局所使用的個別片段。Preview面板還允許大家變更在實時布局中使用的語言,從而輕松預覽不同語言在布局方案中的顯示效果。最右邊的菜單的作用則是調整API版本。
Preview面板中還包含多項控制機制,例如對布局進行縮放、重新Preview面板或者截取當前屏幕。
回到頂部
4.模板
Android Studio還為開發人員提供多種模板選項,從而大大提升開發速度。這些模板能自動創建Activity以及必要的XML文件。大家還可以利用這些模板創建出較為基礎的Android應用程序,並將其運行在實體設備或者模擬器當中。
在Android Studio當中,我們可以在創建新的Activity時一同創建出對應模板。右鍵點擊窗口左側項目瀏覽器中的「package name」並在菜單中選擇「New」,而後從選項列表中點選「Activity」。Android Studio隨後會為開發者列出模板清單,其中包括Blank Activity、Fullscreen Activity以及Tabbed Activity。
大家還可以從菜單中選擇「Image Asset」,接下來的向導會指引我們一步步完成創建流程。下面讓我們一起來看看如何以Login Activity模板為基礎創建一套新的Activity。首先在Acivity模板列表中選擇Login Activity選項以啟動創建向導。
如大家在上面的截圖中所見,我已經將新建的Activity命名為LoginActivity——也就是為activity login設定Layout Name——並為該Activity添加了一個名為Sign In的標題。在默認情況下,對話框中的Include Google+ sign in項目已經被勾選。由於我們不打算在今天的示例中使用Google+登錄功能,因此取消該勾選項。
大家可以選擇為這套新的Activity設定Hierarchical Parent(分層結構)。這樣當我們點擊設備上的後退按鈕時,應用就將通過導航返回至上一界面。我們將這一欄位留空。在點擊「Finish」之 後,Android Studio會為我們創建出必要的文件及文件夾。如果一切進展順利,我們將在項目當中看到新的Activity與Layout。
下一布工作是在manifest文件中對新Activity進行設置,這樣它就能在應用程序啟動時作為主Activity加以使用了。請大家一起來看下面的manifest文件內容,其中LoginActivity類擁有自己的活動節點。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.tuts.HelloWorld.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.tuts.HelloWorld.LoginActivity"
android:label="@string/title_activity_login"
android:windowSoftInputMode="adjustResize|stateVisible" >
</activity>
</application>
為了在應用程序當中啟動我們剛剛創建的LoginActivity,首先需要移除原有LoginActivity類的活動節點,然後利用 com.tuts.HelloWorld.LoginActivity代替先前的com.tuts.HelloWorld.MainActivity。這 樣一來,應用程序現在就將使用LoginActivity類作為其主Activity。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="za.co.helloworld.LoginActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
當我們在模擬器當中創建並運行自己的應用程序時,首先應該會看到如下圖所示的顯示內容。這意味著我們已經成功利用剛剛創建的LoginActivity類取代了原有的空白Activity類。
『叄』 eclipse怎麼導入android包
1.首先在項目中右擊->屬性。
Unable to execute dex: Java heap space Java heap space.的錯誤解決方法:
第一種:
修改eclipse目錄下面額eclipse.ini文件
把第一行添加
-vm
C:Program FilesJavajdk1.6.0_24injavaw.exe (jdk的目錄)
修改
-Xms128m
-Xmx512m
修改
--launcher.XXMaxPermSize
512m
第二種:
解決方法是添加user Library,並把as system Library選上,並引入工程。