Unity與Android通信(jar包)

1、找到Unity的classes.jar包,目錄是放在

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

上面的目錄是我的,如果是你的Unity目錄可能不同,你可以先找到Unity運行程序,右擊 打開文件所在位置,然後後面的路徑都一樣了。如果不是Unity2017的話,可以直接在Data下搜classes.jar,百分百找到!

2、在Android Studio新建一個工程,工程裏面會有一個默認的app項目,我們不使用它,因爲我們只是要一個android 庫文件,所以我們可以去新建一個android library,操作步驟:File->New Module->Android Library 然後默認點就OK。

3、將那個classes.jar copy到libs裏面,這個libs是在Project面板纔有的,copy後要選中classes.jar,然後右擊,選中Add as Library,彈出一個窗口,裏面一定要選中是你的那個module.

4、由於我們新建的module是沒有Activity的,即轉回到Android面板 選中我們的module,在java->第一個包下沒有任何的文件,選中第一個包右擊,新建New->Activity->Empty Activity。

然後找到同項目下的manifests文件,裏面需要在<application></application>中間,加入以下代碼,注意:android:name=".MainActivity" 是我建立的Activty名字,這裏必須設置成你自己建立的Activity名字,注意這個名字前面要加個' . '    (這一步千萬別搞錯了,不然一切都是浮雲)

 <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>

5、寫我們的Acitivity代碼

package com.example.bmobpay;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
 
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
 
public class MainActivity extends UnityPlayerActivity {
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
    }
    //unity調用的android方法
    public int test1(int a,int b)
    {
        int c=a+b;
        //android調用unity的方法,第一個參數是方法所在的物體名字,第二個參數是方法名,第三個是方法參數
	  	UnityPlayer.UnitySendMessage("Main Camera", "Test2", c+"");
	  	return c;
    }
 
}

注意:onCreate中的內容一定要保持和我的一樣,不然會出錯,而且必須繼承自UnityPlayerActivity 

6、回到Project面板,選中我們的module,然後點擊菜單上的Build->Make Module ‘你的module名字’,等待build,成功後會在 你的module文件下的build->outputs->aar->找到一個叫 Xxxx.aar的文件。我們需要去到這個文件所在的目錄,然後解壓它,我們只需classes.jar,AndroidMainfest.xml,res這3個,Unity要準備一個Plugins/Android文件夾,把AndroidMainfest.xml,res複製到這個Android文件夾中,然後新建一個libs文件夾,將classes.jar放入libs中。

7、在Unity中,我們在Main Camera掛一個C#腳本,內容如下:(一定要在Main Camera掛!!這一步與上面的有關)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UnityAndroidCommunity : MonoBehaviour {
    public Text text;
	void Start () {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        int res= jo.Call<int>("test1", 56, 90);
        text.text += "unity自己弄的:"+res.ToString();
    }
    //方法名一定要寫Test2,我們是需要在Android那邊調用到這個方法的,要用到這個方法名。
    public void Test2(string str)
    {
        text.text = str+"android調用過來的...";        
    }
}

text是一個文本ui

jc和jo的獲取方法都是固定的,先獲取到jc,再從jc獲取到jo,currentActivity就是當前活動的Activity

8、在Unity中 打開File->Build Settings->選中Android ->Switch Platform.然後點擊Player Settings

將AndroidMainfest.xml中的PackageName的內容複製到安卓配置下的Package Name中,PC配置下的Bundle Identifier的內容也要與這個PackageName保持一致,然後再確保你的安卓配置下的Minimum API Level 保持和你的AndroidMainfest.xml中的Minimum一樣。然後還要將當前場景放入Scenes In Build裏面。也就是點一下Add Open Scenes,然後就可以build了,祝你成功!

9、build出的apk 最好在真機運行,如果出現安裝成功,但是卻沒法打開,或者連apk程序都不在手機上這種情況,那麼就是你的android studio那邊出現了一些錯誤,重新檢查一下 是不是有哪些步驟沒完成,或者出現了報紅,一定要排查干淨再build module! 若unity報錯的話,可以看看SDK是不是一樣,因爲android studio自身也有自帶的SDK的,一定要是一樣的。檢查一下unity的SDK和android 的SDK 路徑是否一樣。

10.注意:出現如圖錯誤

解決方案:package值要和unity的PlayerSetting裏的Identification/PackageName一致(必須的)

                   package值與下面的activity android:name值不能一樣,否則就會報上面的錯誤

下圖的xml文件與上面的工程無關,這裏只是舉個例子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章