Android 无法解析仅在Windows操作系统中显示的相应JNI函数
已经有一段时间了,我向StackOverFlow发布了一个问题。 我试图描述我有什么问题,我尝试了什么……尽可能详细地描述,因为我上次发布问题时投票反对不提供详细信息。如果我没有提供或您需要任何信息来解决问题,请随时在下面进行评论,以便我能够提供解决此问题所需的信息 “我的问题” 本机方法以红色突出显示,并表示“无法解析相应的JNI函数Java\u com\u example\u0” [图片附于下方] 当我运行这个应用程序时,它工作得非常好 红色警告标志仅在Windows操作系统中显示,在Mac操作系统中不显示 我使用的是Android Studio 2.3的最新稳定版本 “我试过什么” 一些评论建议将externalNativeBuild{…}放在gradle中,因为IDE的选择不正确Android 无法解析仅在Windows操作系统中显示的相应JNI函数,android,android-ndk,java-native-interface,native,Android,Android Ndk,Java Native Interface,Native,已经有一段时间了,我向StackOverFlow发布了一个问题。 我试图描述我有什么问题,我尝试了什么……尽可能详细地描述,因为我上次发布问题时投票反对不提供详细信息。如果我没有提供或您需要任何信息来解决问题,请随时在下面进行评论,以便我能够提供解决此问题所需的信息 “我的问题” 本机方法以红色突出显示,并表示“无法解析相应的JNI函数Java\u com\u example\u0” [图片附于下方] 当我运行这个应用程序时,它工作得非常好 红色警告标志仅在Windows操作系统中显示,在Mac
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
我在Mac操作系统中进行了测试,警告标志消失了,但在Windows操作系统中,警告标志没有消失,Windows操作系统是我公司必须使用的操作系统。
我确保我有相同的源代码,并且我还导入了我在Mac OS中测试的项目。仍然显示警告标志
我知道有人建议,但是,我不想简单地忽略警告标志,因为稍后我需要移植已经移植了库的第三方项目,并包含许多本机方法,我需要查看它们是否正确链接
有没有人遇到过与我相同的问题并解决了这个问题?
[源代码]
main活动
package com.example.sonic.jniexample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
HelloNDK helloNDK = new HelloNDK();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textview);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(helloNDK.stringFromJNI());
}
});
}
}
HelloNDK
package com.example.sonic.jniexample;
public class HelloNDK {
static {
System.loadLibrary("hello-jni");
}
public native String stringFromJNI();
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_CFLAGS += -std=c++14
LOCAL_SRC_FILES := hello-jni.cpp
include $(BUILD_SHARED_LIBRARY)
APP_MODULES := hello-jni
APP_ABI := all
应用程序.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_CFLAGS += -std=c++14
LOCAL_SRC_FILES := hello-jni.cpp
include $(BUILD_SHARED_LIBRARY)
APP_MODULES := hello-jni
APP_ABI := all
com\u示例\u sonic\u jnie示例\u HelloNDK.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_sonic_jniexample_HelloNDK */
#ifndef _Included_com_example_sonic_jniexample_HelloNDK
#define _Included_com_example_sonic_jniexample_HelloNDK
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_sonic_jniexample_HelloNDK
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_sonic_jniexample_HelloNDK_stringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
问题实际上是HelloNDk的包,它与.so文件中定义的不同。将HelloNDk移动到正确的包,它将解决此问题 有关更多详细信息,请参阅以下链接:
问题仍在继续。。。我真的不知道为什么会这样。