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

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


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

一.什么是JNI?

Java Native Interface(java本地接口)

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

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

二.为什么用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

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

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

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

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

五.Hello World

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

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

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

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

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

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

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

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

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

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

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

六.C语言启动JAVA程序

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

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

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

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

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

我们把他打开

-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");
    }
}

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

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

好了,写吧

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

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

   }

这里,只要写一句

 system("java HelloWorld"); 

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

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

上一篇:iPad弹出框


下一篇:[原理][来源解析]spring于@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关联