天天看點

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

首先講導出Jar包,在以前都是用這種方法,但是現在官方不推薦使用此方法,官方推薦導出Aar包

(1)首先建立一個Android空工程

注意:這裡選擇API 16,因為Unity支援的最低是API 16

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(2)建立一個新的子產品

依次選擇,File > New > New Module,然後選擇Android Library

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

保證最小API等級為16

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(3)建立一個Activity

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導
Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

建立好後,預設生成了一個xml布局,删除掉,我們的布局是unity控制的

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(4)切換到Project下,導入Unity支援包

Unity支援包在Unity安裝目錄下:G:\unity2017.1.1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar

複制以上目錄下的classes.jar,粘貼到libs檔案夾下

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

粘貼進去後,把這個包添加到目前子產品中去

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導
Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(4)切回到Android下,打開AndroidManifest.xml,這相當于一個Android清單,告訴Android我們的程式都有哪些東西,每個頁面都是幹嘛的,還能配置一些權限。要擴充Unity的MainActivity,先改這個

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

修改方法:将app檔案夾下的AndroidManifest.xml的這部分複制過來,然後删掉紅色報錯部分

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導
Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

修改label,以後安裝到手機就是這個名字

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

辨別Activity的類型是Unity用的,加上下面的代碼:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
           
Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

修改MainActivity.java

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(5) 提供一個方法給Unity,這裡提供了一個簡單的加法運算

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

在java中寫好這個方法後,要提供給Unity使用,先做出這個子產品

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

切換到Project,依次打開testlibrary > build > intermediates > bundles(老版本是這個,新版本是packaged-classes) > debug > libs下的jar包

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

删除這個包,将debug目錄下與libs檔案夾同層的包拷貝進來

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導
Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

把這個libs檔案夾複制到桌面備用,然後把與libs檔案夾同層的res檔案夾也複制到桌面備用。但是新的版本的res檔案夾是沒有的,找了下,也是在檔案夾packaged-classes下面

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

然後把這個xml複制到桌面備用

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

打開這個xml,修改這個名字為自己需要的名字,注意全部小寫

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(6) 在Unity中使用這個方法

建立好工程,設定為Android打包,設定包名,包名為上面xml中我們修改的那個

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

建立檔案夾Plugins及其子檔案夾Android(注意:這兩個檔案夾名字是固定的),将複制到桌面上的3個東西拷貝進去

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

建立一個腳本挂在相機上,在這裡我們使用Unity來調用Android那邊提供的add方法,然後把結果顯示在Text元件上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour {

    public Text text;

	void Start () {
        // 獲得位于com.unity3d.player包下的UnityPlayer類
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // 獲得jc所代表的類下的currentActivity對象
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 調用Android提供的Android方法
        // 使用Call調用,<>表示有傳回值,沒有傳回值則不需要這個
        text.text = jo.Call<int>("add", 2, 3).ToString();
	}
}
           

資料線連接配接手機,打包,可以看到結果

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

(7)上面是在Android中定義了一個方法,在Unity中調用。現在我們在Unity中定義一個方法,在Android中調用。

定義一個簡單的方法,改變字型的顔色。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour {

    public Text text;

	void Start () {
        // 獲得位于com.unity3d.player包下的UnityPlayer類
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // 獲得jc所代表的類下的currentActivity對象
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 調用Android提供的Android方法
        // 使用Call調用,<>表示有傳回值,沒有傳回值則不需要這個
        text.text = jo.Call<int>("add", 2, 3).ToString();
	}

    public void ChangeColor()
    {
        text.color = Color.red;
    }
}
           

在Android中調用,使用方法:

UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","");
           

第一個參數表示腳本所挂載的位置,第二個參數表示函數名,第三個參數表示參數

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

重新Build,導出libs和res檔案夾,替換Unity下對應檔案夾,然後重新打包運作,結果:

Android開發 互相調用模式之導出Jar包、擴充MainActivity、Java主導

繼續閱讀