在unity 2020之后,其实2019.4以后就无法直接继承UnityPlayerActivity,那如何做呢?
新建立一个android项目:
找到app下的build.gralde,将com.android.application改为com.android.library
然后注释掉:
applicationId
如上图所示。
这两步的操作是,使其能够build出aar文件。
此时我们无须修改AndroidManifest.xml文件。其实后面我们使用aar形式,无需要用到这个文件。后面我们再说。
此时我们在MainActivity中写如下的代码:
上图增加了一个add方法。
同时,我们在增加一个普通的类:
package com.cf.perfectsdk;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Looper;
import android.util.Log;
public class api {
private static api _instance;
public static api instance()
{
if(null == _instance)
_instance = new api();
return _instance;
}
public int add(int a, int b)
{
return a+b;
}
public static ClipboardManager clipboard = null;
// 向剪贴板中添加文本
public void copyTextToClipboard(final Context activity, final String str)
{
Log.d("TAG", "copyTextToClipboard333");
if (Looper.myLooper() == null){
Looper.prepare();
}
Log.d("TAG", "getSystemService333");
clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
ClipData textCd = ClipData.newPlainText("data", str);
clipboard.setPrimaryClip(textCd);
}
}
其实到这里,已经结束了,此时我们还需要将:
将layout和values-night两个文件夹下的配置文件删除,否则出现啥style的报错。
下面就是unity中调用了。
我们将outputs下的aar文件拷贝到unity中:
然后我们用zip或者rar文件,将其打开:删除其中的AndroidManifest.xml文件。
为啥删除呢?因为不删除,打包成android包之后,会有两个icon。
如果删除之后报错的话,可以将下面启动的activity注释掉即可。
C#调用代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SDKEntrance : MonoBehaviour
{
public Text m_text;
public void Add()
{
Debug.LogError("SDKEntrance Add");
//AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
//1.调用Activity中的add方法,正确。
var javaObject = new AndroidJavaObject("com.cf.perfectsdk.MainActivity");
int add = javaObject.Call<int>("add", 1, 2);
//2.调用普通java类中的方法,正确。
//var javaClass = new AndroidJavaClass("com.cf.perfectsdk.api");
//var javaObject = javaClass.CallStatic<AndroidJavaObject>("instance");
//int add = javaObject.Call<int>("add", 1, 2);
m_text.text += "add=" + add;
}
//剪切文本
public void CopyToClipboard()
{
Debug.LogError("CopyToClipboardstart");
AndroidJavaObject androidObject = new AndroidJavaObject("com.cf.perfectsdk.api");
AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
return;
Debug.LogError("CopyToClipboardend");
//传入com.unity3d.player.UnityPlayer的activity,然后获取剪切板的服务。
androidObject.Call("copyTextToClipboard", activity, "hello");
}
}