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

首先講導出Jar包,在之前都是用這種方法,可是如今官方不推薦使用此方法,官方推薦導出Aar包html

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

注意:這裏選擇API 16,由於Unity支持的最低是API 16android

 

(2)建立一個新的模塊app

依次選擇,File > New > New Module,而後選擇Android Library函數

保證最小API等級爲16佈局

 

(3)建立一個Activity字體

建立好後,默認生成了一個xml佈局,刪除掉,咱們的佈局是unity控制的ui

 

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

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

複製以上目錄下的classes.jar,粘貼到libs文件夾下

粘貼進去後,把這個包添加到當前模塊中去

 

(4)切回到Android下,打開AndroidManifest.xml,這至關於一個Android清單,告訴Android咱們的程序都有哪些東西,每一個頁面都是幹嗎的,還能配置一些權限。要擴展Unity的MainActivity,先改這個

修改方法:將app文件夾下的AndroidManifest.xml的這部分複製過來,而後刪掉紅色報錯部分

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

標識Activity的類型是Unity用的,加上下面的代碼:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

修改MainActivity.java

 

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

在java中寫好這個方法後,要提供給Unity使用,先作出這個模塊

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

刪除這個包,將debug目錄下與libs文件夾同層的包拷貝進來

把這個libs文件夾複製到桌面備用,而後把與libs文件夾同層的res文件夾也複製到桌面備用。可是新的版本的res文件夾是沒有的,找了下,也是在文件夾packaged-classes下面

而後把這個xml複製到桌面備用

打開這個xml,修改這個名字爲本身須要的名字,注意所有小寫

 

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

建立好工程,設置爲Android打包,設置包名,包名爲上面xml中咱們修改的那個

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

建立一個腳本掛在相機上,在這裏咱們使用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();
	}
}

數據線鏈接手機,打包,能夠看到結果

 

(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","");

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

從新Build,導出libs和res文件夾,替換Unity下對應文件夾,而後從新打包運行,結果:

相關文章
相關標籤/搜索