使用Android Studio开发NDK
参考
http://blog.csdn.net/zhuwentao2150/article/details/52075902?locationNum=2&fps=1
1、搭建ndk开发环境
2、配置build.gradle文件,注意这里的gradle文件是Modle中的gradle
moduleName:生成.so库文件的名称
ldLibs: 引入一些库,这里我们引入打印log所需要的库
abiFilters: 输出指定的三种abi体系结构下的so库文件
到这里我们的NDK开发环境就算集成好了
3、编写java native方法
package com.lwb.testndk;
/**
* Created by lenovo on 2017/2/6.
*/
public class GetString {
static {
// 静态初始化代码块,这里加载的库名称要和 gradle 中定义的 moduleName 名称一致
System.loadLibrary("LwbLib");
}
// 该处报红,是因为在本地没有对应的 JNI 函数,但不影响编译
public static native String getNativeStr();
}
完后需要使用 Build->Make Project 一下,在D:\app\android\TestNdk\app\build\intermediates\classes\debug目录下生成.class文件,生成的.class文件
4、 产生头文件的命令行:
D:\app\android\TestNdk>cd app\build\intermediates\classes\debug
D:\app\android\TestNdk\app\build\intermediates\classes\debug>javah com.lwb.testndk.GetString
拷贝头文集到 jni目录下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lwb_testndk_GetString */
/* 要使用Log则需要引用 android/log.h 这个头文件 */
#include <android/log.h>
/* 可以根据需要调用不同类型的 LOG */
#ifndef LOG_TAG
#define LOG_TAG "ANDROID_LOG"
#define LOG_E(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG , __VA_ARGS__)
#define LOG_I(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG , __VA_ARGS__)
#define LOG_W(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG , __VA_ARGS__)
#define LOG_D(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG , __VA_ARGS__)
#endif
#ifndef _Included_com_lwb_testndk_GetString
#define _Included_com_lwb_testndk_GetString
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lwb_testndk_GetString
* Method: getNativeStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_lwb_testndk_GetString_getNativeStr
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
#include "com_lwb_testndk_GetString.h"
JNIEXPORT jstring JNICALL Java_com_lwb_testndk_GetString_getNativeStr
(JNIEnv *env, jclass jObj){
LOG_E ("log 类型 _E");
LOG_I ("log 类型 _I");
LOG_D ("log 类型 _D");
LOG_W ("log 类型 _W");
return (*env)->NewStringUTF(env, "Hello lwb 111 !!!");
}
6、编写Android测试代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView =(TextView)findViewById(R.id.text);
textView.setText(GetString.getNativeStr());
TextView textView2 =(TextView)findViewById(R.id.text2);
textView2.setText(GetString2.getNativeStr2());
}
}