Android JNI学习之二 demo
主要参考了文章http://www.cnblogs.com/wmj/archivse/2010/07/25/1784872.html
1. 建立android工程,两个类,一个是activity,一个包含声明native方法的类
package org.simon; import android.app.Activity; import android.os.Bundle; public class JNITest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Nadd nadd = new Nadd(); this.setTitle("100 + 20 = " + nadd.nadd(100, 20)); } }
package org.simon; public class Nadd { static { System.loadLibrary("Nadd"); } public native int nadd(int a, int b); }
2. 用JDK自带的javah生成.h头文件。
具体办法参见前一篇文章
http://www.cnblogs.com/simoncook/archive/2010/09/25/1834750.html
3. 编辑.c文件实现native方法。
com_hello_jnitest_Nadd.c文件: #include <stdlib.h> #include "com_hello_jnitest_Nadd.h" JNIEXPORT jint JNICALL Java_com_hello_jnitest_Nadd_nadd(JNIEnv * env, jobject c, jint a, jint b) { return (a+b); }
4. 下载工具链,并安装
在这里
http://www.codesourcery.com/gnu_toolchains/arm/download.html
我当时用的是ubuntu(10.4)平台
所以是linux那个链接
5. 编译。c文件产生so文件
root@ubuntu:~/project/JNI/JNItest# /root/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc -I /home/tools/jdk1.6.0_21/include -I /home/tools/jdk1.6.0_21/include/linux -fpic -c org_simon_Nadd.c
root@ubuntu:~/project/JNI/JNItest# /root/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-ld -T /root/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/lib/ldscripts/armelf_linux_eabi.xsc -share -o libNadd.so org_simon_Nadd.o
6. 将so文件push进模器
root@ubuntu:/home/tools/android-sdk-linux_x86-1.5_r1/tools# ./adb remount
remount succeeded
root@ubuntu:/home/tools/android-sdk-linux_x86-1.5_r1/tools# ./adb push /root/project/JNI/JNItest/libNadd.so /system/lib
28 KB/s (1969 bytes in 0.068s)
7. 运行工程,测试。