androidNDK環境的搭建和使用

TTMMJJ99發表於2017-12-13

我接觸jni的時候正在用android studio,所以我記錄一下在as上部署ndk環境的步驟。

首先先看一下大概步驟:
1,下載ndk
2,配置環境變數
3,配置as屬性
4,java測試程式碼
5,建立.h的標頭檔案
6,建立.c的測試c程式碼
7,生成so檔案
8,測試ndk環境

ok。接下來我們就來一步一步的實現。
1,下載ndk。這裡推薦使用as內部下載,google在中國也部署了伺服器,所以不用翻牆也可以下載。
這裡寫圖片描述

2,配置as中ndk路徑。如果ndk路徑沒有自動新增,則點選select即可。並在local.properties配置檔案中檢查是否正確配置路徑。
這裡寫圖片描述
配置檔案裡是你所下載ndk的路徑,我這裡是E:\sdk\ndk-bundle
這裡寫圖片描述

3,配置ndk系統環境變數,並檢測
這裡寫圖片描述
這裡寫圖片描述
dos下命令:ndk-build;出現以下資訊說明配置成功
這裡寫圖片描述
4,設定as。將ndk版本差異檢測過濾掉,要不然專案無法編譯。新增:android.useDeprecatedNdk=true
這裡寫圖片描述
5,編寫呼叫c的java程式碼。注意:這裡如果方法名報錯,不用管他。

public class JniKit {

    /**如果你的native方法報錯,沒關係,配置完成自然會編譯通過
     * @param num
     * @return
     */
    public static native int calculate(int num);

    static {
        System.loadLibrary("JniDemo");
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6,生成呼叫本地方法的.h標頭檔案。用as自帶的Terminal工具來生成。
命令:

進入你專案的java資料夾下
cd app/src/main/java
com.lh.jni是你的完整包名,後面跟具體寫有呼叫c程式碼的java類
javah -jni com.lh.jni.JniKit
這裡寫圖片描述

7,生成jni資料夾。用於存放.h和.c檔案
這裡寫圖片描述

8,將步驟6中生成的.h檔案移動到jni資料夾下,並建立一個.c檔案來寫c程式碼

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

9,寫c的測試程式碼。
include中指向你建立的.h標頭檔案
Java_com_lh_jni_JniKit_calculate;Java_包名類名方法名(引數)

#include <com_lh_jni_JniKit.h>

JNIEXPORT jint JNICALL Java_com_lh_jni_JniKit_calculate(JNIEnv *env, jclass cls, jint num) {
    return num * num;
}
  • 1
  • 2
  • 3
  • 4
  • 5

10,在as中配置生成so檔案的資訊。
這裡寫圖片描述

11,用Make Project 生成so檔案,然後執行專案。
這裡寫圖片描述

到這裡我們就可以呼叫本地的c/c++程式碼了。

12,拿出專案so檔案,供其它專案使用。
這裡寫圖片描述

這裡寫圖片描述

13,activity,測試本地c程式碼的呼叫(這裡要注意的是,移到其他專案使用,必須把含有native方法的java檔案放在與生成so檔案的同包名下)

public class MainActivity extends AppCompatActivity {

    private TextView test_jni_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        test_jni_text= (TextView) findViewById(R.id.test_jni_text);
        test_jni_text.setText("4*4="+JniKit.calculate(4));
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

到這裡,整個ndk環境的搭建、測試已經全部完成了。只有搭建好了jni環境,才能去編寫c/c++。

相關文章