Unity AndroidJNI解析类而不是方法

时间:2018-09-22 20:41:36

标签: java c# unity3d jna

我正在尝试使用AndroidJNI与来自Unity中C#的本地Android方法进行交互,但是我只能解析类,而不能解析方法。

我还使用了“较简单的变体”,即AndroidJavaClass接口,但错误表明它试图从java.lang.Object解析方法,因此我继续使用AndroidJNI,但仍无法解析这些方法。

我有以下java方法 public static String getParamsString2() { return "asd"; }

和以下c#代码尝试解析方法ID

 AndroidJNI.GetStaticMethodID(activityClass, "getParamsString2", "()Ljava/lang/String;");

我已经从反编译器中验证了签名是正确的,但是我最终收到了以下错误消息

 java.lang.NoSuchMethodError: no static method "Lfi/matalamaki/plugin/UnityPlayerActivity;.getParamsString2()Ljava/lang/String;

当我反编译该类时,实际上是包含该方法的类

 public static getParamsString2() { //()Ljava/lang/String;
     L1 {
         ldc "asd" (java.lang.String)
         areturn
     }
 }

该类也是正确的,fi/matalamaki/plugin/UnityPlayerActivity

在将AndroidJavaClass接口与代码配合使用时

    string referrer3 = new AndroidJavaClass("fi.matalamaki.plugin.UnityPlayerActivity").CallStatic<string>("getParamsString2", new object[0]);

我收到以下错误AndroidJavaException: java.lang.NoSuchMethodError: no static method with name='getParamsString2' signature='()Ljava/lang/String;' in class Ljava.lang.Object; java.lang.NoSuchMethodError: no static method with name='getParamsString2' signature='()Ljava/lang/String;' in class Ljava.lang.Object;

似乎表明它试图从java.lang.Object而不是我自己的类解析方法。

我尝试了不同的参数和返回类型组合,但是没有运气。

我还通过反编译来验证内置的APK dex。

1 个答案:

答案 0 :(得分:0)

很明显,是Proguard通过最小化或混淆来删除或重命名了该方法。我不知道在验证之后如何看到那里的方法,但是也许我没有引起足够的重视,并且它的名称被更改了。

在我的软件包及其字段和方法上添加了proguard排除之后,现在可以解决问题。