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一样,下一篇主要还是以数据类型,指针,函数的认识为主,对了,还要提及一下他对内存的操控,这篇先到这里!

目录
相关文章
|
3月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
120 2
|
1月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
298 98
|
2月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
4月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
175 26
|
8月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
295 0
|
8月前
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1048 0
|
8月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
C语言
C语言及程序设计初步例程-4 C语言程序初体验
贺老师教学链接  C语言及程序设计初步 本课讲解 让程序会计算:求a和b两个数之和 #include &lt;stdio.h&gt; int main( ) { int a,b,sum; scanf("%d %d", &amp;a, &amp;b); sum=a+b; printf("%d\n", sum); return 0; } 用户界面友好(或罗
1194 0
|
C语言 数据处理
《C语言及程序设计》实践项目——C语言程序初体验
返回:贺老师课程教学链接  C语言及程序设计初步   【项目1-输出点阵图】编一个程序,用你的姓名读音首字母,组成类似的趣图提示:printf("……\n");语句会输出双引号中的内容,'\n'完成换行[参考解答]【项目2-完成简单计算】(1)编程序,输入长方形的两边长a和b,输出长方形的周长和面积 提示:边长可以是整数也可以是小数;实现乘法的运算符是*[参考解答] (2)编程序,输入两个电
1352 0