六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 71|回复: 0

Android 开发中 JAVA 调用 C++

[复制链接]

升级  23.67%

79

主题

79

主题

79

主题

举人

Rank: 3Rank: 3

积分
271
 楼主| 发表于 2013-2-1 11:20:35 | 显示全部楼层 |阅读模式
[代码] 步骤 #1:使用ANT编译项目 NativeAdd.java
view sourceprint?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中如何调用这个类/方法
view sourceprint?
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:运行下面的命令产生头文件
view sourceprint?
1 javah -classpath ../../Android.jar;../bin/classes; org.apache.NativeAdd
[代码] 新产生的头文件“(org_apache_CallNative.h”内容如下
view sourceprint?
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”
view sourceprint?
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为一个共享库.
view sourceprint?
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程序.
view sourceprint?
1 adb push native/libNativeAdd.so /system/lib  

2 adb install bin/CallNative.apk
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表