U3D調用AndroidStudio3.5(附測試工程)

使用版本:
Unity:2018.2.10f
AS:3.5

最近由於需要接公司原生的java SDK,所以打算用U3D調用sdk、然後監聽sdk回調的方法,麻煩的地方在於sdk部分需要在AS中去做。查找了不少帖子,終於找到了以這篇博客

1,

根據博客中的方法,首先新建一個安卓工程:

2,工程新建之後右鍵創建一個模塊,取名叫unityactivity,注意這裏的包名和新建工程的包名要一致(儘量避免不必要的錯誤,當然具體原因我還不太清楚)

3,然後打開U3D安裝目錄,找到Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar,找到後複製放入unityactivity模塊的libs文件夾下,然後右鍵->Add as Library

這裏選默認的就行了,也就是導入到unityactivity文件夾下,導入之後截圖如下(classes.jar前面有效小三角,代表導入成功):

4,在AS中編寫交互腳本,一個是U3D調用AS,然後AS給U3D回調。如果是接SDK的話,即U3D調用SDK的消息,然後等SDK收到回調方法後,再把消息通知給U3D。代碼如下:

package com.yadong.unityactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class UnityMainAcivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    //unity調用Android
    public void UnityCallAndroid () {
        AndroidCallUnity();
    }

    //android調用unity
    public void AndroidCallUnity () {
        //第1個參數爲Unity場景中用於接收android消息的對象名稱
        //第2個參數爲對象上的腳本的一個成員方法名稱(腳本名稱不限制)
        //第3個參數爲unity方法的參數
        UnityPlayer.UnitySendMessage("Text", "fromeAndroid", "安卓給你發消息了.");
        Toast.makeText(this,"android給U3D返回消息", Toast.LENGTH_LONG).show();
    }
}

5,修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yadong.unityactivity">

    <!-- 這個android:label設置後,unity中ProductName就不生效了,記得改這個-->
    <application >

        <!-- 這個android:name的值必須爲包名+類名-->
        <activity android:name="com.yadong.unityactivity.UnityMainAcivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- 這一行不能少,否則會閃退-->
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>

</manifest>

6先Build-Clean Project一下,然後Build-Make Module ‘模塊名字’,生成jar包,結果如下:


7,在unity新建文件夾 Plugins/Android/bin,將上一步找到的classes.jar放進去,同時將第六步修改的AndroidManifest.xml複製到Plugins/Android和bin同一層級,放完後:

8,接下來我們處理U3D的部分,新建一個測試的腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
    public Text text;

    public Button btn;
    AndroidJavaObject jo;
    private void Start()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);

    }

    public void CallAndroid()
    {

        jo.Call("UnityCallAndroid");
        Debug.Log("點擊按鈕");
        System.Console.WriteLine("點擊按鈕");
    }

    void methodName111(string str)
    {
        text.text = str;
        Debug.Log(str);
        System.Console.WriteLine(str);
    }

    void fromeAndroid(string str)
    {
        text.text = str;
        Debug.Log("安卓傳來信息 : " + str);
        System.Console.WriteLine("安卓傳來信息 : " + str);
    }
}

 

9,然後建個Text,將腳本拖上去;再建個button,監聽點擊回調

 

10,打包成apk,這裏要注意apk的包名不能與安卓的包名一致

 

最終測試結果:

 

 

測試工程我已經上傳到下載資源中,地址爲:https://download.csdn.net/download/Tel17610887670/12584600

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