Android 无法解析仅在Windows操作系统中显示的相应JNI函数

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

已经有一段时间了,我向StackOverFlow发布了一个问题。 我试图描述我有什么问题,我尝试了什么……尽可能详细地描述,因为我上次发布问题时投票反对不提供详细信息。如果我没有提供或您需要任何信息来解决问题,请随时在下面进行评论,以便我能够提供解决此问题所需的信息

“我的问题”

本机方法以红色突出显示,并表示“无法解析相应的JNI函数Java\u com\u example\u0”

[图片附于下方]

当我运行这个应用程序时,它工作得非常好

红色警告标志仅在Windows操作系统中显示,在Mac操作系统中不显示

我使用的是Android Studio 2.3的最新稳定版本

“我试过什么”

一些评论建议将externalNativeBuild{…}放在gradle中,因为IDE的选择不正确

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移动到正确的包,它将解决此问题

有关更多详细信息,请参阅以下链接:

问题仍在继续。。。我真的不知道为什么会这样。