Android之jni入门
jni即java native interface,使用jni我们可以在JAVA中调用C代码,提高了效率,可以复用代码,可以灵活的应用于各种场景
怎么使用JNI
安装软件
1.NDK 用于将C代码编译成so库
2.CygWin 在windows下模拟linux环境
3.CDT 在eclipse下编写C与C++环境搭建
JNI实现
1 定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的
public native String helloWorldFromC();
2 步 实现C代码
注意:方法名 严格按照jni的规范 jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)
其中Java是大写的,函数名必须包括正确的包名,笔者就因为在这里出了错,导致找不到库文件
#include <stdio.h>
#include <jni.h>//public native String helloWorldFromC();
jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv*env,jobject obj)
{//返回一个java String类型的字符串// jstring (*NewStringUTF)(JNIEnv*, const char*);//return (**env).NewStringUTF(env,"hello wrold From C");return (*env)->NewStringUTF(env,"hellowroldFromC");//把C代码打包成函数库}
3 生成android.mk 告诉编译器 如何把c代码打包成函数库
如果没有mk文件,就使用ndk-build就会报错
android.mk文件格式如下
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# 对应打包成函数库的名字LOCAL_MODULE := hello# 对应c代码的文件LOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)
4步 把c代码 打包成函数库 用到了安装的环境
生成了libhello.so库文件,就可以使用了
5 步在java代码中 引入库函数
static{System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so}
6 使用方法
public void click(View view){//弹出一个吐司,吐司内容为C代码内容Toast.makeText(getApplicationContext(), helloWorldFromC(), 0).show();}
运行效果
Android之jni入门相关推荐
- Android入门简书,android ndk开发入门随笔(一)
ndk,jni入门随笔 因为工作缘故最近在研究jni,ndk方面知识,在此总结入坑以来的一些问题. 配置环境可以在下面geogle官方看.下面是链接 我一说ndk,jni可能小伙伴要问了这是什么,在此 ...
- Android混淆从入门到精通
Android混淆从入门到精通 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读.混淆概念虽然容易,但很多初学 ...
- Android中JNI开发之常见错误
JNI开发中的常见问题 1. C文法声明与java中native方法声明,不对应时,报如下异常: java.lang.IllegalStateException: Could not execute ...
- Android APP开发入门
Android APP开发入门 目录 android_studio很好用的一个就是debug 1 1导入demo编译出错 1 4使用as运行安装不了apk安装adb 2 5SeekBar组件使用 2 ...
- android 开发从入门到精通
Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...
- Android Monkey测试入门:安装sdk、studio、模拟器,并分析monkey日志
Android Monkey测试入门:安装sdk.studio.模拟器,并分析monkey测试报告结果 1. 安装Java JDK和android SDK 2. 安装Andriod studio及模拟 ...
- devc 如何编写java,Android For JNI(1)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序...
Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...
- JNI入门课程-第二章:JNI基础调用
序章: 1.本篇是JNI入门教程的第二篇,偏基础功能的实现.完整教程连接如下: https://blog.csdn.net/rzleilei/article/details/122084609http ...
- Android通过jni调用本地c/c++接口方法总结
网上有网友问android的原生应用,上层java代码如何通过jni调用本地的c/c++接口或第三方动态库 ?之前搞过android应用开发和底层c/c++接口开发都是一个人搞定,觉得还是蛮简单的.其 ...
最新文章
- Solo 博客系统 1.7.0 发布 - 新版 MD 编辑器
- JavaScript 私有成员
- InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor
- 常用自动化框架简单的分析与介绍
- 我所知的javascript之prototype
- SpringFramework核心技术一(IOC:命名bean)
- php里建立数据库和表,PHP 创建数据库和表 | w3cschool菜鸟教程
- mysql的命令行常用命令_MySQL Command Line[mysql命令行常用命令]
- Interbase浴火重生:开源数据库Firebird更新到2.12
- Sql Server 知识
- USB Server解决虚拟化部署UKey远程调用
- HandlerSocket + MySQL
- 区块链入门教程 。阮一峰
- word,wps设置页眉和页码
- wangeditor光标乱跑,回车换行又返回来问题
- 基本农田卫星地图查询_天地图山东,购房者勘测利器,国产骄傲
- FoveaBox(Beyond Anchor-based Object Detector) 学习笔记
- ASP.NET限制上传文件类型
- CAD中的标注文字如何沿弧线排列?
- zxing 二维码生成深度定制
热门文章
- 调研了下 AI 作曲,顺便做了期视频...快进来听歌!
- 全栈深度学习第5期: 神经网络调试技巧
- 史上最简单的决策树模型讲解
- Eureka Client注册到Eureka Server的秘密
- 论文浅尝 | IRW:基于知识图谱和关系推理的视觉叙事框架
- 资源征集 | 2021年全国知识图谱与语义计算大会开放资源征集(Resource Track)通知...
- 研讨会 | 知识图谱引领认知智能+
- 论文浅尝 | 基于属性嵌入的知识图谱间实体对齐方法
- 2017-12-09 JavaScript实现ZLOGO子集: 测试用例
- 为什么操作dom会消耗性能