Android 开发中 JAVA 调用 C++
来源:互联网 发布:数组转字符串 编辑:程序博客网 时间:2024/06/14 05:00
[代码] 步骤 #1:使用ANT编译项目 NativeAdd.java
01
package
org.apache;
02
03
import
Android.util.Log;
04
05
public
class
NativeAdd {
06
static
{
07
try
{
08
Log.i(
"JNI"
,
"Trying to load libNativeAdd.so"
);
09
System.loadLibrary(
"NativeAdd"
);
10
}
11
catch
(UnsatisfiedLinkError ule) {
12
Log.e(
"JNI"
,
"WARNING: Could not load libNativeAdd.so"
);
13
}
14
}
15
16
public
static
native
long
add(
long
a,
long
b);
17
}
[代码] 下面片断给出主activity中如何调用这个类/方法
01
public
void
onClick(View view) {
02
Log.i(LOG_TAG,
"onClick"
);
03
04
EditText a = (EditText) findViewById(R.id.a);
05
EditText b = (EditText) findViewById(R.id.b);
06
EditText c = (EditText) findViewById(R.id.c);
07
Log.i(LOG_TAG,
"calling native method"
);
08
long
sum = NativeAdd.add( Long.parseLong(a.getText().toString()),
09
Long.parseLong(b.getText().toString()));
10
Log.i(LOG_TAG,
"back from native method"
);
11
String text = Long.toString(sum);
12
c.setText(
"Native add returns = "
+ text.subSequence(
0
, text.length()));
13
}
[代码] 步骤#2:运行下面的命令产生头文件
1
javah -classpath ../../Android.jar;../bin/classes; org.apache.NativeAdd
[代码] 新产生的头文件“(org_apache_CallNative.h”内容如下
01
/* DO NOT EDIT THIS FILE - it is machine generated */
02
#include
03
/* Header for class org_apache_NativeAdd */
04
05
#ifndef _Included_org_apache_NativeAdd
06
#define _Included_org_apache_NativeAdd
07
#ifdef __cplusplus
08
extern
"C"
{
09
#endif
10
/*
11
* Class: org_apache_NativeAdd
12
* Method: add
13
* Signature: (JJ)J
14
*/
15
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
16
(JNIEnv *, jclass, jlong, jlong);
17
18
#ifdef __cplusplus
19
}
20
#endif
21
#endif
[代码] 步骤#3: 编写C文件如下“org_apache_NativeAdd.c”
1
#include "org_apache_NativeAdd.h"
2
3
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
4
(JNIEnv *env, jclass c, jlong a, jlong b)
5
{
6
return
a + b;
7
}
[代码] 步骤#5: 编译和连接 org_apache_NativeAdd.c/org_apache_NativeAdd.h为一个共享库.
1
arm-none-linux-gnueabi-gcc -I/usr/lib/jvm/java-1.5.0-sun/include -I/usr/lib/jvm/java-1.5.0-sun/include/linux -fpic -c org_apache_NativeAdd.c
2
arm-none-linux-gnueabi-ld -T armelf_linux_eabi.xsc -shared -o libNativeAdd.so org_apache_NativeAdd.o
[代码] 步骤 #6: 复制编译文件到模拟器中. 同时安装APK程序.
1
adb push native/libNativeAdd.so /system/lib
2
adb
install
bin/CallNative.apk
- android开发中JAVA调用C++
- Android 开发中 JAVA 调用 C++
- Android开发中在JAVA中调用C/C++ native代码
- Android 在C/C++中调用Java
- Android 在C/C++中调用Java
- Android JNI中C调用Java方法
- Android中Java调用C/C++
- Android 开发中 JAVA 调用 C++
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- ndk开发中,在c中调用java代码
- android JNI中C中调用java中方法
- Android C调用Java
- android java 调用 c
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- Android NDK开发 Java与C互相调用实例详解
- [转]LevelDB性能分析和表现
- 腾讯面试题
- Android中binderDied()以及"Unknown binder error code" 出现的原因说明
- 进程ID号
- java map对象的效率比较
- Android 开发中 JAVA 调用 C++
- CDC、HDC、pDC-------C++
- 个人blog系统开发系列2-Joomla搭建
- LINUX开机流程 模块管理与Loader
- UltraEdit 正则表达式手册
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- 配置集群用户以及配置集群节点间无密码ssh登陆
- mysql for mac 安装和基本操作
- 1642