当前位置: 首页 > news >正文

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

相关文章:

  • 分享一个转储lsass.exe进程的工具
  • untiy打android包,报unityStreamingAssets错误
  • 3D LUT Creator 软件+教程
  • Java8 Map的compute()方法
  • 查看进程的端口号,进程id和杀进程
  • 笔记3详情
  • RectTransform的Bounds
  • 爱的十个秘密--4.给予的力量
  • 特效simulation space的设置,导致残留场景
  • unity网络线程和主线程出队列
  • C++网络编程--简单的WinSock代码
  • unity中UI界面的一些动画实现总结
  • Delphi调用CreateProcess创建进程
  • untiy打android包,报Could not resolve com.android.tools.build:gradle和Connect to 127.0.0.1:80 [/127.0.0.1
  • C#访问lua获取一个全局基本数据类型
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 3.7、@ResponseBody 和 @RestController
  • JAVA 学习IO流
  • java小心机(3)| 浅析finalize()
  • js面向对象
  • Laravel Mix运行时关于es2015报错解决方案
  • mysql_config not found
  • Python socket服务器端、客户端传送信息
  • React-Native - 收藏集 - 掘金
  • React-redux的原理以及使用
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring核心 Bean的高级装配
  • unity如何实现一个固定宽度的orthagraphic相机
  • V4L2视频输入框架概述
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给第三方使用接口的 URL 签名实现
  • 关于extract.autodesk.io的一些说明
  • 后端_MYSQL
  • 转载:[译] 内容加速黑科技趣谈
  • 最简单的无缝轮播
  • raise 与 raise ... from 的区别
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C#)一个最简单的链表类
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (vue)页面文件上传获取:action地址
  • (九)信息融合方式简介
  • (论文阅读11/100)Fast R-CNN
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (一)kafka实战——kafka源码编译启动
  • (转) Face-Resources
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ./configure,make,make install的作用(转)
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 使用反射注册事件
  • .Net6使用WebSocket与前端进行通信