"无法解决相应的JNI功能" Android Studio

时间:2017-03-20 21:19:39

标签: android android-ndk

本机代码 native.c

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=ocrex
LOCAL_SRC_FILES:=ndkTest.c

include $(BUILD_SHARED_LIBRARY)

Android.mk文件

APP_ABI := all

Application.mk文件

public native String helloWorld();
static{
    System.loadLibrary("ocrex");
}
MainActivity中的

代码

onServiceConnected

该方法被识别为在本机代码中声明(侧栏上的注释)

1 个答案:

答案 0 :(得分:6)

首先,如果您使用的是android studio 2.2及更高版本,请使用Cmake,因为Android Studio的本机库默认构建工具是CMake。但是如果你需要ndk-build android studio仍然支持ndk-build。

1)将JNIEXPOT和JNICALL添加到本机方法中,并确保com_lab5_oli_myapplication是MainActivity类的包名。

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

JNIEXPORT jstring  JNICALL Java_com_lab5_oli_myapplication_MainActivity_helloWorld(JNIEnv* env,jobject obj)
{
    return (*env)->NewStringUTF(env,"Hello world");
}

2)在Android.mk文件中更改源名称,您的c ++名称是native.c,但在Android.mk文件中,您使用的是ndkTest.c文件名。

LOCAL_SRC_FILES:=ndkTest.c
//change it to 
LOCAL_SRC_FILES:=native.c

最后,您必须将gradle链接到本​​机库。 1)如果您有android studio 2.2及以上版本,请右键单击该应用程序并使用gradle链接c ++项目。如果您使用的是ndk-build,那么如果您使用的是Cmake build,请选择Android.mk文件,选择插入CmakeLists的地址。 2)您也可以手动配置gradle以包含本机库。您需要将externalNativeBuild块添加到模块级build.gradle文件中,并使用cmake或ndkBuild块进行配置:  如果您使用的是cmake

 externalNativeBuild {

    // Encapsulates your CMake build configurations.
    cmake {

      // Provides a relative path to your CMake build script.
      path "CMakeLists.txt"
    }
  }

如果您使用的是ndk-build

externalNativeBuild {

    // Encapsulates your CMake build configurations.
    ndkBuild {

      // Provides a relative path to your to the Android.mk build script.
      path "Android.mk"
    }
  }

有关Android中使用thisthis的cmake和ndk的详细信息。