android是基于linux的开源操作系统。 linux是使用标准C语言开发的操作系统。 android底层驱动以及操作系统内核使用C语言以及汇编开发。 android操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,型铅旁实现操作系统底层调度。 android应用是使用Java开发;同时也可以使用C/C++ native开发,但是多数时激明候不用用到C。所以基本上就是Java为标准开发语言。 android使用了修改过的JVM(Java虚拟机)叫做dalvik虚拟机,其本质还是Java虚拟机。 所以对应每一个APP都卜橡会创建个dalvik虚拟机,也就是一个linux进程。 说复杂了,其实就是基于linux下的修改版Java虚拟机,运行java程序。
㈡ 如何在linux下创建一个简单的JNI程序HelloWorld
JNI全名是Java Native Interface,通过JNI技术可以实现Java和其他编程语言的互相调用。这里我们使用的是Java和C的互相调用,Java提供本地接口,C实现该本地接口。
我使用的是RHEL 5,主要是为了测试一下在Linux平台下,了解JNI技术是如何实现的。通过一个HelloWorld实例,具体过程在下面讲解。
首先,实现的是Java本地接口Hello.java,代码如下所示:
classHelloWorld{
publicnativevoidsayHello();
static{
System.loadLibrary("HelloWorld");
}
publicstaticvoidmain(String[]args){
(newHelloWorld()).sayHello();
}
}
其中,方法声明为native,其实HelloWorld类就相当于一个接口,是为其他编程语言声明的接口。System.loadLibrary("HelloWorld");语句是一个static块,也就是在该HelloWorld类加载的时候进行执行。其中,该语句实现了加载本地的动态连接库(DLL),在Linux平台下,动态连接库文件是以.so作为扩展名的,也就是标准对象(Standard Object)。
对该本地接口类进行编译:
[root@localhost jni]# javac HelloWorld.java
接着,通过编译的HelloWorld.class文件,生成C语言的头文件,执行命令:
[root@localhost jni]# javah -jni HelloWorld
可以看到,在当前目录下生成一个HelloWorld.h文件,该文件就是C的接口文件,为使用C实现Java接口中定义的方法,可以发现在HelloWorld.h中有一个方法声明:
#ifndef__HelloWorld__
#define__HelloWorld__
#include<jni.h>
#ifdef__cplusplus
extern"C"
{
#endif
JNIEXPORTvoidJNICALLJava_HelloWorld_sayHello(JNIEnv*env,jobject);
#ifdef__cplusplus
}
#endif
#endif/*__HelloWorld__*/
然后,用C实现该方法,在HelloWorld.c文件中,代码如下:
#include<jni.h>
#include"HelloWorld.h"
#include<stdio.h>
JNIEXPORTvoidJNICALLJava_HelloWorld_sayHello(JNIEnv*env,jobjectobj){
printf("Hello,theWorld!!!");
}
这里,方法签名为Java_HelloWorld_sayHello (JNIEnv *env, jobject obj),添加了形参obj,否则无法通过编译。
接下来,生成动态连接库libHelloWorld.so,执行命令:
[root@localhost jni]# gcc -fPIC -shared -o libHelloWorld.so HelloWorld.c
可以在当前目录下看到libHelloWorld.so,动态连接库文件名称以lib开头。将该文件拷贝到usr/lib目录下面,就可以测试了。
现在执行如下命令进行测试:
[root@localhost jni]# java HelloWorld
输出如下:
Hello,the World!!!
这只是一个非常简单的例子,主要是了解JNI在Linux下该如何用。在实际应用中,可能会非常复杂,并且要记住,一旦使用了JNI技术,系统的可移植性被破坏了。有些应用中,正是基于这种特性实现,比如限制软件的传播使用,保护开发商权益,等等。
㈢ java使用JNI调用VC6.0编写的动态链接库dll,如何移植到linux环境下使用
你想要的应该基本不可能实现了,gpsun.lib是在window下生成的静态库,是不能在linux上直接调用的,袭岩如果你清楚gpsin的实现,可以在linux下编一个自己的静态库,是以.a结尾的拍乱御,然后在linux上编译.so文陪局件时将这个.a文件链接进去,最后就可以用jni去调用了
㈣ java开发工程师必须要学的技术有哪些
学习内容:
初级部分
Java 程序设计基础,包括 J2sdk基础、Java面向对象基础、Java API使用、数据结构及算法基础、Java AWT图形界面程序开发;
J2SE平台Java程序设计,包括Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,流和文件,多线程程序设计;
Java桌面系统项目开发,4~5人组成一个项目组,项目大小为(15人*工作日);
Linux的基本操作,Linux下的Java程序开发,Linux系统的简单管理;
Oracle数据库,包括SQL/PLSQL;数据库和数据库设计;简单掌握ORACLE9i 数据库的管理;[2]
中级部分
Java Web应用编程,包括 Java Oracle 编程,即JDBC;JavaWeb编程,包括JSP、Servlet,JavaBean;Java应用编程,包括Weblogic、Websphere、Tomcat;以及利用Jbuilder开发Java程序;
MVC与Struts,学习业界通用的MVC设计模式和Struts架构;
Java B/S商务项目开发,4~5人一个项目组,项目大小为(25人*工作日左右)
高级部分
J2ME程序设计,包括J2EE程序、J2ME;Java高级程序设计(J2EE),包括J2EE体系结构和J2EE技术、EJB;Weblogic使用、 JBuilder开发;
Java和XML,包括Java Web Service,JavaXML, 业界主流XML解析器程序设计;
软件企业规范和软件工程,包括UML系统建模型和设计(Rational Rose 200x)软件工程和业界开发规范;CVS版本控制、Java Code书写规范;
J2EE商务应用系统项目开发,4~5人一个项目组,项目大小为(25人*工作日左右)。
………………………………………………………………………………………………
看你问的问题,应该是对java很感兴趣,其实你可以自学java。关于如何学习java,我刚才看到一篇很不错的文章,是一个农民工介绍自己如何自学java,并找到Java的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
我是一名地地道道的农民工,生活在经济落后的农村,有一个哥哥和一个弟弟,父母都是地道的农民,日出而作,日落而息,我从小到大学习一直很好,从小学到高一都,成绩在全级一直名列前茅,这样我也顺利了考上省的重点高中,然而,每个学期开学是家里最为难的时候,每次交学费都让父母发愁许久,家里为了给我筹钱读书,都借了不少钱,才让我读上高中。我知道我读到高中家里已经欠了好多债,为了减轻家里的负担,我选择了退学。
2009年我高一退学,为了给家里还债,干过建筑工地的小工,搞过塑料制品加工,送水工等等。很工资都很低,一个月也就1000多,加上加班费一个月能拿2000多一点,我每个月都向家里寄回800-1000元,到了2011年末,一次偶然的机会我接触了Java,听说Java的前景挺不错,工资相对于我一个农民工来说简直是天文数字,于是我在新华书店买了几本Java的书,尽管白天辛苦工作,晚上回来还是坚持看书,但有于基础太差很多都很不明白,但还是坚持看,一有看1-2个小时Java的书,看着看着许多基础都慢慢的学会了,但那些比较难的还是看不懂,后来还买了有些关于框架的书,还是看不懂,这样断断续续的持续了半年多,觉得自己Java的基础都差不多懂了,但框架还是看不懂,还有最缺的项目经验,看了很多招聘Java程序员的简介都要项目经验,相对我一个农民工来连框架都弄不明白,想找一份Java工作对我来说简直是奢侈。我只想学Java,并不敢想以后能从事Java的工作。
有一次,在网络上看到一篇让我很鼓舞的文章,是一个Java高手介绍在没有基础的朋友怎么自学入门Java,文章写的很好,包含了如何学习,该怎么学习,他提到一个方法就是看视频,因为看书实在太枯燥和费解的,不少是我们也看不懂,这点我真的很认同,我自己看书都看了很久才学会基础。曾经有想过参加培训,但是上万元的培训费让我望而却步,我工资这么低,每个月还有向家里汇钱,加上城市消费比较高,虽然每个月只有几百剩下,但是相对于上万万学费和四个月的吃住费用逼我连想不敢想。 于是我决定看视频,我就去搜索Java的视频,虽然我零星的找到一些Java的视频,但是都不系统。最重要连项目都没有。后来我找到一份很好的视频,是IT学习联盟这个网站一套视频叫<<零基础Java就业班>>的教程还不错,很完整。还赠送11个顶级企业项目。价格很合理,于是我买下来。
于是开始了我的自学Java的路,收到光盘后,我就开始学习,刚开始学习还不错,是从零基础教起,老师幽默风趣而又轻松的课堂教课,使我发现原来学习JAVA并不是一件很难的事情。因为我本来基础还不错,前面的基础看一篇我就过去了,到了框架,我觉不又不是很难,可能老师太牛了,他能把复杂的问题讲的比较通俗易懂,有些难点的地方我还是连续看了五六次,把他弄懂。每天下午6点下班后,吃了饭,马上跑回家。看视频,买了几本笔记本。当时,为了编程还花几百元了台二手的台式电脑,配置一般,但编程是足够的。一边看视频,一边记笔记,把重点都记下来,还一边跟着老师敲代码,为了能尽早学会Java。每天都坚持学5-6个小时。经常学到晚上一点多才睡觉。星期六,日不用上班,每天7点多起床,学到晚上11,12点。那段时间特别辛苦,特别累。在学习Java的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,只是学了些Java基础,相对于那些科班的人来说我要比他们付出更多的努力。我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。终于三个多月后我把Java教程里的内容和项目都学完了,在学项目的过程中我发现项目特别重要,他能把你学过的知识全部联系起来,能更好的理解你所学的知识。还有学习过程中,动手很重要,要经常跟着老师动手敲,动手吧,跟着做,一行一行的跟着敲,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。 如果遇到暂时对于一些思路不能理解的,动手写,先写代码,慢慢你就会懂了。这套视频还赠送了11个顶级企业项目,对于我没有任何经验的人来说,这个太重要了,还有在学习项目是提升能力最快的方法。项目能把所有的知识点全都连到一起了,不再是分散的,而是形成一个整体了。那种感觉是仅仅深入钻研知识点而不写真实项目的人所不能体会的。一个项目就是一根绳子可以把大片的知识串到一起。 就这样,我用了两个月也把项目给学完了。其实学完教程差不错就达到就业水平,但是我可能觉得自己学历低还是把那11个顶级企业项目才去找工作。
接着我就到51job疯狂的投简历,因为我的学历问题,初中毕业,说真的,大公司没有人会要我。所以我头的都是民营的小公司,我希望自己的努力有所回报。没有想过几天后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比价严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几加公司,终于功夫不负有心人,我终于面试上了一家民营的企业。公司规模比较小,我的职务是Java程序员。我想我比较幸运,经理看中我的努力,就决定吕勇我,开的工资是3500一个月,虽然我知道在北京3500只能过温饱的生化,但是我想我足够了,比起以前的工资好了些,以后可以多寄些钱回家。我想只要我继续努力。我工资一定会翻倍的。 把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有自卑,我们不比别人笨,只有我们肯努力,我们一样会成功。
㈤ JAVA中用JNI调用了在WIN32下编译的DLL,如果在LINUX下执行这个JAVA程序,是否还可以继续调用的DLL。
直接是不行的! linux里面没有dll。
不过看你的需求应该是java调用了其他程序别写的功能,在linux里面肯定可以!Linux也有动态链接库的概念,不过叫Share Object ,你编译一个.so的文件,然后还是使用JNI调用。
参考:
编译so:http://www.cnblogs.com/ardar/articles/357321.html
java调用:http://..com/question/488673981.html
㈥ linux 中怎么设置java
exportJAVA_HOME=/usr/share/jdk1.6.0_14
exportPATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportJAVA_HOME=/usr/share/jdk1.6.0_14
exportPATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportJAVA_HOME=/usr/share/jdk1.6.0_14
exportPATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar