Unity和Android交互笔记——接入Android SDK

Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了 自己做的小游戏需要接广告,之前尝试过UnityAds和AdMod,但是都有点小问题。UnityAds对国内本土支持不好,Banner广告经常没有内容(VPN切换成美国,就有了)。Admod基本上都要对接到googlePlay,国内没办法。然后找了国内的广告SDK。 研究了好久,网上的教程都比较老,而且我在AndroidStudio方面完全是小白(本篇教程写于2020年9月,使用的SDK版本为V3.0)。 准备工作 创建账号https://www.pangle.cn/ 添加应用 添加代码位(广告位) 下 阅读详情

本文对拥有相关经验的同学会有一些帮助,如果没有相关经验,请移步学习Android基础和Unity基础。如果有些看不懂的东西欢迎留言……

一、Unity和Android交互

     目前Unity和Android交互主要有两种方案:

  1. Android 打出 jar包或者aar包放在Unity的plugin/Android文件夹中以供调用;
  2. Unity 导出Android工程供Android Studio处理(早期这里也支持Eclipse,但是那东西太丑了这里不予讨论哈哈哈)

1.先说下Unity如何和Java进行交互

   Unity和Java交互,Unity为我们提供了一个很好用的工具类AndroidJavaClass,具体用法的话废话少说上代码。

public class SDK : MonoBehaviour
{
    private static SDK sdkInstance;
#if UNITY_ANDROID //&& !UNITY_EDITOR
    private AndroidJavaClass androidJavaClass;
    private AndroidJavaObject androidJavaObject;
#endif
    public static SDK Instance
    {
        get
        {
            if (sdkInstance == null)
            {
                sdkInstance = new SDK();
                return sdkInstance;
            }
            else
            { 
                return sdkInstance;
            }
        }
    }
    private SDK()
    {
        Init();
    }
    public void Init()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
#endif

    }
//获取设备ID
    public string GetDeviceID()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        string s = androidJavaObject.Call<string>("getDeviceId");//这里是调用Android Activity中注册的接口方法,怎么注册下面会讲到
        return s;
#else
        return "123456";//这里是写一个没有SDK的临时返回值,防止一些异常
#endif
    }

    public void ShowSDKLoginTips()
    {

#if UNITY_ANDROID && !UNITY_EDITOR
        androidJavaObject.Call("showSDKLoginTips");//这里是接口中的无返回值方法
#endif
    }
    
}

下面是对应的Android MainActivity方法:

public class MainActivity extends UnityPlayerActivity {
    public MainActivity() {
    }
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    public String showTest() {
        return "show test success";
    }
//这里是接口方法 获取设备ID
    public String getDeviceId() {
        String m_szDevIDShort = "35" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10;
        String serial = null;

        try {
            serial = Build.class.getField("SERIAL").get((Object)null).toString();
            return (new UUID((long)m_szDevIDShort.hashCode(), (long)serial.hashCode())).toString();
        } catch (Exception var4) {
            serial = "serial";
            return "null";
        }
    }
//这里是接口方法
    public void showSDKLoginTips()
    {

    }
}

2.再来说下Unity引入Jar包的方案

     首先在Android Studio中新建一个工程一个Empty Activity就可以了,然后引入Unity的class.jar包下面是Jar包相对路径,参考自己的Unity安装文件夹:../Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes\class.jar(如何引入Jar包自己去参考Android Studio教程,后面也会发一篇别人教程的链接)

     要打Jar包的话记得处理下build.gradle 首先将 apply plugin: 'com.android.application' 改成 apply plugin: 'com.android.library'

     在MainActivity(可以自定义名字,但是记得要继承UnityPlayerActivity不然会出问题)中写入自己的接口,代码上面我复制了就不黏贴了。

      最后就是打jar包出来:

在项目根目录下的build.gradle末尾加入如下代码:

task makeJar(type: Copy) {
    delete 'build/outputs/mydemosdk.jar' //mydemosdk名字可自定义
    from('app/build/intermediates/aar_main_jar/release/')  //只适用于androidstudio 3.0或4.0及以上
    into('build/outputs/') //输出路径,可自定义
    include('classes.jar')
    rename ('classes.jar', 'mydemosdk.jar') //111名字可自定义
}

然后在Android Studio的右上角Gradle中就会出现如下截图的方法 路径:../task/other

这里有一个坑需要避免:from('app/build/intermediates/aar_main_jar/release/') //只适用于androidstudio 3.0或4.0及以上,这里的aar_main_jar在不同版本中可能名字不一样,可以自己在intermediates文件夹中查找。(备注:jar包塞入Unity后可以随意命名)

如果需要aar的话aar在输出目录下自行查找(这里也有一个坑,记得用压缩工具打开aar包删除class.jar,不然会出问题)。

最后就是把jar包导入到Unity 工程中这里还需要引入AndroidManifest.xml到工程中

Unity发布Android的APK时

如果在Plugins/Android( Unity特殊目录 ),不存在AndroidManifest文件,会使用Unity默认的AndroidManifest文件。默认的AndroidManifest文件目录在:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk如果存在AndroidManifest文件,那么Unity会使用它代替默认的AndroidManifest文件,这个AndroidManifest,必须带有活动以及标签。

参考:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.mypackge.test"<!--这里填你自己的包名-->
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="28" />
 
    <application
        android:label="@string/app_name"
        android:usesCleartextTraffic="true" >
        <activity android:name="com.mypackge.test.MainActivity" ><!--这里前面加上自己的包名避免引用冲突-->
            <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>

3.Unity导出Android工程的方案

这里有一个小技巧,导出工程时Unity写引用Android方法不需要导入jar包,仅需要在Android中导出即可

如图所示导出Android 工程,这里有个天坑,后面会说下:

导出Android工程后就可以在AndroidStudio中打开工程了,后面在Android中的编辑工作参考上面Activity代码。

4.踩到的一个天坑

引入三方SDK时候player setting需要这样处理Scripting Backend 选择IL2Cpp(上架版需要支持64位),不然打开外挂程序(例如三方SDK)时候会发现莫名其妙的崩溃,初步认为是monolib.so文件的问题(也就是Unity的锅)

5.致谢 以及 参考链接地址

刚开始重新捡起Android和IOS接入的东西,有些思路不太完善,如果对读者产生了误导,请见谅,本人接受任何留言批评,并会尽快改正。       

这里要感谢@lizhengwei1989@jiaxunnanling两位大佬的两篇文章,让我避免了一些踩坑的东西(也是很久不做这些东西忘得差不多了),感谢大佬让我有一次提高的东西,顺便引用下两位的文章。

如有侵权请联系,本人会自行删除引用。

最后附上大佬的文章地址:

Android与Unity交互以及各种踩的坑:https://blog.youkuaiyun.com/lizhengwei1989/article/details/54631241  

Unity与Android交互-基础知识:https://blog.youkuaiyun.com/jiaxunnanling/article/details/89947744

Unity Android平台接入支付宝SDK 最近帮一个群里的朋友接了一下支付宝的SDK,开发环境是Unity 5.4.x + Android Studio2.3版本,最终Android Studio输出的文件格式是aar而不是之前的jar,鉴于网上的文章大多数是基于Eclipse + jar包,所以记录一下基于Android Studio进行开发的过程,供大家参考。 阅读详情

相关推荐

教你快速高效接入SDK——Unity统一接入渠道SDK(Unity篇)

上一篇,我们着重讲解了用Unity开发的手游,在接入U8SDK时,Android中的部分。接下来,这一篇,我们就来看看,在Unity工程中,我们需要怎么调用上一篇中我们提供的各种接口,以及怎么接收Android中的消息通知,比如登录成功,切换帐号成功等。 在写代码之前,我们先要做一个简单的配置,在Project面板中,按照Unity官方的要求,新建一个Plugins文件夹,在Plugins文件夹下

2万+

Unity 升级targetSdkVersion33 解决方法

unity 解决升级targetsdkversion(33)的问题

qq_41827636的博客 3339

Unity接入科大讯飞SDK-安卓篇

最近需要接入sdk,现把接入科大讯飞SDK安卓端的过程整理如下: 接入SDK分成两个大的部分:安卓端 和 Unity端 安卓端主要负责导入科大讯飞的sdk,并编写相关脚本,最后生成aar包,提供给Unity使用 Unity端则根据导出的aar包调用相关方法实现科大语音的功能 本文使用的工具是:Android Studio, Unity2018.4.1f1 一、安卓端: 1.打开Android Studio,新建项目: 设置项目名称和sdk: PS:本项目中使用的Android S

啸风轩 4330

Unity 安卓打包控制台打印manifest targetSdkVersion=24 but library uses target 26

Unity 安卓打包控制台打印manifest targetSdkVersion=24 but library uses target 26踩坑点 最近用unity5.6.5f打包安卓APK,没想到遇到了扎心事 Warning: [Temp\StagingArea\AndroidManifest-main.xml:14, C:\Users\Administrator\Desktop\FishingRaft-Client2\Temp\StagingArea\android-libraries\unity-a

天道酬勤 980

【Unity游戏开发】SDK接入与集成——小白入门篇

一、简介   通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感,太尼玛无聊了(Android渠道一弄就十几个,直接吐血)。其实通常情况下接入SDK都是很简单的一个过程,本系列博客就让马三和大家从小白开始,从零基础开始学习如何接入SDK以及一些常见的SDK的...

weixin_34195142的博客 5763

Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式

上篇说清楚了Unity和Android调用的方式,很多东西没有讲很详细,因为重头在这篇,讲的是怎么具体接入Android SDK的方式,和怎么自己去做一个方便Unity接入的SDK。 如果你跟着我做完了,你应该理解到的内容: 1. 正确的完成一个方便Unity接入的SDK 2. 使用导出工程的模式完成SDK的接入 3. 使用Unity插件的形式进行Android的接入

Coding & Music & Fitness 3万+

Unity2017.4.26 修改AndroidSdkVersions 增加 AndroidApiLevel29 AndroidApiLevel30 AndroidApiLevel31

targetSdkVersion AndroidApiLevel30 AndroidApiLevel31

m0_73817060的博客 3022

[Unity]Unity接平台SDK(3种方式)

    最近又接了一次平台SDK,顺带着也学习了接IOS的SDK。IOS的也是边做边学的,现在还没这么清楚,就不讲了。还是来说下安卓SDK的接法,因为平台需求,我用了2种方式来接平台SDK。随便总结下,方便以后查阅。3种方式是我目前知道的,我不清楚是否还有其他接法。个人认为第一种和第三种是比较麻烦的。     1.Unity导出Andorid工程,再导入SDK库,开始写SDK代码,然后就可以打A...

学习之路 3万+

Unity 安卓 设备兼容性与应用兼容性笔记

安卓sdkversion版本兼容

weixin_43381316的博客 1080

Unity接入安卓SDK——基础篇

最近需要接入SDK,现整理在安卓端接入SDK的过程。首先需要了解Unity和安卓之间交互的方式 通过Unity安装路径下的“Classes.jar”作为两者之间沟通的桥梁,在安卓端导入该jar包,然后编写需要在Unity中调用的方法以及使用“UnityPlayer.UnitySendMessage”向Unity端传递消息,最后导出jar包供Unity端使用即可。 现详细讲述Unity接入原生安卓SDK的过程: 1.在安卓端生成jar包 本例子使用Eclipse作为安卓端的工具 首先新建项目工程:

啸风轩 4498

Unity Android SDK 接入(二) - 接入穿山甲 SDK

文章目录Android 调试 SDK新建应用和代码位SDK 包的下载和导入AndroidManifest 配置添加权限适配 Android7.0 及以上单进程或多进程都必现配置完整的 AndroidManifest.xml创建 TTAdManagerHolder 用于初始化 SDK修改 MainActivity运行测试 Android 工程Android 导出 ARRUnity 接入Unity 插...

TravelerTD_剑,酒与行者 1万+

Android compileSdkVersion、minSdkVersion、targetSdkVersion的关系以及和Unity的关系

Unity 打出的App,以Unity设置的为主,如果三方SDK gradle文件里面,使用了大于Unity设置的主版本号,则有可能会报错。

qq_37672438的博客 779

Unity 语音和视频通话快速解决方案——声网 SDK接入指南(Android)

Unity 语音和视频通话快速解决方案——声网 SDK接入指南(Android) 文章目录Unity 语音和视频通话快速解决方案——声网 SDK接入指南(Android)一、前言二、后台创建应用三、获取 SDK四、接入 Agora Voice 语音 SDK1. 导入工程2. 搭建测试场景3. 申请麦克风权限4. 初始化 IRtcEngine5. 常用 API5.1 加入频道5.2 静音5.3 离开频道 & 销毁 IRtcEngine6. 最终效果五、接入 Agora Video 视频 SDK1. 导

ZeroyiQ的博客 4086

Unity接入Android SDK

1.接入准备(如果不具备这些条件,建议放弃) 2.导入unity class 3.Android调用unity 4.unity调用Android 5.查看 AndroidManifest.xml package 非静态方法调用 静态方法调用 6.Java回调 unity 接入第三方SDK 很常见的事情,有的SDK 有官方文档,跟着文档接入即可(比如各大广告SDK),但是有写SDK没有提供unity的接入文档,提供的是Android 的接入文档,所有的接口都是面向Java的,SDK的安装也是Android S

euphorias的博客 9452

Windows 10/11 零基础配置 SillyTavern 连接 Claude API 完整指南(含 Node.js 环境搭建)

本文提供Windows 10/11系统下零基础配置SillyTavern连接Claude API的完整教程,涵盖Node.js环境搭建、SillyTavern初始化及API连接配置等关键步骤。通过详细的操作指南和实用技巧,帮助用户快速搭建AI聊天界面并优化对话体验,实现与Claude AI的高效交互。

weixin_30642561的博客 134

自组织映射神经网络(SOM)

目录 1 背景:自组织(竞争型)神经网络 2竞争学习的概念与原理 2.1 竞争学习的步骤 2.2 示例 3SOM典型结构 4SOM网的权值调整域 5 SOM Kohonen 学习算法 6 SOM示例 7SOM设计细节 7.1输出层设计 7.2输出层节点排列的设计 7.3 权值初始化问题 7.4学习率的设计 7.5设计拓扑领域 8SOM功能分析 8.1 保序映射 8.2数据压缩 8.3 特征提取 9自组织映射神经网络与K均值算法的区别...

weixin_39910711的博客 1万+

Unity 和 Android Studio的SDK接入(新手心得)

AndroidManifest.xml前言 刚大学毕业入职不到三个月,让接SDK,就在网上学习查找了一些。肯定有很多不足之处,请多多指教 写的这篇文章呢,只适合没有方向的,不知道怎么开始的(我就是,学了5天,浪费了3天,不知道方向),仅仅提供一个方向。至于接入微信、支付宝之类的,之后有时间再写(关键是我还没上手呢,嘿嘿嘿)。 Unity 使用的是2018.4.4f1 Android Studio 使用的是2021/09/09日在官网下载的(...

小小路灯的博客 1万+

快速傅里叶变换(FFT)的汇编实现在DSP开发中

在数字信号处理(Digital Signal Processing,DSP)开发中,使用汇编语言实现FFT可以进一步提高计算性能和优化系统资源的使用。FFT是一种分治算法,它通过将一个长度为N的离散时间域序列分解为多个长度为N/2的子序列,然后递归地进行计算。开发者可以根据实际需求,结合具体的硬件平台和编译器工具链,对FFT的汇编实现进行优化和定制化。需要注意的是,上述示例代码中只给出了FFT的基本框架,具体的合并操作及其他细节需要根据实际需求进行实现。上述示例代码演示了一个简单的FFT汇编实现。

QoTypescript的博客 683

unity游戏接入安卓SDK

1. unity游戏需要接入安卓sdk的话,建议是把unity项目导出安卓工程,然后把安卓工程再导入进AndroidStudio(安卓开发工具)里,原因是安卓的应用商店SDK非常多,大的小的加起来有几十家SDK,而这些SDK的文档全是安卓的。如果游戏项目很大,可以选择这LZ4,导出时会压缩工程,我这个就非常大,压缩完了还有2G,然后Export导出,导出后就得到一个安卓工程啦。8.3 如果需要游戏传入参数比较多,比如支付,可以把参数封装的Json里,转换为字符串,然后传递过来再解析。

天神哥哥的博客 3627

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

Unity Android SDK 接入(一) - Unity 与 Android 交互

文章目录Unity 和 Android 交互流程总结API 详解概述Unity 发布 Android 的基础概念关于 classes.jaraar 和 jar 的区别关于 AndroidManifest关于 AndroidManifest 的合并发布 APK 的两种方式Unity 接入 SDK 两种方法如何在 Unity 中调用 Android 的 java 代码如何在 Android 调用 Un...

TravelerTD_剑,酒与行者 4343

广义正态分布优化算法(GNDO)详解:从理论到实践

广义正态分布优化算法(GNDO)是一种基于正态分布理论的新型元启发式优化算法。该算法通过局部开发和全局探索两种策略平衡搜索过程:局部开发利用广义平均位置和标准差进行精细搜索,而全局探索通过随机个体信息共享扩大搜索范围。GNDO具有参数少、结构简单、收敛速度快等优点,在光伏模型参数提取等工程优化问题中表现优异。算法将种群位置更新与正态分布参数调整相联系,通过自适应机制平衡探索与开发,数学分析表明其具有全局收敛性。相比传统优化算法,GNDO在探索能力和开发能力上均有优势,是高维复杂优化问题的有效解决方案。

qq_42212808的博客 138

unity接入第三方SDK入门教程(安卓端)

前言 刚入职时接过一次SDK,不过当时由于经验不足接入失败了。现在工作已经半年了,前几天又遇到接入SDK的需求,于是这次主动请缨,抱着一雪前耻的决心打算与SDK接入刚到底,最终花了三天时间搞定。其实接入SDK并不困难,但是从来没接触过的人可能会一脸懵逼。下面总结接入的经验,供自己日后查看翻阅,也希望能对你有所帮助。 1.准备工作 1.1创建项目 我使用的是AndroidStudio,安装步骤就不一...

lcy的博客 6052

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 973

Kylin操作系统下OpenLDAP安装

Kylin操作系统下OpenLDAP安装

跟着大数据和AI去旅行 1612
上一篇: Unity笔记——异步加载场景
下一篇: 计算机启动流程
梦幻虚无
博客等级 码龄11年 6粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值