AndroidManifest.xml前言

刚大学毕业入职不到三个月,让接SDK,就在网上学习查找了一些。肯定有很多不足之处,请多多指教

写的这篇文章呢,只适合没有方向的,不知道怎么开始的(我就是,学了5天,浪费了3天,不知道方向),仅仅提供一个方向。至于接入微信、支付宝之类的,之后有时间再写(关键是我还没上手呢,嘿嘿嘿)。

Unity 使用的是2018.4.4f1        Android Studio 使用的是2021/09/09日在官网下载的(应该是最新版、自信点,就是最新版的)Android Studio 下载地址

一、准备工作

Unity 和 Android Studio是必不可少的,安装过程网上有很多讲解的,就说说自己在安装的时候的问题。

1)Android Studio 安装

可以看视频安装,也可以在菜鸟教程上学习安装

Android Studio 安装菜鸟教程

在安装过程中,我出现的一个问题:

确保在安装 Android Studio 之前,已经安装好 Java JDK。在环境变量方面,%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SystemRoot%\system32,因为直接在系统变量中新建了Path,直接复制了%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;导致%JAVA_HOME%\jre\bin;%SystemRoot%\system32被覆盖没有了。我用的VSCode打开之后出现各种问题(当时这个用了俩小时才明白过来),需要注意这一点,,,我想应该没有人比我还衰吧...

2)Adnroid Studio 创建新的项目

就选这个Empty Activity ,Next就行了

选择No就可以了,静静等待

创建完成啦,接下来,我们需要把Android改为Project

为什么要创建一个新的Module,如果直接使用app里面的话,放在Unity上会有各种各样的毛病,Android Studio学的不深,找不到问题,所以,只能一步一步来喽。 点开后打开这个页面

然后到了非常重要的一点,想要Android和Unity发生交互,就需要一个Unity的一个类,这个类呢,在这个路径Unity\Hub\Editor\2018.4.4f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

这里介绍一下jar和aar

Jar文件

只包含class文件和清单文件,不包含资源文件,比如图片等所有的 res下的资源文件

aar文件

class以及res下的所有的资源文件全部包含

我们一般都打包aar文件(创建好其实就不用管了,不过养成好习惯,免得出错了都不知道哪里错了)

二、接入SDK

首先要有一个写脚本的地方吧,按照下图去创建

名字呢可以随便写

这里一开始都是空白的,可以直接从下图所示地方拷贝一份虽然没什么用

开始写脚本啦

代码参考链接

我寻思着里面有些东西没用,可能是我太菜了吧,我就留了一部分可以使用

package com.lc.sdk;import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainSDK extends UnityPlayerActivity{@Overrideprotected void onCreate(Bundle saveInstanceState) {super.onCreate(saveInstanceState);}public int Sum(int x,int y) {return x+y;}public int Max(int x,int y) {return  Math.max(x, y);}public int AddOne(int x) {return x+1;}public void CallUnityFunc(String str) {str = str +"Android Call Unity.";String ReceiveObject = "MessageHandler";String receiveMethod = "Receive";// ReceiveObject 对应Unity内的挂在脚本对象,receiveMethod对应脚本下的方法, str参数UnityPlayer.UnitySendMessage(ReceiveObject, receiveMethod,str);}
}

接下来就是图解了,嘻嘻

注意了:我ReceiveObject和receiveMethod这里没有和后面的写一致里面内容改为

String ReceiveObject = "GameManager";

String receiveMethod = "SendAndroidFunc";

你可以自己自定义名字,只要在后续Unity里面相对应即可

把代码里面的删了,图片里面,忙活了半天,不想从头搞了,将就着看

写到这里呢,我们算是把Android方面写完了,接下来,就是最重要的一步了,打包成aar,

Make Project和Rebuild Project区别参考链接 讲的跟现在版本有点出入,不过应该大差不差

编译完成后,如下图所示,会出现build,我们需要的是里面的.aar文件

快捷打开方式(英语不好,勿喷,我一直找show 没找到,最后找到这个,我想应该也有和我一样的吧):

到这里呢,Android SDK算是完成了,接下来就是下一步啦

重要一点的代码呢,如下所示:

UnityPlayer.UnitySendMessage(ReceiveObject, receiveMethod,str);

就是Android 调用Unity脚本里的方法的方式。

三、Unity与SDK的爱恨情仇

我们找到了arr包之后,打开Unity,创建一个新的项目,创建各种文件夹

其中Plugins/Android顾名思义,是用来放置Android的东东的,名字什么的都是固定的,不要写错喽

我们把aar包导入进去,然后打开这个文件夹所在位置,进行一些修改

我们是用压缩文件打开这个aar包(不出意外的话....啥都可以,这里我用的是7-ZIP(是真的舒服))

删除libs下的classes.jar,点击编辑AndroidManifest,这里简单介绍一下这个文件作用,就是应用清单,每个应用的根目录中都必须包含一个,并且文件名必须一模一样。简单来说,就是告诉系统,哥儿,这里面就是我们要用的东东啦(脚本呀,脚本呀,脚本呀...(目前只用到这个,别的用不用不晓得,不过我们不需要了解辣么多啦))。

代码如下,不要全复制粘贴哟,需要改动的

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.lc.sdk" ><uses-sdkandroid:minSdkVersion="16"android:targetSdkVersion="31" /><applicationandroid:allowBackup="true"android:icon="@drawable/app_icon"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/UnityThemeSelector" ><activityandroid:name="com.lc.sdk.MainSDK"android:label ="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

android:allowBackup="false"

android:supportsRtl="true"

到这里呢,就算把SDK导入到Unity里面啦

接下来就需要在Unity脚本里调用啦,在那之前,我们先搭界面

就...很随意

创建一个空物体用来放置我们脚本GameManager(其他名字就行,我...一丢丢强迫症)

代码如下:

using System;                                       //不能删,在#elif UNITY_ANDROID里面能用到
using UnityEngine;
using UnityEngine.UI;public class GameManager : MonoBehaviour
{public Button button_XAddY,button_MAXXY,button_XAdd1,button_Send;public Text text_log;AndroidJavaClass jc;AndroidJavaObject jo;public InputField inputFieldX;                  //用来输入数字的UI组件public InputField inputFieldY;private void Start() {text_log.text+="\r\n"+"初始化Start";button_XAddY.onClick.AddListener(AddXY);button_MAXXY.onClick.AddListener(MaxXY);button_XAdd1.onClick.AddListener(AddX1);button_Send.onClick.AddListener(SendCall);
#if UNITY_EDITOR                                    //预处理器指令,简单来说,在什么平台,调用里面的什么方法,注意的是,不在这个平台的话,他不会编译
#elif UNITY_ANDROID                                 //比如,这个安卓,在Unity_Editor模式下,他不会进行编译jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");  //实例化AndroidJavaClass,里面的com.unity3d.player.UnityPlayer是固定的jo=jc.GetStatic<AndroidJavaObject>("currentActivity");      //固定的写法
#elif UNITY_IOS
#endiftext_log.text+="\r\n"+"初始化结束";}private void AddXY(){
#if UNITY_EDITOR
#elif UNITY_ANDROIDtext_log.text+="\r\n"+"X+Y开始:";//int a =Int32.Parse(inputFieldX.text);         //这里就很神奇,刚开始,使用的是Convert.ToInt32(),Unity总是报错,后来检查错误时候发现了//int b =Int32.Parse(inputFieldY.text);         //改成了Int32.Parse(),就可以通过Build了,然后我把他又改过来了,神奇的通过了int a=Convert.ToInt32(inputFieldX.text);        //就...奇奇怪怪int b=Convert.ToInt32(inputFieldY.text);text_log.text+="\r\n"+jo.Call<int>("Sum",a,b).ToString();   //jo.Call<a>("b",c,d) a里面代表返回值类型,没有的话<>就不写,b代表SDK里面的方法名,Unity就是通过这种形式调用的,c,d代表参数,一个参数写一个,多个参数写多个,可以创建一个数组,来表达多个参数,没有可以不写
#elif UNITY_IOS
#endif}private void MaxXY(){
#if UNITY_EDITOR
#elif UNITY_ANDROIDtext_log.text+="\r\n"+"X,Y最大值:";// int a =Int32.Parse(inputFieldX.text);// int b =Int32.Parse(inputFieldY.text);int a=Convert.ToInt32(inputFieldX.text);int b=Convert.ToInt32(inputFieldY.text);text_log.text+="\r\n"+jo.Call<int>("Max",a,b).ToString();
#elif UNITY_IOS
#endif}private void AddX1(){
#if UNITY_EDITOR
#elif UNITY_ANDROIDtext_log.text+="\r\n"+"X+1的值:";// int a =Int32.Parse(inputFieldX.text);int a=Convert.ToInt32(inputFieldX.text);int b=Convert.ToInt32(inputFieldY.text);text_log.text += "\r\n"+"AddOne:" + jo.Call<int>("AddOne",a);
#elif UNITY_IOS
#endif}private void SendCall(){
#if UNITY_EDITOR
#elif UNITY_ANDROIDtext_log.text+="\r\n"+"调用安卓方法:";//调用Java中的一个方法,该方法会回调Unity中的指定的一个方法,这里会回调Receive( )jo.Call("CallUnityFunc","Unity Call Android.\n");   //没有返回值的写法
#elif UNITY_IOS
#endif}//不能删 在SDK里调用勒 用来回调public void SendAndroidFunc(string str){text_log.text+="\r\n"+"回调后的值:";text_log.text+="\r\n"+str;}}

里面我觉得我写的很详细,就不一一介绍了,说个需要注意的点:

好啦,我们脚本写完了,接下来,就是打包啦

设置完成后,我们就可以打包啦

打包完成啦,可以把这个包传到自己手机上或者下载个模拟器, 我这里呢,用的是雷电模拟器

直接把包拖入即可

接下来就进行测试啦

全都能用耶,欧耶~!

到这里呢,算是结束了

接下来说一些让我最头疼的事情,打包过程中出现的问题

1)因为采用了预编译,在编写脚本的时候,不会给你报错,所以,一定要细心检查,简单点,可以直接拉出来,我有个问题,上面脚本里写得,都是我的错啊~

2)打包失败,可以看看是否路径有问题,这个项目不能放在中文目录下进行打包

3)也不能打包在Asset下,这个我想没啥用(就找错时候看到有人提到,就在这里说一下)

4)打包时候,要把Build System 设置为Internal

5)有时候,可能是Unity莫名其妙的错误,有人打包不成功,直接打包的别的文件夹成功了,可以试试打包到别的文件夹(虽然我没有这个,也没见识到)

6)打包出错了,先看看控制台,是不是脚本代码里有问题,有修改即可(当时只顾百度,没注意到,浪费了2小时)

结束啦~

这篇文章,适合跟我一样的小萌新把,提供一个思路,特别是用Android Studio ,相关文章太少了,又是查资料,又是看视频,才勉强理解一点点,仅供提供一点点思路,肯定有错的地方(真萌新一枚),欢迎指正

关于接入微信登录,微信支付,支付宝支付,这些再让我消化消化,懂了之后,在写相对应的文章吧,肯定详细一点,萌新的苦,只有萌新知道。

参考链接

Unity_接安卓SDK流程详解_wy小骑士-CSDN博客_unity接入安卓sdk

整理了下studio中make Project、clean Project、Rebuild Project的区别_木木三的专栏-CSDN博客

Unity 和 Android Studio的SDK接入(新手心得)相关推荐

  1. Android Studio和SDK下载、安装和环境变量配置(全网最详细步骤)

    序言:工欲善其事,必先利其器,无论你是搞Android开发的.测试App软件的.App爬虫等都需要建立Android环境 目录 一.安装Java JDK 1.1 首先必须安装Java JDK 1.2 ...

  2. Unity与Android Studio互相调用

    ​ Unity与Android Studio互相调用 前言:因为最近在学习Unity与安卓之间的交互,所以在网上搜寻了很多关于这方面的东西.因为自己在网上搜的时候,感觉大家的东西都有些零碎,该有的差不 ...

  3. Android studio Your SDK location contains non-ASCII characters解决方法

    初学Android Studio 的朋友,在安装时可能会遇到  Android studio Your SDK location contains non-ASCII characters  这个问题 ...

  4. 报错之Android Studio中SDK安装失败HAXM

    安装Android Studio时SDK安装失败HAXM 在模拟器上显示android程序时报错haxm 一.检查自己电脑的虚拟化是否开启 1.打开任务管理器,选择性能-- cpu 2.发现没有开(如 ...

  5. android工程引入unity,Unity导出Android Studio工程

    在出游戏包的时候,如果需要接入sdk,一般都不会直接在unity里操作,而是导出android工程,在android工程里操作,从unity5.3开始已经支持导出android studio工程,相比 ...

  6. Android studio的sdk tools下没有LLDB的解决办法

    粉丝提问: 博主解答: 解决办法: 点击setting-->plugins-->找到"Android Support"选项,并勾选,然后会提示重启android stu ...

  7. Android开发(一):Android Studio及SDK下载安装教程2020

    Android开发现在基本上都用Android studio来进行了.不过因为国内的网络问题,该软件的安装一直挺费劲.一般是需要用vpn的. 最近在家办公,用家里的电脑重新配置了遍,为想开始学习And ...

  8. 解决 Android Studio 报SDK tools directory is missing

    原文来自 链接: https://www.cnblogs.com/liminghuang/p/8976258.html. 打开Android studio的工程结构目录,设置好JDK 和SDK的目录即 ...

  9. 解决003--修改android studio的SDK默认下载位置

    对于像我这样不知道节省空间的人来说,C盘已经是快要冲破我的盘符限制了,再加上有些没有进行设置的软件默认的下载路径就是C盘,以及有些时候像2345安全卫士/浏览器,360浏览器/手机助手,或鲁班大师诸如 ...

最新文章

  1. Php Fatal error: Allowed memory size of 33554432 bytes exhausted 的解决办法
  2. 网络工程师_想要记录下来的一些题_1
  3. 无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...
  4. JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。
  5. 博客,文字的卡拉OK版
  6. 学习java前_学习java之前
  7. 在python中字典和集合都是用一对什么作为界定符_Python习题(一)
  8. laravel 图片流_Laravel 之添加图片水印
  9. 眼儿媚·迟迟春日弄轻柔 [宋] 朱淑真
  10. 信息系统项目管理案例
  11. c语言程序报告的前言,C语言 程序代码编写规范前言
  12. 基础篇:6.Android数据库编程---SQLite
  13. 科研党 篇一:完成一篇SCI论文必备的20+工具
  14. Aliplayer直播截图+水印
  15. 百度有道谷歌api集成批量翻译器
  16. dimens文件生成器
  17. someone you loved 歌词翻译
  18. TabLayout 的使用 更改下划线的长度,和一个奇葩的问题
  19. Word文档如何从中间某一页开始设置页码
  20. 为什么需要克隆虚拟机,虚拟机又该怎样克隆呢?

热门文章

  1. 爬虫工具之Beautiful Soup学习
  2. [Android踩坑]解决百度定位无法自动定位的问题
  3. 解决Windows键+L不能锁屏的问题
  4. 反复流产胎停,也许是被抗磷脂综合征坑了!
  5. HoloLens2电脑投屏设置及IP访问问题解决
  6. c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
  7. VIVADO如何手动布局布线
  8. 关于CSS的学习内容三
  9. VB 任意随机数(N-M)的通用函数(单取、多取存入数组、排序等功能) 内附随机数介绍
  10. 博客营销分析:博客营销的优势+方法技巧+成功案例介绍