Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序

简介: <div class="markdown_views"><h1 id="android-for-jni一jni的概念以及c语言开发工具dev-c编写你的第一个c语言程序">Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序</h1><hr><blockquote> <p>当你的Android之旅一步步的深入

Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序


当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framework或者底层打交道,还有就是混合编程之类的,以及新语言,新特性,各种牛人研究的黑科技,应接不暇,技术更新迭代太快了,我们要赶紧加快步伐了,今天就开始来入坑了——JNI,这个坑是必须要进的,啥也不说了,老司机,带我!

一.什么是JNI?

Java Native Interface(java本地接口)

说白了,JNI相当于一个协议,通过这个协议沟通java代码和外部的本地代码(C/C++),通过这个协议,这两门语言就可以相互调用了

这里写图片描述

二.为什么用JNI?

这个和我本身要学这个JNI的目的是一样的,我现在就在做车载方面的

  • 1.物联网,智能家居,车载电脑
  • 2.效率上C/C++语言效率更高
  • 3.代码移植,复用已经存在的C代码
  • 4.java反编译比C语言容易

三.怎么用JNI

  • 1.JAVA语言
  • 2.C/C++语言
  • 3.JAVA JNI流程
  • 4.NDK(Native Development Kits)

我们从C/C++语言开始学起,慢慢来完善JNI

四.配置C语言环境

新知识,涨姿势嘛,总是要学的,各位看官老爷倾听我慢慢道来,要用JNI调用C的话,其实还有一个痛点,就是你必须会这门语言才吃到怎么去用他的方法,所以我们必须花上几天的时间把C的基本概念和知识点给学会,其实编程思想有点类似,JAVA和C有一些基本的东西还是类似的,主要是C的指针还是有点抽象,跟以前学面向对象一样一样的,哈哈,污污污污….工欲善其事必先利其器,我们先把学C所用到的开发环境给部署一下

开发工具:dev-c++

下载地址:http://download.csdn.net/detail/qq_26787115/9490306

这个工具也只是让我们更加的熟悉语法,随便搜索一下就能下,属于一个轻量级的开发工具,我们下载下来安装

这里写图片描述

安装完成之后我们就可以运行了

这里写图片描述

五.Hello World

当我们一切都准备好了的时候,我们就可以来编写程序了,也就是注明的“Hello World”,现在看到helloworld是不是有一种很怀念的感觉

我们点击左上角的文件-新建-源代码,写上这么一段代码(先不要管什么意思,照着敲就行)

#include <stdio.h>    
#include <stdlib.h>   //和JAVA需要的包类似 导包
//main函数          
main(){
       //输出语句 
       printf("Hello World");
   }

然后我们把他保存为C文件

这里写图片描述

我们要运行就得编译,用惯了Eclipse,Eclipse有自动编译的选项,而dev-c++是没有的,我们手动编译一下

这里写图片描述

我们可以看到上面有条工具栏,第一个就是编译了,第二个就是运行

这里写图片描述

出现Done说明编译完成,我们可以运行了,不过编译会一闪而过,因为是命令窗,具体的停留的我忘记了,和提前java有点类似

这里只要注意一点的是main。在C中,main函数也是程序的入口吗,C中的函数和java的方法是一个概念,只是叫法不一样

六.C语言启动JAVA程序

C是可以直接调用windows指令的,既然如此,我们可以仿照我们程序的快捷方式的例子去做一个软启动方式,说起来有点迷糊哈,我们举个例子,我们来到Eclipse的安装目录,你可以看到这样的一个目录

这里写图片描述

其中,我们的快捷方式只有只有314k,却能启动这个程序,这就是windows的特长了,而我们的C是可以直接使用windows的指令的,所以我们就可以间接的使用C去调用JAVA了

回到正题,我们刚才举的例子,其实从快捷方式的配置文件eclipse.ini中就可以详细的看到

这里写图片描述

我们把他打开

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m

我们不难发现,当我们启动的时候,他会执行plugins目录下的org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar架包,你双击他你会惊奇的发现,你竟然启动了eclipse,这就是windows启动的原理了,好了,既然逻辑通了,那我们就来写C代码吧!不过事先我们得准备一个java文件,我就把他放在C源码目录下好了

public class HelloWorld{
    public static void main(String[] str){
        //输出语句
        System.out.println("HelloWorld");
    }
}

你可别忘了这个是要编译的….

这里写图片描述

好了,写吧

#include <stdio.h>    
#include <stdlib.h>   //和JAVA需要的包类似 
//main函数        
main(){

       //输出语句 
       system("java HelloWorld"); 
       system("pause"); 

   }

这里,只要写一句

 system("java HelloWorld"); 

因为是同一个目录下,所以不需要写路径,我们运行就可以直接看到打印的HelloWorld了

好了,初步的认识先OK到这里,我们要使用C的话,只要一点点入门就够了,当然你有兴趣深入也是可以的,我们学C和学JAVA一样,下一篇主要还是以数据类型,指针,函数的认识为主,对了,还要提及一下他对内存的操控,这篇先到这里!

目录
相关文章
|
7月前
|
存储 编译器 程序员
C语言常见概念
C语言是一门基础的编程语言,通过编译器将源代码转换为计算机可执行的二进制程序。本文介绍了C语言的基本概念,包括其作为人与计算机交流的工具、编译与链接的过程、常用编译器的选择(如VS2022)、main函数的作用、库函数与关键字、字符与ASCII编码、字符串与转义字符等内容。同时,还讲解了如何在VS2022中创建C语言项目、编写第一个程序,以及常见的语法错误和调试方法。适合初学者了解C语言核心概念与开发环境搭建。
528 1
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
788 5
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
398 10
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
217 3
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
198 3
|
Java 编译器 C语言
【一步一步了解Java系列】:探索Java基本类型与C语言的区别
【一步一步了解Java系列】:探索Java基本类型与C语言的区别
227 2
|
算法 编译器 C语言
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
567 0
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
366 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
程序员 编译器 C语言
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
222 10