JNI技术说明文档--利用NDKsample改造的简捷方法

来源:互联网 发布:含金量最高的网络教育 编辑:程序博客网 时间:2024/04/30 14:28

JNI技术说明文档

前言:本文档是以实际开发的QEmbedLog.akp为例来说明怎样利用JNI来将Linux下C程序转化成Android下的apk安装包。QEmbedLog.akp是一个用来抓UC20日志的工具。关于JNI调用网上有许多教程,但是实际中照这些教程去做很可能会出现各种意想不到的错误,本文档将根据实际经验,给出一种实用安全的简捷方法。(合肥移瑞Jeffrey Zhou)

1.     环境:

(1)  必须使用标准Eclipse, 安装Android的环境, 才可以使用NDk开发工具。(基础安装略过。)

(2)  下载NDK开发工具,本案下载的是android-ndk-r8e.下载后直接解压即可使用,安放路径不能有空格,本案将解压文件直接放在D盘根目录下。之后在环境变量path中添加该路径。

(3)  在eclipse-Windows-preference中找到Android-NDK,将里面的NDK location设置成NDK的安装路径。

2.     方法:

为了减少出错,本案利用NDK中自带的sample作为基础框架进行技术改造,变成可用的新的工程。

(1)     将D:\android-ndk-r8e\samples\hello-jni工程拷贝出来(例如拷贝到eclipse的workspace中),导入到eclipse中。

(2)     在cmd命令行中,cd进入到拷贝的工程的jni目录下,输入命令:ndk-build.cmd,之后工程中会多出libs,obj等文件夹。

(3)     将原来的log工具源码全部拷贝到工程的jni文件夹下。将所有的.cpp文件的扩展名全部改成.c的扩展名。将main.h改成main_native.h,将mian.cpp改成main_native.c

(4)     改造代码:打开main_native.c文件,将里面的main函数名字改成main_native.同时将文件顶部预编译处改成

 #include "main_native.h"

#include "com_example_hellojni_HelloJni.h"这样做是为了去掉main函数的特殊性,变成普通函数文件。)

打开main_native.h,在最后添加声明

int main_native(int argc, char **argv);

(5)     打开hello-jni.c文件,在开头出添加

#include<main_native.h>

#include <com_example_hellojni_HelloJni.h>

int main_native(int argc, char* argv[]);

static JavaVM* g_VM;

将文件中的函数添加一个参数,如:

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv*env,                                                 jobject thiz, jobjectArray jarray )

其中jobjectArrayjarray为添加的参数。这是将作为接受Java层传递的命令行参数用的。该函数代码如下:

(6)    打开工程src目录下的HelloJni.java文件,将里面的

public native String stringFromJNI();改成

public native String stringFromJNI(String[] argv);

其中的参数是作为命令行参数传递给JNI层中的

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv*env,                                                 jobject thiz, jobjectArray jarray )函数。

在里面编写activity其余代码。

 

(7)     打开jni文件夹下的Android.mk,按如下编写好:

其中LOCAL_SRC_FILES变量是所有jni目录下用到的c文件名称。

在jni目录下添加application.mk文件,里面内容如下:

(8)    再次在cmd命令行中,cd进入到拷贝的工程的jni目录下,输入命令:ndk-build.cmd,之后将在libs文件夹中产生.so文件。说明编译成功。

(9)    在cmd命令中将配置文件diag_start.dat发送到安卓设备下的/data/local/tmp路径中,路径在apk中可自定义。命令为:

adb push diag_start.dat  /data/local/tmp

(10) 连接好平板,UC20模块以及电脑。现在cmd中输入如下命令:

 打开串口777权限。

(11) 用eclipse中编译该工程产生apk,安装到平板中。

JNI调用完毕。

(12) 关于运行界面的说明:界面中的输入框可以不选,初始显示的是默认值,直接按“抓log”按钮,自动运行。也可根据实际情况选择或输入值。按“停止退出”按钮可退出。按home键可在后台运行。

(13) 如果想改变报名和类名,请注意各处的统一性。尤其是函数

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv*env,                                                 jobject thiz, jobjectArray jarray )的命名规则是Java+包名+类名+函数名。

(14) 关于JNI的原理推荐几个连接辅助认知:

http://www.2cto.com/kf/201409/330892.html

http://blog.csdn.net/mci2004/article/details/7219140

http://www.cnblogs.com/bastard/archive/2012/05/19/2508913.html

0 0
原创粉丝点击