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) instance
      at 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的问题。