3

有两种方法可以让 Android 原生 C/C++ 调用 Java 代码。

  1. Java 应用程序首先调用本机函数。本机函数保存 JavaVM 和 JNIEnv,然后使用它们调用 Java 代码,比如 Java 类 X。

  2. 本机函数调用相同的 Java 类 X。在这种情况下,我们需要一个 JVM 来运行 Java 代码。JNI_CreateJavaVM() 可用于执行此操作。

我发现以上两种方式创建的 JVM 是不同的。

这是 Java 类 X。

public class X
{
    public X()
    {
        Log.d("X", "X()");
    }
}

Log.d() 可以以方式 1 成功运行。但是,在方式 2 中,我从 logcat 收到以下错误消息:“No implementation found for native Landroid/util/Log;.println_native(IILjava/lang/String ;java/lang/String;)I"

我认为从 JNI_CreateJavaVM() 获得的 JNIEnv 遗漏了一些东西。如果我必须使用方式2,我该如何解决问题?

4

1 回答 1

1

也许 com.android.internal.util.WithFramework 中的代码可以帮助你。在这里查看我的类似问题

于 2012-10-21T22:17:37.717 回答