Android JNI之JAVA調用C/C++層

轉載請聲明:原文轉自:http://www.cnblogs.com/xiezie/p/5929996.html html

1、java調用本地函數的開發步驟:

1.編寫本地方法的類(能夠說是用來敘述本地方法的類):

2.編譯這個類,生成該類的.class文件

在Android Studio下有不少方法:java

  • 點擊Make Project

  • Clean Project + Rebuild Project

  • 運行或Debug  APP

 

3.用javah命令生成該.class文件的.h頭文件

在Android Studio中,能夠打開命令終端並將目錄切換到app/build/intermediates/classes/debug(編譯生成的.class文件的存放路徑)下:app

終端上的命令:函數

cd app/build/intermediates/classes/debug

點擊回車,再輸入要>javah -jni 該類所在的包+該類名稱,示例以下:gradle

javah -jni com.x.mp4player.TestNdk

 

4.在src/main下創建jni文件夾、並將生成的.h文件複製到該目錄下

     

 

5.建立一個同名的.cpp文件(用來編寫C/C++代碼)

生成的.h文件代碼:ui

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_x_mp4player_TestNdk */

#ifndef _Included_com_x_mp4player_TestNdk
#define _Included_com_x_mp4player_TestNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_x_mp4player_TestNdk
 * Method:    getStringFromNative
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

編寫的.cpp文件代碼:spa

#include <jni.h>
#include <com_x_mp4player_TestNdk.h>

JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative
        (JNIEnv *env, jclass cls)
{
    return 1;
}
  •   在.cpp文件下要導入生成的頭文件  :   #include <com_x_mp4player_TestNdk.h>
  •   .h文件和.cpp文件的名稱一致,另外,他們的方法名稱也要一致

 

6.在build.gradle下加入ndk模塊

  

  • 模塊名稱要與本地方法所在的類所導入的連接庫文件名字相同,以下
    static {
        System.loadLibrary("MyJni");//導入生成的連接庫文件
    }

 

7.編譯運行

  • 若是出現錯誤,請試着在jni文件夾下建立一個空的util.c文件  或者自行調試
相關文章
相關標籤/搜索