NDK常用代码示例

常用的代码示例

Talk is cheap, show me code!
主要记录数据java端与c++端的数据交互

c++端调试接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// log.h
#ifndef __DEBUG_LOG_H__
#define __DEBUG_LOG_H__

#include <android/log.h>

#ifndef TAG
#define TAG "JniDemo"
#endif

#define LOGD_D(...) __android_log_print(ANDROID_LOG_DEBUG,TAG, __VA_ARGS__)
#define LOGD_E(...) __android_log_print(ANDROID_LOG_ERROR,TAG, __VA_ARGS__)
#define LOGD_I(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#endif

Java示例类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.dasea.jni;
public class JniData {
public boolean bData;
public double dData;
public int iData;
public byte cData;
public String sData;
public byte byteArr[];
public int intArr[];

public TestSetData() {
// TODO Auto-generated constructor stub
bData = true;
dData = 100.11;
iData = 333;
cData = 100;
sData = "20150204";
byteArr = new byte[10];
for (int i = 0; i < byteArr.length; i++) {
byteArr[i] = '2';
}

intArr = new int[10];
for (int i = 0; i < intArr.length; i++) {
intArr[i] = i * 10;
}
}
}

Java Native接口类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.dasea.jni;
public class JniDemo {
// 测试基本数据类型
public native void testBasicData(boolean bData, int iData, double dData, String sData);
// 测试Object类型
public native void testObjectData(JniData data);
// 测试基本类型的数组类型
public native void testBasicArrData(int[] data);
// 测试Object的数组类型
public native void testStringArrData(String[] str);
public native void testObjectArrData(JniData[] data);
// ...
其他具体请看github代码
}

对应接口c++ 端的实现

具体请看github代码
代码仓库