unity2020以后aar方式调用android

在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");
    }
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值