美文网首页
AS中JNI项目创建以及项目中遇到的坑

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

作者: 夜行者_姚 | 来源:发表于2018-09-03 16:13 被阅读0次

    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项目创建以及项目中遇到的坑

          本文链接:https://www.haomeiwen.com/subject/llabwftx.html