1.打开eclipse新建一个android的工程,就叫"helloworld"吧。建立后添加一个class文件作为jni的接口,包名:package mtk.abc; 类名:Uart
public class Uart{

public native void print();

static{

try{
Log.i("JNI","try to load libmtkserial.so");
System.loadLibrary("mtkserial");
//加载本地库,也就是JNI生成的libxxx.so文件,下面再说。
}catch (UnsatisfiedLinkError ule){
Log.e("JNI","WARNING: Could not load libmtkserial.so");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_uart);
this.print();
}
-------------
这个就是native code在java中的接口了。添加完成后,project/build project(有时候需去掉build automaticaily才能选择。第一步的准备工作就此完成,很容易吧。
------------------
2.打开cmd并定位到刚刚新建的"helloworld"工程目录下的bin/classes目录,执行”javah -classpath . -jni mtk.abc.Uart“,没有意外的话,bin/classes目录下应该会产生一个mtk_abc_Uart.h文件。这个就是native code需要实现的函数了。
-jni mtk.abc.Uart: 指定class目录下的所要编译的类文件名。
如:\bin\classes\mtk\abc 下有定义的各种类文件!如jni像跟service接口,定义个一个bindservice.java。则\bin\classes\mtk\abc下就有个bindservice.class。
我们指定 -jni mtk.abc.bindservice就可以了。
-------------------
3.现在我们把刚刚得到的.h文件拷贝出,到工程目录下,并建立子目录jni(必须叫这个,否则后面会不能编译哦),并将.h文件拷贝到该目录下,并新建一个mtk_abc_Uart.c文件实现相关函数,代码如下:

#include <string.h>

02 #include "mtk_abc_Uart.h"


06 JNIEXPORT void JNICALL Java_mtk_abc_Uart_print
07 (JNIEnv *env, jobject thiz)

08 {

09

10 }

--------------------
接着还需要同一个目录下添加一个Android.mk文件,编译时候使用,具体内容如下:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := mtkserial (最终so文件名是libmtkserial.so)

LOCAL_SRC_FILES := mtk_abc_Uart.c
include $(BUILD_SHARED_LIBRARY)

--------------
4.把hellworld工程包放入ndk工具目录里面
然后进入要编译的目录 \ndk(ndk的目录路径)\helloworld\
执行外面的工具 #: ..\ndk-build
可以了。会在libs\armeabi下生成 so文件。
把工程考出,然后编译烧录到板子上就可以了。
=====================================================
注意:
当出现错误信息:
make: /home/mx515/android-ndk-r9/samples/wireless/build/core/build-local.mk: No such file or directory
make: *** No rule to make target `/home/mx515/android-ndk-r9/samples/wireless/build/core/build-local.mk'. Stop.
-------------------
这时,我们就需要配置NDK的环境变量了。
vim /etc/bash.bashrc

export NDK=/home/mx515/android-ndk-r9
export PATH=$PATH:$NDK
-------------------------
# source /etc/bash.bashrc
# echo $PATH
:/home/mx515/android-ndk-r9
----
因此我们可以用 ndk的命令了。
root@ubuntu:/home/mx515/android-ndk-r9/samples/wireless# ndk-
ndk-build ndk-gdb ndk-gdb-py.cmd
ndk-build.cmd ndk-gdb-py ndk-stack
ndk-depends ndk-gdb.py ndk-which
===============================
我们在 需要产生 so文件的目录下 执行 ndk-build 就可以了。

如:

root@ubuntu:/home/mx515/android-ndk-r9/samples/wireless# ndk-build
Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion 4 in ./AndroidManifest.xml
Compile thumb : wireless <= nsk_rdev_wireless.c
SharedLibrary : libwireless.so
Install : libwireless.so => libs/armeabi/libwireless.so

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)开发工具(以后持续更新)
  6. android避免回复出厂设置导致数据丢失的办法
  7. android生成的apk文件反编译源代码然后修改
  8. 解决eclipse中overlaps the location of another project: 'xxxx
  9. android编译错误(二)

随机推荐

  1. xbmc for android 编译
  2. android之sax解析xml文件 .
  3. Android(安卓)获取自身IP
  4. android: 10秒钟完成一个progressbar的加
  5. Android改变部分文字的字体大小
  6. android wifi驱动移植及其部分问题回答
  7. 从AsyTask函数式封装到lambda表达式
  8. Android(安卓)图标转换、点9格式图片在线
  9. android从assets目录复制到sd卡
  10. Android(安卓)静默安装apk