android NDK開發學習教程

使用NDK-build 工具進行交叉編譯
重點需要 Android.mk和Application.mk 配合否則沒法進行下一步
假如你已經搭建好NDK-build 工具的下載和環境的配置
下面進行一些筆錄

1.在需要調用Native 方法的類中寫Native 方法如
:public class MainActivity extends AppCompatActivity {
    public static   native  int cout(int a);//申明Native 方法
    static {
    System.loadLibrary(“jnidemo”);//加載libjnidemo
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int cout = cout(5);//調用native
           }

}

2,生成頭文件.h如 在app/src/main/java下執行

javah -jni 類全名

//第二部生成頭文件
        //amituodeMBP:NDK_Learn qundui$ cd app/src/main/java
//        amituodeMBP:java qundui$ javah -jni com.example.qundui.ndkonesampledemo.MainActivity
//        amituodeMBP:java qundui$
        // build 是在main 下

3 在main下創建jni 目錄存放.h和.c文件.mk配置文件

Copy 生成的頭文件如:com.example.qundui.ndkonesampledemo.MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class com_example_qundui_ndkonesampledemo_MainActivity */

#ifndef _Included_com_example_qundui_ndkonesampledemo_MainActivity
#define _Included_com_example_qundui_ndkonesampledemo_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_qundui_ndkonesampledemo_MainActivity
 * Method:    count
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_example_qundui_ndkonesampledemo_MainActivity_count
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif
android.mk文件:
LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE := jnidemo
  LOCAL_SRC_FILES :=jnidemo.c
  include $(BUILD_SHARED_LIBRARY)
Application.mk文件:】
APP_ABI := all

APP_PLATFORM := android-22
.c文件:
//
#include
#include 
JNIEXPORT jint JNICALL Java_com_example_qundui_ndkonesampledemo_MainActivity_count
  (JNIEnv * env, jclass cls, jint num){
  return num * num+200;
  }

4》在app/src/main/下執行ndk-build生成.so
5.   sourceSets{
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['src/main/libs']
        }
    }
註意在android{}裡面。

You May Also Like