使用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{}裡面。