AS中JNI项目创建以及项目中遇到的坑

1、首先先创建一个普通的Android项目,


2、创建一个JniTest类,并且在类中创建native方法;


3、使用javaH生成.h文件,步骤如下:

打开Terminal,进入到工程的main目录下 输入一下命令


然后就会在java目录下面生成com_yyz_test_jnidemo_JniTest.h

文件,然后在main目录下面创建一个jni文件夹,把此文件拷贝到jni目录下面,可以重新命名JniTest.h(可以根据个人爱好命名),如图


4、在jni目录下面根据JniTest.h创建对应的C文件,c文件中的内容如下:

#include

#include

#include "JniTest.h"

JNIEXPORT jstring JNICALL Java_com_yyz_test_jnidemo_JniTest_getHello

(JNIEnv *env,jobject object){

return (*env)->NewStringUTF(env,"hello world From C");

}

5、创建Android.mk文件,内容如下:

前两项是固定写法,LOCAL_MODULE必须和JniTest中的sayJni保持一致,LOCAL_SRC_FILES 代表c文件的名称 ,include $(BUILD_SHARED_LIBRARY)固定写法


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := sayJni

LOCAL_SRC_FILES := c_test.c

include $(BUILD_SHARED_LIBRARY)

6、在项目App根目录下面创建CMakeLists.txt,文件内容如下:

cmake_minimum_required(VERSION 3.4.1)

add_library(# Sets the name of the library.

# 设置so文件名称.

sayJni

# Sets the library as a shared library.

SHARED

# 设置这个so文件为共享.

# Provides a relative path to your source file(s).

# 设置这个so文件为共享.

src/main/jni/c_test.c)

find_library(# Sets the name of the path variable.

    log-lib

    # Specifies the name of the NDK library that

# you want CMake to locate.

    log )

target_link_libraries(# Specifies the target library.

    # 制定目标库.

    sayJni

# Links the target library to the log library

# included in the NDK.

    ${log-lib} )

7,在App中的build.gradle文件中defaultConfig添加


ndk{

moduleName"sayJni"

}

externalNativeBuild {

cmake {

cppFlags""

        //生成多个版本的so文件

        abiFilters'arm64-v8a','armeabi-v7a'

    }

}

在android下面添加


externalNativeBuild {

cmake {

path"CMakeLists.txt" //编译后so文件的名字

    }

}

具体如下图所示:


6,rebuild项目,就会在app/build/intermediates/cmake/debug/obj下面有对应的.so文件。

7,项目中可能遇到的坑。

坑1、javah不是内部或者外部命令  解决比较简单,检查环境变量配置。

坑2,编译时候,报下面的错误:                                           

CMake Error in CMakeLists.txt:  The CMAKE_CXX_COMPILER:  D:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe  is not a full path to an existing compiler tool.  Error:executing external native build for cmake D:/Android/Projects/Join/app/CMakeLists.txt 

或者 Cause: executing external native build for cmake

此错误网上的解决方法,基本没什么用处,唯一正确的方法是,AS自带的NDK开发包里面的东西不全,需要去官网下载一个最新的NDK包,然后去重新配置环境变量,重启,然后rebuild一下,就搞定了。

7希望此文章对你有所帮助。下面是代码的链接:GitHub - yyz1218/JniDemo: As中创建JNI项目,并且声称.so文件,调用c

你可能感兴趣的:(AS中JNI项目创建以及项目中遇到的坑)