一、新建一个Android Studio项目工程,设置最低的minimum SDK的为API 16:Android 4.1(Jelly Bean)
二、然后通过File->New->New Module,新建一个模块,选择Android Library,Package name如果需要继承UnityPlayerActivity则需要和项目的包名一致,如果只是使用classes.jar里面的一些方法,则自己选择一个符合的包名字,minimum SDK同样选择16。
三、导入Unity的包,在Unity的安装目录中搜索classes.jar,找到它然后拖入到Project视图-》模块名字-》libs里面,然后右键classes.jar-》Add As Library..
四、在模块-》src->main->包,右键新建一个Java Class,取一个名字就是类名
package com.cdx.unity3d;
import android.content.Context;
import android.app.Activity;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
public class Utils {
/**
* android utils log tag
*/
private static final String TAG = "Utils";
/**
* android utils log message
*/
public static void Log(String message) {
Log.e(TAG, message);
}
/**
* U3d程序上下文
*/
private Context mContext;
/**
* U3d接收消息对象名称
*/
private String mUnityObjName;
/**
* 与Unity3d传递消息
*/
private void CallUnityMethod(String methodName, String message) {
UnityPlayer.UnitySendMessage(mUnityObjName, methodName, message);
}
/**
* 初始化工具
*/
public void Initialize(Object context, String objName) {
mContext = (Context) context;
mUnityObjName = objName;
Utils.Log("Utils Initialize Success");
}
/**
* 上下文名称
*/
public String GetContextName() {
String name = mContext.toString();
return name;
}
/**
* 获取Url Scheme参数
*/
public String GetSchemePars()
{
String data = SchemeUtil.GetSchemePars((Activity)mContext);
return data;
}
}package com.cdx.unity3d;
import android.app.Activity;
import android.net.Uri;
public class SchemeUtil {
public static String GetSchemePars(Activity activity)
{
String Param1 = "";
String Param2 = "";
String Param3 = "";
String Param4 = "";
String Param5 = "";
String Param6 = "";
Uri mLink = activity.getIntent().getData();
if(mLink != null)
{
Param1 = mLink.getQueryParameter("Param1");
Param2 = mLink.getQueryParameter("Param2");
Param3 = mLink.getQueryParameter("Param3");
Param4 = mLink.getQueryParameter("Param4");
Param5 = mLink.getQueryParameter("Param5");
Param6 = mLink.getQueryParameter("Param6");
}
String returnName = Param1 + "|" + Param2 + "|" + Param3 + "|" + Param4 + "|" + Param5 + "|" + Param6;
activity.getIntent().setData(null);//获取一次后设为空,防止每次都能获取到
return returnName;
}
}五、Unity上对应的工具脚本
using UnityEngine;
using System.Runtime.InteropServices;
namespace com.Bowen.Game.Lobby
{
public class PluginManager : MonoBehaviour
{
void Start()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidClassInitialize();
#endif
}
private AndroidJavaObject mJavaObject { get; set; }
//初始化,把Unity附体和Activity(Context)传递给Android写的初始化方法
private void AndroidClassInitialize()
{
AndroidJavaClass androidClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject androidObj = androidClass.GetStatic<AndroidJavaObject>("currentActivity");
mJavaObject = new AndroidJavaObject("com.cdx.unity3d.Utils");//包名+类名 工具类
mJavaObject.Call("Initialize", androidObj, gameObject.name);//传参,保存应用,可以让Android那边通知Unity这边,也可以让那边访问上下文
}
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
public static extern string _GetURLString();
#endif
public string GetSchemePars()
{
string data = "";
#if UNITY_ANDROID && !UNITY_EDITOR
data = mJavaObject.Call<string>("GetSchemePars");
#elif UNITY_IOS && !UNITY_EDITOR
data = _GetURLString();
#endif
return data;
}
}
}六、在Android Studio导出jar包,在Project中选择指定模块然后Build-》Make Module ‘模块名’,随后就可以在Project下你的模块下build有个outputs/arr,把里面的arr文件弄出来,把后缀改成zip,打开把里面的classes.jar拉出来,这个就是jar包了,改个名字,拉进Unity的Plugins/Android下,因为我这里写的只是工具类,所以AndroidManifest.xml不需要导入。
七、修改项目存在的AndroidManifest.xml,如果没有,那就把上面那个包的也拉进项目中。在主activity结点下加上
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="axb" android:host="love.app" android:pathPrefix="/openwith"/> </intent-filter>
八、打开的url就为 axb://love.app/openwith?Param1=1&Param2=2