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


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