使用JNI开发的经验分享

NDK+OpenSSl,通过JNI技术开发so加密库 以下是个人在做加密算法库时一些经验总结,今天把它写下来分享给大家,希望对大家以后再做类似的开发工作时能有所帮助,少走些弯路。 主要从以下5个方面进行阐述: 1. Openssl安装,1.0.1与1.0.2使用时的区别 2. Linux下gcc的使用方法,及可能遇到的问题 3. JNI开发,开发流程 4. NDK使用方法,以及打包so库时如何编写Application.mk文件 阅读详情

关于JNI开发的经验分享

开发环境:Android Studio 2.1.1

操作系统:Win 7

NDK版本:android-ndk-r11b

 

配置环境

1.安装好NDK并配置环境变量

2.配置Android Studio,右键项目根目录->Open Module Settings->SDK
Location->Android NDK location,指向安装好的NDK根目录

3.打开Android Studio中gradle.properties,添加

android.useDeprecatedNdk=true


4. 打开项目模块build.gradle(注意,不是根目录,而是项目模块),在sourceSets节点下的main节点中添加

main {
    jni.srcDirs = ['jni', 'JNI的目录']
}

注意,默认不存在该目录,可以手动创建.一般创建到与src同级的目录,右键->New->Folder->JNI Folder

 

5.继续配置build.gradle,在defaultConfig节点中添加

ndk {
    moduleName "util_jni"
    abiFilter("armeabi")
    abiFilter("x86")
    setStl("stlport_static")
    ldLibs("log")
}

解释:

(1)  moduleName为库名称,即生成的.so文件名称,Java调用时也是调用的该名称

(2)  abiFilter添加需要编译的cpu架构名称,上面表示只编译armeabi、x86两种架构的so

(3)  setStl以静态链接的方式使用stlport版本的STL

(4)  ldLibs使用log库

 

 

生成头文件

 

JNI开发中需要使用特定的方法名才能完成Native方法的调用,而这个方法名很长并且不易于记忆,所以需要使用javah去直接生成一个特定的头文件,就不需要自己命名了.

 

 

1.首先,在需要使用JNI的Java类中定义好本地方法,比如在com.hunter.TestActivity中定义一个名为createSign的本地方法,接受参数为一个字符串,返回值也为String

private static native String createSign(String params);


2.在类中调用配置好的so名称

static {
    System.loadLibrary("util_jni");
}


3.使用命令生成头文件.打开命令行,到达src目录下,输入命令

E:\androidSpace\test\src>javah -jni com.hunter.TestActivity


4.将生成的头文件移动到JNI目录下

 

编写C/C++代码

复制刚生成的头文件,更改后缀名为.c/.cpp,然后开始编写.注意需要引用头文件

 

编译

编写完成后,直接正常打包即可,无需手动编译为.so,因为Android Studio已经把NDK的ndk-build参数封装好了,并且在build.gradle配置的参数就是用于ndk打包时使用的,到此就结束了

 

提示,如果调试中遇到BUG,目前还未找到调试工具,只能靠Log去定位。JNI中开启Log的方式是:

#include <android/log.h>
 
#define TAG    "jni_log" // 这个是自定义的LOG的标识
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__) // 定义LOGE类型
 
LOGE("%s", sign);

即可在Logcat中查看打印的Log

从Excel到Power Pivot:构建你的第一个商业智能分析模型 本文详细介绍了如何从Excel升级到Power Pivot,构建你的第一个商业智能分析模型。通过激活Power Pivot功能、导入数据、建立表关系、创建智能度量值以及打造交互式仪表盘,帮助用户高效处理百万行级别的数据,实现数据自动关联和动态分析,大幅提升商业决策效率。 阅读详情

相关推荐

【kubeEdge】离线部署

根据k8s的这个规则,可以将节点通过 label 的方式进行分组,比如将某几个节点都打上标签为 name=edge,当调度应用到 edge 节点时,会找到 label 为 edge 的所有节点,根据设置的副本数,将应用启动起来,如果设置的副本数超过了设置 edge 标签的节点数,则多出的将会显示 pending 状态,从而无法启动。清除 keadm init 或 keadm join 造成的影响均可使用 keadm reset,这个操作会删除 /etc/kubeedge 下的文件,如有需要请提前备份。

qq_42944740的博客 1716

Android开发之JNI的使用心得

最近在研究Android Java与C++交互时踩了许多坑,所以做一下记录和总结,同时分享给大家少走弯路。

m0_60888118的博客 1211

ADS 2013安装教程

1.2013和2014安装过程是一样的,运行ads2013_06_shp_windows文件进行安装 2.点击“NEXT”。 3.选择I accept,然后点击“NEXT”。 4.选择“complete”,然后点击“NEXT”。 5.选择安装路径,最好默认安装路径,安装路径不要有中文,然后点击“NEXT”。 6.点击“NEXT”. 7.如下路径默认安装,然后点击“NEXT”。 8.点击“NEXT”。 ...

谢谢关注“小鱼教你模数电”,各平台同号 6009

JNI 从入门到实践,万字爆肝详解

到这里,JNI 的知识就讲完了,你可以按照学习路线图来看。下一篇,我们开始讲 Android NDK 开发。关注我,带你建立核心竞争力,我们下次见。参考资料《JNI 编程指南》JNI 提示—— Android 官方文档Java 原生接口规范 —— Java 官方文档深入理解 Android:卷 1(第 2 章 · 深入理解 JNI)—— 邓凡平 著深入理解 Android:Java 虚拟机 ART(第 11 章 · ART 中的 JNI)—— 邓凡平 著。

chuyouyinghe的专栏 3013

高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析

本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。

weixin_29198045的博客 538

使用 MATLAB/Simulink 构建一个 光伏-储能联合系统接入10kV配电网 的协同控制仿真模型

本教程详细介绍了基于Simulink的光伏-储能联合系统在配电网中的协同控制仿真方法。主要内容包括:系统结构设计(光伏阵列、储能电池、双向变流器等);建模流程(MPPT控制、BMS系统、PCS矢量控制);核心协同控制策略(功率平滑、削峰填谷、电压支撑的三层控制架构);仿真结果分析方法及性能评估指标。教程提供了从组件建模到系统集成的完整指导,并建议了模型预测控制、微网孤岛运行等进阶方向,帮助开发者掌握智能电网的关键仿真技术。通过该模型可实现可再生能源的高效利用与电网稳定运行的平衡。

amy_mhd的博客 217

JNI详解:使用方法

jni全称java native interface,我把它分为三部分,java代表java语言,native代表当前程序运行的本地环境,一般指windows/linux,而这些操作系统都是通过C/C++实现的,所以native通常也指C/C++语言,interface代表java跟native两者之间的通信接口,jni可以实现java和C/C++通信。它是java生态的特征,所以定义在jdk标准当中。

a5566255的专栏 3670

手把手教你学Simulink——基于Simulink的蚁群算法路径规划仿真建模示例

路径规划是机器人导航系统中的核心任务之一,旨在为机器人找到一条安全且高效的路径,使其能够从起点到达目标点,同时避免与障碍物发生碰撞。在开始之前,需要定义工作环境(例如地图),包括起点、终点以及可能存在的障碍物位置。通过本指南,我们介绍了如何基于Simulink结合MATLAB实现蚁群算法的路径规划仿真建模。

MHD0815的博客 222

安卓开发 JNI初探

现在我们开始在环境变量中配置选中此电脑,右击打开属性选中高级系统设置,点击进入环境变量注意:在用户变量中找到Path ,将刚刚安装的NDk目录粘贴进去。(这里按我的安装目录举例)C:\Users\Xcy\AppData\Local\Android\Sdk\ndk\25.2.9519653。

qq_34453595的博客 1022

SpringBoot中使用FastJson解析Json数据

场景 1.SpringBoot默认配置的是Jackson。 2.项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现 引入fastJson的依赖 <!-- fastjson的依赖 --> <dependency> <groupId>com.alibab...

BADAO_LIUMANG_QIZHI的博客 4140

十五、【测试执行篇】异步与并发:使用 Celery 实现测试任务的后台执行与结果回调

本文介绍如何使用Celery实现测试任务的异步执行与结果回调,解决同步执行测试计划导致的请求阻塞问题。主要内容包括:Celery的基本概念与工作原理(任务队列、消息中间件、Worker进程),在Django项目中集成Celery的步骤,以及将同步测试逻辑改造为异步任务的方法。

blues_C的博客 711

JNI常用开发技巧

讲讲JNI常用技能

qq_37841321的博客 2546

SCADA|用KingSCADA实现设备台账的查询功能

以上为用KingSCADA实现设备台账的查询功能,另外还有一些细节功能,比如当点击增加按钮时弹出的信息窗口内的信息希望是在选中的某行信息,只要找到差不多的设备,修改个别参数即可,避免增加时弹出空白页,所有信息都需要填写。以上为实现设备台账查询的最简单实现,实际项目中可能会更复杂,你做过哪些设备台账或相关的功能,有比较好的创意或高难度功能方法,欢迎在留言区评论,或在交流群探讨,互通有无,共同进步。首先完成界面的组态工作,主要是通过查询按钮,查询SQLServer数据库的设备台账数据,然后填充到报表内。

做有价值的事,积累有价值的笔记! 480

android ndk jni开发

参考几篇博客, Android NDK开发:JNI基础篇 Android NDK开发:JNI实战篇 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通 NDK 开发之 Android Studio 中使用 JNI 参考练习 github地址...

fendouwangzi的专栏 225

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

初识JNI开发

最近接到一个任务,叫我将项目上的压缩图片的方法优化一下。我就吭哧吭哧的找,找了几个开源库,发现效果也就那样,最后发现有个方法是调用jni来进行压缩,就这样我开始了的第一行JNI代码。 -----------------------------------------------------------------------------------------------------...

just_hu的博客 246

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JNI中javah命令的使用方法

最近一直在折腾这个JNI和Android NDK,今天通过javah生成h文件时遇到各种问题。不管是javah -classpath参数啊还是别的什么,一直都无法成功通过class文件生成h文件。经过一个多小时的查询也探索,现在终于成功编译出来了~     调用javah文件时,需要在cmd命令行模式里面进入bin文件夹,里面存放着工程中所有的.class文件。随后调用:javah -cla

heng615975867的专栏 2941

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

工作经验(JNI篇)

我的工作是C++开发,主要是做底层的,由于要做跨平台的原因,常会做成JNI给Java调用,下面是工作时总结的经验希望有用 JNI只能使用C语言的方式编译,所以,要使用C++的话,要用 extern "C" {} 包裹起来 给Java调用的JNI方法注册,有动态注册和静态注册两种方式,推荐使用动态注册的方式,效率较高,而且不易出错 Android.mk和Application....

weixin_30413739的博客 100

开始学习JNI开发一

  android开发5年了,老实说,前几年都是在混日子,技术基本原地踏步毫无长进,近一年半突然开窍了,长江后浪拍前浪,安于现状的程序员死在沙滩上,所以基本上从基础上,把以前自己怕的,不想去看的都列计划看了一大部分,JNI也是一个门槛吧,想到看到就头疼,不行逼着自己搞。C语言大学学了,但是自己基本完全没记住学了什么,花了2个月时间看了基础,指针,总算大体不复杂的代码能看懂了,学C也有一个好处,底...

baidu_28558165的博客 287

JNI常用函数大全

转载自:http://blog.youkuaiyun.com/qinjuning                最近一段时间,在工作方面比较闲,分配的Bug不是很多,于是好好利用这段时间就着源代码看了些许模块, 主要方式    还是贼看贼看代码, 同时利用烧机的便利,加Log观看,基本上都能弄个脸熟 。心里想着该写点什么了?可是水平不够,再加上    包括很多真正实现地

data_backups的博客 559

Android 开发艺术探索笔记(23)(1),java面试简历项目经验

笔者之前工作是在金融公司可能并不是特别追求技术,而笔者又是喜欢追求技术的人,所以格格不入,只能把目标放在互联网大厂了。也希望大家都去敢于尝试和追逐自己的梦想!BATJ大厂Android高频面试题网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)一个人可以走的很快,但一群人才能走的更远!

2401_84104809的博客 535

Android JNI详解

序最近一直从事着JNI相关的工作,想写几篇相关的Blog把心得记录一下,却越来越发现Blog写的再好都不如官方文档来的劲道。索性将JNI相关的官方文档更好的翻译一遍。总述在下面的几篇Blog中,我将按照官方文档的原始格式进行翻译。这一篇就随便记录些东西。原谅我跟写书似得还弄个前言。。。。。

OLai's blog 268

NDK的环境搭建和使用

一直听到JNI和NDK,最近决定了解下,于是查阅了资料,终于成功搭建了NDK环境,特此记录和分享。 首先看了这个视频,完成了NDK的搭建 http://v.youku.com/v_show/id_XNTkwNDc5NDg0.html 但是最后按视频中那样运行项目的时候,出现了问题 会报java.lang.UnsatisfiedLinkError: Couldn't load hel

viviancheng666的专栏 520

我对android理解之jni

这几天rfid基本调试差不多了,是一个真正的从零到有的搭建过程,完成了很有成就感。下面主要写一下rfid的jni 部分。 本次jni开发使用的是android的ndk工具。 jni开发,个人觉得比较重要的一块是jni的数据结构。在开发过程中,在网上也找了很多资料。下面是比较好的jni 数据结构解释资料: Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数

qq345260600的专栏 918

Android NDK 环境搭建,Android实习面试经验汇总

1.打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如Shamoo的是E:\android-ndk-r9c2.新建一个Android工程,在工程上右键点击Android Tools->Add Native Support…,然后给我们的.so文件取个名字,例如:my-ndk3.这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件。

m0_60635321的博客 629

jni的一些常见问题

虽然现在工作中常常要去看c++的代码,但是实事求是的说,写jni的东西相对比较少。最近写了一点相关的代码。这里也整理一下笔记。 字符串操作请用 std::string android jni提供的函数只是转到char*,当时很多常见的字符串操作,比如substring、replace、find都是在std::string中实现的。为了写代码的方便,从jni拿到数据之后,就转成string处理。方法...

yeshen.org 605

android 开发配置及jni使用总结

本人文采不好,此文章是关于android配置jni使用自己

kos521的专栏 610
上一篇: 当Fragment通过ViewPager嵌套Fragment时第二进入不显示的问题
下一篇: 关于Centos 7 下如何安装FTP服务
ht_android
博客等级 码龄12年 33粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值