Android Studio中使用NDK/JNI

app下的build.gradle中加入:

defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
            }
        }
        ndk {
            abiFilters  'armeabi','armeabi-v7a','x86'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }



gradle.properties中增加下面的属性使用旧版的ndk功能(不添加会使用实验性的ndk构建工具) 

android.useDeprecatedNdk=true

配置CMakeLists:

cmake_minimum_required(VERSION 3.4.1)

add_library( native-lib
             SHARED
             src/main/cpp/native-lib.cpp
             src/main/cpp/test_ffmpeg.cpp)

find_library( log-lib
              log )


find_library( android-lib
              android )

#set(distribution_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})

set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories(src/main/cpp)

target_link_libraries(native-lib
                      ${log-lib}
                      ${android-lib})


声明native方法

public class JniUtils {
    public static native int getCountJNI(int x, int y);
}



使用AS的Terminal窗口

执行命令:

cd app/src/main/java

然后执行:

javah -jni wjy.geridge.com.testndk.jni.JniUtils(JniUtils类全路径)

会在app/src/main/java目录下生成wjy_geridge_com_testndk_jni_JniUtils.h文件

将wjy_geridge_com_testndk_jni_JniUtils.h文件剪切到cpp目录

在创建一个c/c++文件加入如下代码:

#include "wjy_geridge_com_testndk_jni_JniUtils.h"


JNIEXPORT jint JNICALL Java_wjy_geridge_com_testndk_jni_JniUtils_getCountJNI
    (JNIEnv *env, jobject clazz,jint x,jint y){
   return x+y;
}


jstring,jint是 Java语言中的String、int类型, 方法名格式为 : Java_完整包名类名_方法名();

-- env参数 : 代表的是Java环境, 通过这个环境可以调用Java里面的方法;

-- clazz参数 : 调用C语言方法的对象, thiz对象表示当前的对象, 即调用JNI方法所在的类;

x,y是Java传过来的参数

最后在Android中调用getCountJNI方法
textView.setText(JniUtils.getCountJNI(8,9)+"");


运行如果有下面的错误

这里写图片描述

是因为你先操作的Terminal终端没退出来有两种解决办法1.你敲回原工程路径,如本人的如下

cd E:\ndk\TestNdk

2.另一种方式是重启IDE,这样你再整的时候就可以了


关于Android Studio中配置NDK开发环境 :http://blog.csdn.net/yywan1314520/article/details/52076132

进一步研究JNI :  http://blog.csdn.net/quan648997767/article/details/65444138


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章