- 浏览: 985408 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
熊猫仙:
请问,这个程序可以和BLE蓝牙设备通讯吗?
C#编程连接蓝牙设备,文件收发 -
lsy234009:
“这个电脑蓝牙不可用!”原因多半是你没打开蓝牙
C#编程连接蓝牙设备,文件收发 -
wujie_cnhn:
这个加密压缩后, linux环境下可以解压缩吗
好用java开源zip压缩解压类库Zip4j -
asdf_2012:
兄弟简单明了。顶你
C#使用Event在窗体之间传递消息和参数 -
xkb281:
简单易懂 不像有的文章 介绍一大堆没整明白是什么地下 赞一个 ...
Android网络请求框架Retrofit使用笔记
首先要下载eclipse_java,安装ADT,CDT,NDK,
在MainActivity中写一些本地函数声明:
public native void fun1(); public native String fun2(); public native char fun3(); public native int fun4(); public native double fun5(); public native void fun6(int i, String s);
配置好Java环境变量;
然后控制台进入项目的bin/classes,输入javah -jni命令,生成相关.h头文件;
如果报找不到Activity类的话可以暂时去掉MainActivity中的extends Activity声明,并把与Activity相关代码注释,再次编译后运行javah -jni,就没有错了,这时生成一个.h头文件,com_example_jnitest_MainActivity.h
在工程中创建jni目录,把头文件移动到里面,头文件里包含了以后要在.c文件中书写的函数:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_jnitest_MainActivity */ #ifndef _Included_com_example_jnitest_MainActivity #define _Included_com_example_jnitest_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_jnitest_MainActivity * Method: fun1 * Signature: ()V */ JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_fun1 (JNIEnv *, jobject); /* * Class: com_example_jnitest_MainActivity * Method: fun2 * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_jnitest_MainActivity_fun2 (JNIEnv *, jobject); /* * Class: com_example_jnitest_MainActivity * Method: fun3 * Signature: ()C */ JNIEXPORT jchar JNICALL Java_com_example_jnitest_MainActivity_fun3 (JNIEnv *, jobject); /* * Class: com_example_jnitest_MainActivity * Method: fun4 * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_example_jnitest_MainActivity_fun4 (JNIEnv *, jobject); /* * Class: com_example_jnitest_MainActivity * Method: fun5 * Signature: ()D */ JNIEXPORT jdouble JNICALL Java_com_example_jnitest_MainActivity_fun5 (JNIEnv *, jobject); /* * Class: com_example_jnitest_MainActivity * Method: fun6 * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_example_jnitest_MainActivity_fun6 (JNIEnv *, jobject, jint, jstring); #ifdef __cplusplus } #endif #endif
与java原文件中相应的native函数都已经在这个头文件中声明好了,以后只要按相应的函数名书写函数,就可以在java原文件中调用。
写一个Android.mk文件,该文件说明了.c文件编译的相关信息:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := myjni LOCAL_SRC_FILES := main.c include $(BUILD_SHARED_LIBRARY)
其中指明了将main.c便以为myjni;
所以开始写一个main.c
#include<jni.h> #include<string.h> void JNICALL Java_com_example_jnitest_MainActivity_fun1 (JNIEnv *, jobject); jstring Java_com_example_jnitest_MainActivity_fun2 (JNIEnv *e, jobject o){ return (*e)->NewStringUTF(e, "I am a string from jni, good!"); } jchar Java_com_example_jnitest_MainActivity_fun3 (JNIEnv *, jobject); jint Java_com_example_jnitest_MainActivity_fun4 (JNIEnv *, jobject); jdouble Java_com_example_jnitest_MainActivity_fun5 (JNIEnv *, jobject); void Java_com_example_jnitest_MainActivity_fun6 (JNIEnv *, jobject, jint, jstring);
至于语法可以参考其他资料
然后就要为项目添加C编译器来将C代码编译成so文件以便调用:
单击项目->属性:
在builders选项卡中选new,添加一个Program编译器:
编译器配置界面:
Location是NDK解压目录下的ndk-build.cmd
WorkingDirectory选择当前项目空间,保存
这时编译器列表中多了一个编译器,将其通过Up移到最高处,以使C代码能在最先编译
每次便以项目时:Console会显示:
"Compile thumb : myjni <= main.c SharedLibrary : libmyjni.so Install : libmyjni.so => libs/armeabi/libmyjni.so
说明编译成功,项目中的lib多了.so文件:
在java代码中通过以下声明调用该链接库:
static{ System.loadLibrary("myjni"); }
NDK目录下samples文件夹下提供了一些实例可供参考
- JniTest.zip (126.6 KB)
- 下载次数: 11
- jni.pdf (3.4 MB)
- 下载次数: 10
发表评论
-
Android使用TabLayout与ViewPager结合以及TabItem自定义
2017-09-13 17:25 13190使用android的design支持包中的android. ... -
Android网络请求框架Retrofit使用笔记
2016-04-05 18:09 3732Retrofit是一个安卓端开源网络请求库,目前依赖于ok ... -
RxJava在Android中使用笔记
2016-03-31 14:20 1848使用RxJava可以方便实现观察者模式,数据转换和线程之间 ... -
AndroidStudio中使用NDK编译器笔记
2015-09-25 10:20 2455使用的AndroidStudio版本是1.3.2,可以支持 ... -
Android中ListView常用方式:使用BaseAdapter
2015-04-08 13:57 3284ListView最基础用法: 给ListView设 ... -
Android控件ViewPager与Fragment基础用法
2015-04-07 14:09 6068ViewPager与Fragment实现页面滑动效 ... -
Android 本地开发自动向量化提高效率
2015-02-26 14:56 0从书 <<Android C++ 高级编程 -- ... -
Android使用StaticLayout实现文本绘制自动换行
2015-01-12 21:15 16753使用的场景主要是绘制文本的时候指定绘制区域的宽度,文本需要 ... -
Android实现图片单点旋转缩放保存-仿百度魔图
2015-01-09 22:36 2228当拖动右下角区域时执行围绕图像中心旋转,缩放的操作,拖动其 ... -
Android 使用NDK (JNI)简单解压7z压缩文件
2014-08-16 21:24 9933C语言使用LZMA SDK解压非加密7z文件介绍: ... -
NDK小实例使用QQwry实现Android端IP归属地查询
2014-07-05 00:08 1295学习做一个使用NDK的小项目: QQWry的格式和解析可 ... -
Android弹出对话框的使用
2013-09-20 17:30 2208我们在平时做开发的时候,免不了会用到各种各样的对话框,相信 ... -
Android手势识别和双击事件
2013-09-19 18:16 7238安卓触摸屏的手势识别在很多时候会使用户操作更加方便: 实 ... -
Android将assets中的zip压缩文件解压到SD卡
2012-10-24 13:57 10820程序首先要获取写外部存储权限: 程序: package c ... -
Android利用SQLite制作最简单成语小词典
2012-10-22 22:09 2146UnzipAssets.java package com.h ... -
Android中绘图的抗锯齿效果
2012-09-14 19:22 12571.使用Paint绘制简单图形 paint.setAntiA ... -
Android在SD卡上的文件读写
2012-09-11 18:14 1319该程序实现将字符串保存到文件,读取文件。 首先要获取外部存储 ... -
Android使用View类动画
2012-07-31 22:35 950package com.hu.move; impor ... -
Android采用SharedPreferences保存数据
2012-07-31 22:21 832使用SharedPreferences在程序的数据空间中生成x ... -
Android在SurfaceView绘图
2012-07-30 22:45 1451MainActivity package com.examp ...
相关推荐
单片机C语言Proteus仿真实例可演奏的电子琴提取方式是百度网盘分享地址
电力概预算软件
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
母亲节祝福html源码 很简单的代码,随机生成背景
Python源码-三门问题的验证
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
【财务管理】财务费用报销流程(含流程图).pdf
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
电力架空线路辅助设计软件
红外辐射测温枪的测温原理2020年中国计算机设计大赛获奖作品展视频提取方式是百度网盘分享地址
实用五金手册计算软件
住宅小区配变电容量计算软件
中国大学生计算机设计大赛 信息可视化国家二等奖计算机设计大赛提取方式是百度网盘分享地址