Android NDK JNI 点表示法方法签名变量

问题描述 投票:0回答:2

我有以下方法,它有多个参数点表示法:

static public void configure( Activity activity,String client_options, String app_id, String... zone_ids )

所以现在我想这样称呼它:

jmethodID configMethodID =(*env)->GetStaticMethodID(env, adcolonyclazz, "configure","(Landroid/app/Activity;Ljav/lang/String;Ljava/lang/String;[java/lang/String;)V");

但我得到的只是:

java.lang.NoSuchMethodError:没有名称='configure'签名='(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;[java/lang/String;)V'的静态方法

同样适用:

jmethodID configMethodID =(*env)->GetStaticMethodID(env, adcolonyclazz, "configure","(Landroid/app/Activity;Ljav/lang/String;Ljava/lang/String;Ljava/lang/String;)V");

有谁知道这个特定方法的签名变量。谢谢

java android android-ndk
2个回答
2
投票

正确的签名是

javap -s
输出的任何内容。当有工具可以 100% 准确地为您写签名时,不要尝试自己写签名。


0
投票

接受的答案是正确的,但是,我很难找出 javap 的正确语法。以下是在 Linux 系统上的 Android Studio Giraffe 终端窗口中运行时对我有用的一些命令。从项目的根目录开始。

注意: 提前完整构建您的项目,以便您的

.class
java 输出文件是最新的。
javap
采用
.class
输入,而不是源代码输入。

# Find where javap lives. I didn't have one on my path
find ~ -name javap

# Best javap candidate was found in ~/bin/android-studio/jbr/bin/javap

# Find the .class file for the class that you want to run javap on
find . -iname Foo.class

# .class file found in ./mygreatapp/build/intermediates/javac/debug/classes/com/awesomecompany/mygreatapp/packagename/Foo.class

# cd into the base directory for .class output. Stop at classes. Don't go into com/blahblah
cd ./mygreatapp/build/intermediates/javac/debug/classes

# Now we can run javap. I include -p because I needed private method signatures
~/bin/android-studio/jbr/bin/javap -s -p com/awesomecompany/mygreatapp/packagename/Foo.class

最后一点。我的命令历史记录显示我曾经必须将 android jar 文件作为

bootclasspath
参数传递给 javap。我认为那是因为我想转储系统类而不是我的类之一。该命令如下所示:

~/bin/android-studio/jbr/bin/javap -s -bootclasspath ~/Android/Sdk/platforms/android-31/android.jar android.os.Parcel
© www.soinside.com 2019 - 2024. All rights reserved.