在unity3d中调用android函数时出错java.lang.NoSuchMethodError?

时间:2018-05-03 04:37:27

标签: android unity3d gradle

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

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

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

  • UnityPlayerActivity.java
  • UnityPlayerNativeActivity.java
  • UnityPlayerProxyActivity.java

在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:没有名称='Pay'的非静态方法   在课堂上签名='(Ljava / lang / String;)V'   Lcom.fs.game.UnityPlayerActivity;

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

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

你应该:

1&GT;编辑 build.gradle 以禁用proguard

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