1,如果你在安卓端写的方法接口中的上下文参数是context的,在传参的时候,如果传入的是在unity端获取的unityplayactivity的话,是需要获取context才能正常调用方法的。

AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = player.GetStatic<AndroidJavaObject>("currentActivity");
//第二个参数在android端方法参数是context,但是传入了activity,这样是会无法正常调用的
aalib.CallStatic("init", activity , "id");

正常的调用应该是

AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = player.GetStatic<AndroidJavaObject>("currentActivity");
//获取context
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
//传入context,方法正常调用
aalib.CallStatic("init", context, "id");

2,如果你在unity的类中声明了一个全局变量X(在android中应该是叫类的成员变量),在方法A中将该全局变量X初始化或赋值了,在方法B中再去调用该全局变量X,获取的该变量依然为null。这个问题在其他语言看来无法理解,解决该问题,需要将该变量声明位静态变量,那么该值就能保存已经赋值的传值。

private AndroidJavaObject reward;
public void a() {reward = new Reward();
}public void a() {//在该方法调用reward会为空reward.test();
}

修改后为

//需要将其声明为static
private static AndroidJavaObject reward;
public void a() {reward = new Reward();
}public void a() {//在该方法调用reward才不会空reward.test();
}

为什么C#这样处理,有答案的小伙伴可以解答一下。

3,关联脚本报错:the script does not contain a class derived from unityengine.monobehaviour。

遇到这种问题,就是unity开发工具自己啥乱报的,动不动来个异常,让人匪夷所思。把你导入的unitypackage移除重新导入吧,不然unity工具它会跟你扯上一天都不让你过。

4,交互方法的参数传值类型不对,导致的一直报错以下异常:

//错误的传参
RewardVideoCallback callback = new RewardVideoCallback();
rewardSetting.Call<AndroidJavaObject>("setRewardVideAdListener", callback);
 Unity: Exception: JNI: Unknown signature for type 'ddemo+RewardVideoCallback' (obj = ddemo+RewardVideoCallback) instanceat UnityEngine._AndroidJNIHelper.GetSignature (System.Object obj) [0x00318] in /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1531 at UnityEngine._AndroidJNIHelper.GetSignature[ReturnType] (System.Object[] args) [0x0001c] in /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1554 at UnityEngine._AndroidJNIHelper.GetMethodID[ReturnType] (System.IntPtr jclass, System.String methodName, System.Object[] args, System.Boolean isStatic) [0x00001] in /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1356 at UnityEngine.AndroidJNIHelper.GetMethodID[ReturnType] (System.IntPtr jclass, System.String methodName, System.Object[] args, System.Boolean isStatic) [0x00001] in /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJNI.bindings.cs:166 at UnityEngine.AndroidJavaObject._Call[ReturnType] (System.String methodName, Sy

注意这里:RewardVideoCallback这个是unity中脚本定义的接口,不是android端方法参数的类型,所以导致设置方法一直异常,无法继续执行方法。

将RewardVideoCallback这个参数的传值改为android端的参数类型即可解决该问题。

//正确的传参
RewardVideoCallback callback = new RewardVideoCallback();
//这个才是android端方法接口的参数类型
RewardVideoListenerProxy listenerProxy = new RewardVideoListenerProxy();
listenerProxy.listener = callback;
rewardSetting.Call<AndroidJavaObject>("setRewardVideAdListener", listenerProxy);

5,集成某些外部sdk的时候,会报异常

unity java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList

首先这不是其他网上文章说的android surpport 和 androidx support的问题,这是缺乏了support的依赖包,如果你只是从支持库中的 "D:\android-sdk-window\extras\android\support"中将support中导入该support.v4的jar包,运行编译还是会报错的。

解决办法如下:

找到对应support库的aar包,例如在这个github项目中(https://github.com/Thetudors/Unity-Admob-ads/blob/master/Assets/Plugins/Android/libs/support-v4-24.1.1.aar)将其aar包下载下来,并添加到对应unity项目的unity/Plugins/Android目录中,就可以解决缺少aar的问题。

unity和android交互问题整理相关推荐

  1. 开发手札:Unity与Android交互

    先祝贺我国疫情基本结束,感谢为疫情奉献热血甚至生命的医护人员! 接下来进入正题. 用unity做一个手机app游戏基本上都需要与android和ios交互,比如调用系统函数,调用sdk等.这是unit ...

  2. Unity与Android交互 选择文件打开方式

    Unity游戏开发移动端 ,麻烦的就是与Android交互,现在就教如何在unity中 传入文件路径调用android选择打开方式来查看一个文件: 首先创建一个android项目 进入Android ...

  3. Unity与Android交互

    转载自 http://www.narkii.com/club/thread-320335-1.html 这段时间在研究嵌入sdk,途中遇到不少问题和坑,在这就不一一说了.嵌入sdk是比较常见的吧,如接 ...

  4. Unity与Android交互(双端通信)

    前言 最近小编开始做关于手部康复的项目,需要Android集成Unity,以Android为主,Unity为辅的开发:上一篇给大家分享了Unity嵌入Android的操作过程,所以今天想给大家分享一下 ...

  5. [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  6. 开发手札:Unity与Android交互(Unity2019+)

    又要整android原生功能了,这次是使用unity2019+版本和as4+版本.和之前的一篇Unity2018+AS3+交互是不一样的,所以再次记录一下.       我会将操作写的很详细,标识也会 ...

  7. android调用unity,大神们,请问unity和Android交互的时候,为什么总是调用不到方法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package="com.vcgame.xxdq.miKu" android:versionCode="1" an ...

  8. unity3d android 回调,大神们,请问unity和Android交互的时候,为什么总是调用不到方法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package="com.vcgame.xxdq.miKu" android:versionCode="1" an ...

  9. Unity与Android交互之✨| 使用AndroidJavaProxy代理方式,让Android与Unity通讯

最新文章

  1. 网站性能优化的常用方法
  2. 自动设置为兼容模式html5,HTML5中怎么调兼容性?
  3. UDP socket 设置为的非阻塞模式
  4. [LeetCode] Single Number
  5. java内部类选择题_java内部类详解(附相关面试题)
  6. React开发(130):ant design学习指南之form中的新城多个表单
  7. 科园贸易:帆软助力其推动数据应用落地,打造自主可控数据平台
  8. 模型计算量(FLOPs)和参数量(Params)的理解
  9. jdk并发包里常用的类
  10. @transactional可以用在controller层吗_石晶地板可以用在浴室吗?
  11. eclipse连接sql数据库
  12. 认识Hyperledger
  13. HTML5、css3、js实现3D相册
  14. 【教学类-30-01】5以内加法题不重复(一页两份)(包含1以内、2以内、3以内、4以内、5以内加法,抽取最大不重复数量)
  15. 前端工程师简历怎么写才更容易进入面试呢?
  16. 如何设置修改网页中滚动条
  17. memcpy越界引起的segment fault
  18. 用C语言写一个 将从终端上接收到的8个一字节数据用3des加密之后再连接上随机生成的八个一字节的数据再发送给终端...
  19. 管理信息系统基础知识点
  20. citespace教程

热门文章

  1. cad相对坐标快捷键_CAD中相对坐标绝对坐标的输入方法
  2. 2022年9月份前端女生工作总结
  3. 吴恩达机器学习——反向传播算法
  4. 全媒体运营师胡耀文教你:社群运营这6种裂变模型,你掌握了吗?
  5. matlab 向量_COMSOL与MATLAB联合仿真+RBF神经网络预测输出
  6. 分辨率1080P、2K、4K、8K的含义和区别
  7. Unity二维平面上物体的移动(十一)-位移和推动力移动的区别
  8. opencv PIL读取图像得到的图像格式
  9. 解绑定和释放弹性云服务器的弹性公网IP
  10. 2020大数据面经整理