Android-从不同的包调用JNI本机函数

Android-从不同的包调用JNI本机函数,android,java-native-interface,Android,Java Native Interface,我只是在玩我找到的Ndk教程。本机代码使用一个“包”,而活动在另一个“包”中。当这种不匹配发生时,我无法调用本机函数而不会得到不满意的链接异常。我知道“为什么”我只是不知道决议 下面是我放在jni文件夹中的示例.c代码: #include <string.h> #include <jni.h> jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv*

我只是在玩我找到的Ndk教程。本机代码使用一个“包”,而活动在另一个“包”中。当这种不匹配发生时,我无法调用本机函数而不会得到不满意的链接异常。我知道“为什么”我只是不知道决议

下面是我放在jni文件夹中的示例.c代码:

#include <string.h>
#include <jni.h>

jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
  return (*env)->NewStringUTF(env, "Hello from native code!");
}

但那是不可能的。为了清楚起见,如果我更改包以匹配.c代码中编译的内容,我知道如何实现这一点;但是,我需要能够从不同的包调用方法。。。这可能吗?

您需要创建一个只具有与C语言对话功能的基本类,而不是一个活动。然后活动可以实例化这个类,甚至可能在需要与C对话时静态地调用它。

您的问题非常混乱,但是Java源代码中的包声明必须与编码到本机方法名称中的内容一致,即它必须与javah生成的内容一致。如果更改Java代码中的包,则必须重新生成.h文件,并调整.c文件以适应。没有其他方法可以回避这个问题

package com.mydomain;

public class Activity {
    private native String com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction();
}