找回密码
 立即注册
查看: 643|回复: 0

[笔记] Unity 与Android交互-调用 Android 打包 SDK

[复制链接]
发表于 2021-1-13 17:52 | 显示全部楼层 |阅读模式
题外话

我本来不想写这篇文章的,但是我特么忍无可忍了,在baidu上搜啊,出现的文章都是一个人写的,你们复制粘贴能不能敬业点,最起码改个路径啥的也对的起来搜索的小伙伴们吧,然后就是用eclipse来搞的,都3000年了啊,现在谁不用Android studio啊。逼的我没有办法了最近万里长城还格外坚固村里围栏屹立不倒,联系了下国外的小姐姐开个远程控制才寻找到了很多有用的小知识。
写作背景

有个需求就是在unity里面调用外面的各种硬件设备,所以解决各种问题就只能在android下来解决,unity里面调用来,之前搜索的都是获取什么wifi信号手机电量的,好像并没有什么卵用参考价值,这里不讲其他设备怎么在android上跑通,只说unity与android交互的桥梁,桥梁架通你调用原子弹都没人管你。
正题了啊!注意了!

    首先你得有Android studio可以有一个unity(主要是用到里面的一个jar包,到时候心情好我共享一下)要非常虔诚的读下面的内容


在Android studio上建一个新的项目


项目建好了就是这个目录
项目建立完成
然后在当前的项目里面新建一个module,注意注意!选择Android Library
准备新建module
选择android library
全凭爱好起名
创建完成后现在目录是这个 额样
里面多了一个noyaoface的module
然后我们把里面那个app的module给删掉吧,没什么 8用。
删这个应该知道怎么删除吧,算了,我还是截图吧
我这个版本的Android studio可能在我写这篇文章的时候比较新,是3.4.1的
点完OK然后在目录上右击删除
好了,这个app已经离我们而去了
开始搞代码了
我们现在看到我们新建的这个module里面跟平常app里面的目录结构没啥区别,就是里面少一个mainActivity,没有事情,我们也新建一个,这里我要说的就是,这个新建的activity就相当于我们在unity里面调用的一个入口,说了这么多,看图就行。
注意!这个给取消,我们不需要layout布局
创建好后就是这样的结构了,下面开始说重点 重点 重点
因为是unity与Android交互,里面需要用到一个unity的一个jar包,这个jar包一般都在这里
/Unity/Hub/Editor/2019.2.0b1/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Classes/classes.jar
/Unity/Hub/Editor/2019.2.0b1/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Classes/classes.jar
这个我得提一下,要不你们光知道有这个东西不知道在哪里,这个jar包好说,等会我传一下子,要是写完的时候忘了,你们联系我再给你们发,我为了这个jar包现安装了一个unity,很烦。
我们把这个jar包放到libs里面然后导入一下
开始写代码了
开这啊!这是重点!你们不管在哪里查找的资料都是说要继承这个activity,这个不能说错的,我觉得是不科学的,具体原因不细说了给你们资料里面说的挺清除,给你们转个链接就差不多明白了,这个链接国内可以打开。
我们给改成这样
代码到下面复制
  1. package com.fornb.noyaoface;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import com.unity3d.player.UnityPlayer;
  5. public class NoYaoMoney extends Fragment {
  6.     private static final String TAG = "NoYaoMoney";
  7.     private String mGameObjectName;
  8.     private static NoYaoMoney instance;
  9.     public static NoYaoMoney getInstance(String gameObject) {
  10.         if (instance == null) {
  11.             instance = new NoYaoMoney();
  12.             instance.mGameObjectName = gameObject;
  13.             UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(instance, TAG).commit();
  14.         }
  15.         return instance;
  16.     }
  17.     public void send(){
  18.         UnityPlayer.UnitySendMessage(mGameObjectName, "XMessageCallBack", "NoYaoMoney");
  19.     }
  20.     @Override
  21.     public void onCreate(Bundle savedInstanceState) {
  22.         super.onCreate(savedInstanceState);
  23.     }
  24. }
复制代码
这里我要说一下UnitySendMessage这个方法,就像我在图片里说的,之前我是用广播一秒一发送UnitySendMessage这个方法,这个方法用大白话解释就是说我在这边调用一次,unity那边就有反馈一次,跟接口作用差不多,并不是说我调用了这个方法,那边没有反馈,需要那边持续更新读取这个方法。
UnitySendMessage(参数1,参数2,参数3)
参数1不用管
参数2是在unity那边的接收方法名(在unity代码中就明白了)
参数3是传递的信息
现在表面更能就这样,可以测试了,就是在unity调用send方法,看看unity能不能读取到NoYaoMoney这个字符串。
下面就是打包,这个baidu上基本没有正确的
首先知道as打完的是XXX.arr的包,不是jar包,现在unity里面是支持arr的,而且非常方便不需要什么目录结构直接导入就能用。
我们写完这个功能让unity调用,如果是测试就没必要混淆了,要是写些不想让人看见的东西就要混淆,这里我就不写怎么混淆了,需要的小伙伴可以留言,非常简单。
这里注意重点我们在打包的时候不能把libs里面那个class.jar包打进去,因为这样会在unity里冲突,这里怎么剔除,有些人说打完包改后缀zip然后删除lib里面这个jar,我只想说qnmd,你看过arr打完包是啥样吗。都在一个jar里面了,这里只需要在build.gradle里面改下即可
这样打包的时候就不会打到里面
点一下,打包开始
successful。打包成功!
现在这个arr包就可以当sdk给unity的小伙伴发过去了,可以用gui看一下jar里面的样子,因为是没混淆的,都可以看到
现在把arr传给小伙伴了,然后告诉他这样用就可以了
  1. public string className="com.fornb.noyaoface.NoYaoMoney";
  2. public Text callbackText=null;
  3. public Text resultText=null;
  4. private AndroidJavaObject pluginObject=null;
  5. void Start()
  6. {
  7. #if UNITY_ANDROID&&!UNITY_EDITOR
  8. pluginObject=new AndroidJavaClass(className).CallStatic<AndroidJavaObject>("getInstance",gameObject.name);
  9. pluginObject.Call("send");
  10. #endif
  11. }
  12. public void XMessageCallBack(string str){
  13.     //str会接收NoYaoMoney这个字符串
  14.    //UnityPlayer.UnitySendMessage(mGameObjectName, "XMessageCallBack", "NoYaoMoney");
  15.    //比较一下UnitySendMessage参数的作用
  16. }
复制代码
感谢有个小哥哥的代码参考,因为不是在自己电脑上看的找不到小哥哥的链接了
纯属  吧乱泡,看看就行了,有什么问题留言

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 18:34 , Processed in 0.144918 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表