首页 > 解决方案 > 在unity3d中调用android函数时出现错误java.lang.NoSuchMethodError?

问题描述

我的步骤:(1)在unity3d中,我添加了以下代码:

AndroidJavaClass jc = new 
AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("Pay", "key");

(2) 将 Unity3d 项目导出到 Gradle(New),我得到一个包含活动文件的 gradle 项目:

在 AndroidManifest.xml 中,主要的活动是:

android:name="com.fs.game.UnityPlayerActivity"

(3) 我在文件 UnityPlayerActivity.java 中添加了一个 Pay 函数:

public void Pay(String key)
{
    // test
}

(4) 最后,使用gradlew build构建这个项目,并在我的手机中安装apk。但是当我点击测试按钮时,我得到了错误:

java.lang.NoSuchMethodError:在类 Lcom.fs.game.UnityPlayerActivity 中没有名称 = 'Pay' signature='(Ljava/lang/String;)V' 的非静态方法;

问题出在哪里?

标签: androidunity3dgradle

解决方案


我认为你的代码是正确的。你用 gradle 构建它,而 gradle 默认有一个插件Proguard。Proguard 用于缩小或混淆代码,因此您的方法名称可能会因混淆而更改。

您应该:

1> 编辑build.gradle以禁用 proguard

2> 修改Proguard使用的txt文件(如proguard-android.txt、proguard-unity.txt),添加keep规则以保持你的类不被混淆。


推荐阅读