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
- JNI技术说明文档--利用NDKsample改造的简捷方法
- 求平均值的简捷方法
- Android jni技术文档
- 技术文档的版本说明格式
- JNI 常用方法说明
- Windows服务程序的一种简捷实现方法
- 比较简捷的软件联网检测版本方法
- 线代矩阵相乘笔算的新简捷方法
- SRS技术文档说明
- VUE 老项目改造,常用方法说明
- Javadoc的简捷使用
- 职业规划的简捷思路
- 简捷的python
- 应该如何利用JNI技术提高Java的性能详解
- 利用javah技术生成jni接口的详细步骤
- 【cocos2d-js官方文档】十四、cc.spriteFrameCache 改造说明
- 【cocos2d-js官方文档】十四、cc.spriteFrameCache 改造说明
- 利用javadoc制作说明文档
- 直接双击启动tomcat中的startup.bat闪退原因及解决方法
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
- JAVA学习笔记(十一):enum的使用
- hdu 2066 一个人的旅行 dijkstra
- 【Python学习笔记】-自动发送邮件脚本
- JNI技术说明文档--利用NDKsample改造的简捷方法
- 关于@layout/~~布局时在java代码中失效的注意
- 测试
- IIS 上傳附件的限制
- [Win32] ToolHelp API 和 进程API 详解
- Qt 信号与槽研究:
- Git 初始化仓库及提交修改
- Android MD5加密算法
- XA