使用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 <jni.h>
/* 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<com_example_qundui_ndkonesampledemo_MainActivity.h>
#include <jni.h>
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{}里面