Android ndk 将C语言main方法转为JNI调用

android studio 调用jni,实现Java调用C语言程序 思路可能有些问题,但是方法是正确的,如有遇到不通的地方,可以留言提问。 1. 新建工程。新建工程的时候,按照普通新建工程的方法就可以。 2.新建的工程切换到Project视图下,在main文件夹新建JNI Folder,也可以新建一个Project. 3. 在MainActivity中新建一个native方法。 例如: public native String 方法名A(); public 阅读详情
一、C main()方法
int main(int argc, char *argv[])
包括两个参数,整数型argc,字符串指针数组型argv,main方法是由命令行调用的,格式为:文件名 参数1 参数2 参数3 ······

例如:MyFile aaa bbb ccc 111 222 333
MyFile为文件名,aaa----333位参数,传入时编译器自动将输入的参数数量传给argc(这个数量包括文件名),将所有参数传给argv。
这时argc为7,argv为:argv[0]=MyFile,argv[1]=aaa,······(具体的指向方式请自行百度,这里只是为了看着方便),java可以将argv理解为字符串数组。
二、JNI调用
java:传入String数组
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "12", "00"});
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "13", "00"});
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "14", "27"});
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "15", "10"});
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "17", "ff"});
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "10", "7f"});
JNI:String数组会变为jobjectArray类型,将这个array转为char *argv[],方法如下
JNIEXPORT void JNICALL Java_com_wzq_controlmod_ControlManager_moveOnce
    (JNIEnv *env, jobject obj, jobjectArray array) {
    // 算出数组长度
    jint size = (*env)->GetArrayLength(env, array);

    // 这个就是char *argv[]
    char *a[size];

    int i;
    for (i = 0; i < size; i++) {
        jstring mJS = (jstring) ((*env)->GetObjectArrayElement(env, array, i));

        // convert jstring to char
        a[i] = (char *) ((*env)->GetStringUTFChars(env, mJS, 0));

        LOGE("Char From JNI A: %s", a[i]);
    }

    // 调用main,传入size和a
    main(size, a);
}
了解安卓,了解JDK、SDK、NDK,了解gradle Android是一个开源的,基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑。 阅读详情

相关推荐

Android NDK开发(一)环境搭建及运行示例

1.代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。2.可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。3.提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。4.便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。注:1.在android-ndk-r10c目录下有一个samples的目录,里面存放着例子,可供学习。

2301_79835671的博客 855

FFmpeg Android 移植,改 main 函数JNI调用

ffmpeg可以合成音视频,播放各类编码的音视频,截取某一段,让多张图片合成一个视频并且和音频合成、转格式等等。起初是因为发现配音秀里的配音很好玩,然后我们也想做一个配音的模块。于是找到了工具ffmpeg。试图把它移植到Android上(虽然最后发现,配音秀是在远端处理的音视频合成)。网上的很多文章都不行,最后让我成功的是这篇文章《android 使用ffmpeg 并调用接口》 。也试过很多版本,只有ffmpeg1.2和ndkr9搭配,能移植成功。还有一些如何在Android下调试ffmepg,一键生成jn

LeanCloud-lzwjava 5919

Android NDK开发指南:从JNI到性能优化实战

JNI(Java Native Interface)作为Java与原生代码交互的核心技术,通过建立跨语言调用桥梁实现性能关键模块的优化。在移动开发领域,原生代码执行效率通常比Java实现快3-5倍,特别适合计算密集型任务如音视频处理、计算机视觉等场景。Android NDK(Native Development Kit)基于JNI技术体系,提供了完整的工具链支持,包括CMake构建系统、LLDB调试器等关键组件。通过合理使用NDK,开发者不仅能提升应用性能,还能实现算法核心的跨平台复用。现代NDK开发涉及多

cnvdkx2837的博客 321

如何将c语言封装JNI接口供java程序调用

一、jni是什么?为什么会有jni的存在? JNI是Java Native Interface的缩写,中文可译为Java本地调用,它允许Java代码和其他语言写的代码进行交互,而我们在使用JNI的时候是让其与C语言通信,我们知道C语言是偏底层的语言,可以直接操作硬件,执行效率较高,这个时候JNI就派上了用场,可以通过JNI直接调用c语言的函数。JNI这个概念听着好像很神秘的感觉,其实总结下来就是俩...

yebour的博客 4220

Unity调用Android NDK动态库:从原理到实战的完整指南

在移动应用和游戏开发中,跨语言调用与原生性能优化是核心技术挑战。JNI(Java Native Interface)作为Java生态的标准桥梁,实现了Java虚拟机与C/C++原生代码的高效通信,其原理是通过严格的函数命名和参数传递规范,在运行时动态链接共享库。这项技术的核心价值在于突破高级语言(如C#)的性能瓶颈,直接利用底层硬件能力,同时复用成熟的C/C++算法库。在Unity游戏开发中,通过AndroidJavaClass和JNI桥接,开发者能够将计算密集型任务(如图像处理、传感器访问)委托给编译好的

weixin_30411819的博客 419

深入Android NDK开发:从main.c到原生性能优化

htmltable {th, td {th {pre {简介:在Android开发中,虽然Java和Kotlin是主流编程语言,但有时开发者会使用C或C++编写main.c来实现性能敏感的本地代码。这些代码通常与Android的本地应用接口(NATIVE API)或Android Native Development Kit (NDK)相关。本简介探讨了main.c。

weixin_29903713的博客 973

int main(int argc,char *argv[])参数说明

int main(int argc,char *argv[])参数说明

大前端程序员的自我修养 501

基于ADRC算法的多旋翼飞行器抗扰动控制实践

本文详细介绍了基于ADRC算法的多旋翼飞行器抗扰动控制实践,通过线性扩张状态观测器(LESO)实时估算风力等扰动,实现提前补偿,显著提升飞行稳定性。文章结合具体案例和工程实现技巧,展示了ADRC在突风条件下的优异表现,为无人机控制提供了高效解决方案。

weixin_29284885的博客 191

android JNI 传参

本篇将介绍在JNI编程中如何传递参数和返回值。 首先要强调的是,native方法不但可以传递Java 的基本类型做参数,还可以传递更复杂的类型,比如String,数组,甚 至自定义的类。这一切都可以在jni.h中找到答案。 1. Java基本类型的传递 用过Java的人都知道,Java中的基本类型包括boolean,byte ,char,short,int,long,float,double

ACanoe的专栏 3795

WRF模型下中国土地利用数据替换USGS-24分类的完整实践指南

本文提供了在WRF模型中,将中国土地利用数据替换默认USGS-24分类的完整实践指南。详细阐述了替换下垫面数据的必要性,并分步讲解了数据准备、坐标转换、分类体系重映射、格式转换及配置文件修改等核心操作,旨在帮助用户提升针对中国区域的模拟精度。

salt的博客 777

Cortex-M内核DWT周期计数器:从原理到STM32实战时间测量与性能分析

在嵌入式开发中,代码执行耗时测量是性能优化的基础。除了依赖外设定时器或SysTick,ARM Cortex-M3/M4/M7内核自带的DWT(Data Watchpoint and Tracker)调试组件提供了一种极低侵入性的硬件计时方案。其内部的32位周期计数器CYCCNT跟随内核时钟递增,无需占用额外引脚或定时器资源,即可实现纳秒级分辨率的函数耗时测量、中断响应分析及延时实现。从DWT寄存器配置、周期差值计算到基于SystemCoreClock的微秒换算,开发者可以快速搭建一套轻量级性能分析工具。本文

weixin_34216614的博客 186

JNI中的类型和c语言中的类型转换

前两天朋友找我帮忙,让我帮他实现在java中调用c

u014545772的专栏 4863

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 515

JNI与Android NDK详解:原理、调用过程与实践示例

本文系统介绍了JNI(Java Native Interface)和Android NDK的核心概念与应用。JNI作为Java与本地代码(C/C++)的桥梁,主要用于代码保护、性能优化、复用现有库和系统级访问。文章详细解析了JNI调用流程,包括环境配置、接口设计、本地方法实现和构建配置,并提供了图像处理项目的实践示例。同时总结了内存管理、性能优化和调试技巧等常见问题解决方案,强调应合理使用这些技术以平衡性能与维护成本。通过JNI和NDK,开发者可以安全高效地集成本地代码,但需注意仅在必要时采用并确保规范开发

xingfuyisheng的专栏 1712

HC-05蓝牙模块详细配置、连接与使用过程

用手按着模块上的按键,再给蓝牙模块上电。当蓝牙模块上的灯慢闪的时候就说明进入了配置模式了。在配置蓝牙的时候一定要将串口助手按这个要求配置:设置波特率 38400,数据位 8 位,停止位 1 位,无校验位,这是固定操作! 根据蓝牙的主从模式进行不同的设置,二者主要区别就在于AT+ROLE这个指令如果这里没返回OK可能有一下几种情况:如果正常返回OK,那就可以进行下一步了 配置蓝牙密码的时候,特别是配置HC05,密码必须加双引号"",否则不能正常设置!!!! 给从机模式蓝牙配置好之后,将蓝牙重

qq_51688022的博客 2万+

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1327

android studio ndk 目录,走进AndroidStudio下的NDK(一)

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。这一篇文章主要介绍在AndroidStudio环境如何搭建JNI开发环境,并通过一个helloword的方式了解进行JNI开发的步骤。开发编译环境AndroidStudio 2.1.2SDK 23.0.3NDK 12.1.2977051NDK安装与配置首先创建一个Android项目工程,File-->New...

weixin_36450592的博客 2770

31.XAPP1052乱序分析及处理

目录 1.XAPP1052乱序分析 2.XAPP1052乱序处理 2.1乱序处理方法选择 2.2 XAPP1052乱序处理代码详解 3.XAPP1052乱序处理后的波形分析 3.1发送引擎 3.2接收引擎 4.XAPP1052乱序处理后的带宽测试 5.下期内容 1.XAPP1052乱序分析 首先先给大家讲解下什么是PCIe的乱序。在PCIe系统中,乱序就是主机发送的TLP序列ID为1、2、3、4到从机,从机接收到的可能不是1、2、3、4。主机和从机如果都不解决乱序的问题,就会导致从机接

一个早起的程序员 1707

Android JNI开发入门:从环境配置到跨语言调用

JNI(Java Native Interface)是Java与C/C++代码交互的关键技术,广泛应用于高性能计算、系统级编程和代码复用场景。其核心原理是通过NDK工具链建立Java虚拟机与本地代码的桥梁,实现类型转换和函数调用。在Android开发中,JNI能显著提升计算密集型任务的执行效率,同时复用现有的C/C++生态库。典型的应用场景包括音视频处理、游戏引擎开发以及硬件加速等。本文以Hello World示例为切入点,详细讲解NDK环境配置、CMake构建脚本编写以及Java与C++的互调方法,特别针

weixin_34234829的博客 1500

[网络安全提高篇] 一二〇.恶意软件动态分析经典沙箱Cape批量提取动态API特征

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文详细介绍动态分析沙箱Cape的安装过程,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。然而,当样本数量增加时,单个样本分析会降低效率。这篇文章将讲解如何实现Cape沙箱的批量分析,通过调用Python脚本文件来实施批量处理,并将分析结果存储在指定位置,最后补充submit.py的参数及Python调用方式。基础性文章,希望对您有帮助!

杨秀璋的专栏 4121

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android NDK开发入门:JNI基础与CMake构建的快速上手教程

Android NDK(Native Development Kit)是一套允许开发者在Android应用中使用C/C++编写代码的工具集,通过NDK可以提升应用性能、复用C/C++库并增强反编译难度。本教程将带你快速掌握JNI基础与CMake构建NDK项目的核心流程,让你轻松开启Android原生开发之旅。 ## 一、为什么选择NDK开发? NDK开发在以下场景中具有显著优势: - **性能

gitblog_01010的博客 855

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

用Android Studio通过Java代码调用C代码的JNI流程

1,新建工程,创建本地方法 helloFromC( )public class MainActivity extends AppCompatActivity { static { System.loadLibrary("hello"); } @Override protected void onCreate(Bundle savedInstance

ccc123luo的博客 1683

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android NDK开发面试终极指南:InterviewQuestion中的JNI使用场景深度解析

Android NDK开发是高级Android开发者必须掌握的技能之一,尤其在性能优化和底层开发中扮演着关键角色。本文将深入探讨InterviewQuestion项目中关于JNI使用场景的核心知识点,帮助开发者全面掌握Android NDK开发面试要点。 ## 什么是Android NDK和JNI? Android NDK(Native Development Kit)允许开发者使用C和C++

gitblog_00218的博客 963

Android开发中JNI的全面分析

JNI (Java Native Interface,Java本地接口)是Java平台上定义的一套标准的本地编程接口。JNI允许Java代码与本地代码(如C/C++实现的、依赖于特定硬件和操作系统的代码)互操作,即Java代码可以调用本地代码,本地代码也可以调用Java代码。通过JNI调用本地代码,可以实现Java语言所不能实现的功能。在Android平台上,Dalvik虚拟机会实现JNI定义的接口。总结:JNI是java与本地Native代码的桥梁。

h397318057的博客 2337

Android - NDK :JNI实现异步回调

在android代码中,通过JNI调用c层子线程执行耗时任务,在c层子线程中把结果回调到android层,C语言小白,请批评指正!

dami_lixm的专栏 915
上一篇: Android ndk jni中回调java的方法&字段描述符
下一篇: Android Camera PreviewSize PictureSize SurfaceView之间的关系
MagicWZQ
博客等级 码龄10年 3粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值