Android 开发中 JAVA 调用 C++
来源:互联网 发布:电子数据交换 编辑:程序博客网 时间:2024/05/17 10:28
http://www.oschina.net/code/snippet_4873_3279#4874
代码片段(7)[全屏查看所有代码]
1. [代码]步骤 #1:使用ANT编译项目 NativeAdd.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package
org.apache;
import
Android.util.Log;
public
class
NativeAdd {
static
{
try
{
Log.i(
"JNI"
,
"Trying to load libNativeAdd.so"
);
System.loadLibrary(
"NativeAdd"
);
}
catch
(UnsatisfiedLinkError ule) {
Log.e(
"JNI"
,
"WARNING: Could not load libNativeAdd.so"
);
}
}
public
static
native
long
add(
long
a,
long
b);
}
2. [代码]下面片断给出主activity中如何调用这个类/方法
1
2
3
4
5
6
7
8
9
10
11
12
13
public
void
onClick(View view) {
Log.i(LOG_TAG,
"onClick"
);
EditText a = (EditText) findViewById(R.id.a);
EditText b = (EditText) findViewById(R.id.b);
EditText c = (EditText) findViewById(R.id.c);
Log.i(LOG_TAG,
"calling native method"
);
long
sum = NativeAdd.add( Long.parseLong(a.getText().toString()),
Long.parseLong(b.getText().toString()));
Log.i(LOG_TAG,
"back from native method"
);
String text = Long.toString(sum);
c.setText(
"Native add returns = "
+ text.subSequence(
0
, text.length()));
}
3. [代码]步骤#2:运行下面的命令产生头文件
1
javah -classpath ../../Android.jar;../bin/classes; org.apache.NativeAdd
4. [代码]新产生的头文件“(org_apache_CallNative.h”内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class org_apache_NativeAdd */
#ifndef _Included_org_apache_NativeAdd
#define _Included_org_apache_NativeAdd
#ifdef __cplusplus
extern
"C"
{
#endif
/*
* Class: org_apache_NativeAdd
* Method: add
* Signature: (JJ)J
*/
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
(JNIEnv *, jclass, jlong, jlong);
#ifdef __cplusplus
}
#endif
#endif
5. [代码]步骤#3: 编写C文件如下“org_apache_NativeAdd.c”
1
2
3
4
5
6
7
#include "org_apache_NativeAdd.h"
JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add
(JNIEnv *env, jclass c, jlong a, jlong b)
{
return
a + b;
}
6. [代码]步骤#5: 编译和连接 org_apache_NativeAdd.c/org_apache_NativeAdd.h为一个共享库.
1
2
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
arm-none-linux-gnueabi-ld -T armelf_linux_eabi.xsc -shared -o libNativeAdd.so org_apache_NativeAdd.o
7. [代码]步骤 #6: 复制编译文件到模拟器中. 同时安装APK程序.
1
2
adb push native
/libNativeAdd
.so
/system/lib
adb
install
bin
/CallNative
.apk
0 0
- 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互相调用实例详解
- javascript深入理解js闭包
- 《iPhone开发秘籍(第2版)》中文版电子书
- 编译安装checkinstall-1.6.2
- Java Bean
- 中缀表达式转换为后缀表达式
- Android 开发中 JAVA 调用 C++
- 利用VS安装项目打包软件的做法
- 读 希特勒 《我的奋斗》 感悟
- K2 Blackpearl开发技术要点(Part2)
- PHP微信公众开发笔记(六)
- ArrayList、Vector、LinkedList区别
- 我个人觉得Apple Pay是个很不错的移动支付解决方案。
- CocoaPods详解之----使用篇
- ApplePay对于苹果来说不是一项业务,而是一种服务。