J2ME KVM教程之增加KVM中的系统调用API

开发 前端
这里向大家简单介绍一下J2ME KVM教程之如何增加KVM中的系统调用API ,大家都晓得KVM是不支持Native函数调用的,如果要增加一些系统调用的API,那么只能加到KVM内部。

你知道如何增加KVM中的系统调用API  吗,这里向大家描述一下,不同的j2me设备,也有不同的系统调用API以及它们的实现,相信本文介绍一定会让你有所收获。

J2ME KVM教程之如何增加KVM中的系统调用API  

大家都晓得KVM是不支持Native函数调用的,如果要增加一些系统调用的API,那么只能加到KVM内部。同时,不同的j2me设备,也有不同的系统调用API以及它们的实现。我们从SUN那么下载到原始的KVM源代码,如何为其增加一个系统调用API呢?本文以具体实践的步骤一步一步来讲解增加KVM系统API的方法。

其实为KVM增加一个系统调用API比为linux增加一个系统调用API还简单。大致就分成两步工作就完成。一步是在classes.zip中增加一个你自己新增的class,一步是在KVM的nativeCore.c中实现这个新增的class的nativeapi函数。

下面以org.test.MiniTest这个新增的class为例来实现一个TestInt()系统调用函数。函数的功能很简单,就是返回一个整数9999。

1.新增org.test.MiniTest类

从SUN那里下载到j2me_cldc1.1版本的KVM代码后。在j2me_cldcapi目录下,增加orgestMiniTest.Java的包目录以及java文件。然后写上如下的代码:

  1. packageorg.test;  
  2. publicclassMiniTest  
  3. {  
  4. publicstaticnativeintTestInt();  

2.进行***次编译

根据上一篇文章中的KVM编译方法,在命令提示符下,跳到目录j2me_cldcuildwin32下,输入make命令进行***次整体编译。不过,这次编译过程在编译连接KVM中的*.o文件的时候,会提示一个找到_Java_org_test_MiniTest_TestInt符号的错误提示。

这是因为在我们只是在org.test.MiniTest中定义了这个native函数TestInt,但是并没有在KVM的任何一个c文件中实现其对应的函数。

首先编译过程是用javac来编译j2me_cldc/api里面的所有的*.java文件,然后将其class文件打包成一个classes.zip,然后JCC这个工具会默认根据classes.zip生成ROMJavaWin.c和nativeFunctionTableWin.c。而在ROMJavaWin.c声明这个native函数:

  1. externvoidJava_org_test_MiniTest_TestInt(void);  
  2.  

3.实现Java_org_test_MiniTest_TestInt函数

从KVM中的代码可以看到,KVM默认都是把一些native函数放到了nativeCore.c这个文件里面。你也可以自己去新增一些C程序文件,不过本例就把这个Java_org_test_MiniTest_TestInt放在了nativeCore.c文件。

下面是代码:

  1. voidJava_org_test_MiniTest_TestInt(void)  
  2. {  
  3. pushStack(9999);  

这里为什么把返回值使用pushStack这个宏来返回的原因就不好说了,关于JAVA运行的方式其实就是一个堆栈,Java的字节码其实就是一种栈式语言,这个在编译原理里面的中间代码生成那一章可以找到它的原型和其说明。再者,还可以看《InsideJavaVirtualMachine》这本书。

4.第二次编译

第二次编译就是可以生成真正的kvm.exe文件了。还是跟***次编译以及上一篇编译KVM的方法一样,敲入make命令即可。

5.测试MiniTest.TestInt这个API

自己写了一个Test的类,来测试这个API:

  1. importorg.test.*;  
  2. classTest{  
  3. publicstaticvoidmain(String[]args){  
  4. System.out.println("TestResult="+MiniTest.TestInt());  
  5. }  

用javac编译的时候,需要把前面的j2me_cldc/classes.zip拷贝过来,执行:

  1. javac-classpathclasses.zipTest.java  
  2.  
  3. kvm-classpath.Test  

【编辑推荐】

  1. J2ME KVM教程之KVM编译过程
  2. J2ME开发环境搭建必备手册
  3. 三大元素组成J2ME体系结构
  4. 瞻望J2ME前景,看J2ME路在何方?
  5. Java2平台J2SE、J2EE、J2ME三大版本的区别


 

责任编辑:佚名 来源: dev.10086.cn
相关推荐

2010-09-29 10:46:11

J2MEKVM

2010-09-29 16:20:06

J2MEWeb服务API

2010-09-30 13:11:59

J2MECanvas

2010-09-29 08:57:04

J2ME前景

2010-09-29 13:09:48

OTAJ2ME程序

2009-06-23 11:30:16

RMSJ2ME

2010-09-30 12:53:00

J2MECSS

2011-09-01 16:45:15

J2MELua

2010-10-09 15:07:09

J2MEWeb服务

2010-09-30 11:04:53

J2MERMS

2010-09-29 15:45:49

J2MEFontColor

2009-06-30 15:49:00

J2ME编程

2010-09-30 08:49:17

cookieJ2ME

2009-06-17 11:27:00

setClip方法J2ME

2011-12-02 10:37:14

JavaJ2ME

2010-09-30 09:56:26

J2ME Polish

2010-09-29 09:19:39

J2ME开发工具

2009-10-10 13:54:20

OPhone

2010-10-09 14:29:44

J2MEfontcolor

2011-07-21 16:03:12

J2ME
点赞
收藏

51CTO技术栈公众号