本机代码 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
答案 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"
}
}