jvm虛擬機androidy移植-編譯篇

有這個必要嗎?都過期的東西了,android上的Dalvik效率不夠高嗎,不夠逼格嗎? java

是的但有總東西是否是咱們這些碼農能決定的,領導和項目需求才是你要關心的,畢竟工做要向領導彙報,項目要去掙錢錢,但掙了money你也只有工資,就這麼現實。 linux

言歸正傳,發發牢騷能夠,可是幹活還得繼續。 android

咱們確定不去造輪子,那樣太累。仍是藉助開源來完成咱們的功能,通過google找到了一個好的的開源jvm, PhoneMe sun開源的java虛擬機。 程序員

PhoneME簡介 編程

phoneME Feature software是一個優化了的Java ME架構。它的核心是支持多任務的MIDP2.1規範實現。當phoneME Feature software運行多個MIDlet時,它只使用一個系統進程,由於一個Java虛擬機實例能夠執行幾個應用,並提供獨立的運行時空間。全部運行的應用都是獨立的,看起來好象每一個應用都在本身的虛擬機中執行同樣。 bash

       phoneME Feature software提供給爲MIDP或者是移動信息設備相關的開發人員。
       如下是phoneME Feature software MR2版本包含的內容特性:
l         高性能的Java ME平臺架構
l         支持每一個功能領域(存儲,網絡和用戶界面等)的模塊化實現
l         子系統,目錄和便攜性類庫
l         最小的特定平臺實現代碼
l         多任務能力和支持併發應用(MIDlet)
l         本地應用管理API
l         本地資源管理API
l         支持德州儀器P2SAMPLE64-V6平臺
l         CLDC 1.1 (JSR 139)和MIDP 2.1 (JSR 118)實現
l         如下可選包實現:
n         Wireless Messaging 1.0 (JSR 120)
n         Mobile Media APIs (JSR 135)
n         J2ME™ Web Services support (JSR 172)
n         Security and Trust Services API support (JSR 177)
n         Content Handler API (JSR 211)

n       Java Binding for the OpenGL ES API (JSR 239) 微信

這個是Feature版本這是未設備資源較少的設備優化的,可是咱們是在android下,它是智能設備了因此咱們選擇advanced版本這個版本支持智能設備。下面咱們就一步一步來把它移植到android上 網絡

1、源碼版本下載 架構

#!/bin/bash
svn checkout https://svn.java.net/svn/phoneme~svn/legal legal --username guest
for i in abstractions cdc cldc javacall jpeg jsr120 jsr135 jsr172 jsr177 jsr211 jsr239 jsr280 jump kdp lime midp midp_abb pcsl pisces preverifier restricted_crypto tools xmlparser;
do
    svn checkout https://svn.java.net/svn/phoneme~svn/components/$i/trunk $i --username guest
done
這個是最後更新的版本,及爲最新版本,不過是四年前更新的。 併發

2、結構說明

1、JavaCall API移植層:該層提取目標平臺的需求,實現必須移植的函數集,是基於目標平臺的實現。pho-neME advanced的主要移植工做集中於此層。

2、MIDP/CLC層:是嵌入式Java虛擬機的核心部分。其中CDC爲資源受限的設備定義了應用編程接口和虛擬機的基礎函數集,MIDP(Mobile Information Device Profile,移動信息設備簡表)則提供應用程序環境和應用程序所需的大量服務。

3、PCSL(Portable Common Services Library,可移植的通用服務庫)層:提供底層服務,供CDC、MIDP和其餘可選包調用。

4、抽象層:是一套函數集,全部擴展JSR包經過抽象層接口與MIDP/CDC層進行交互。

5、擴展JSR包:爲虛擬機提供擴展功能。擴展JSR包種類不少,可根據須要進行擴展。如支持藍牙和OBEX(對象交換)功能的JSR82擴展包、支持Web服務的JSR172包、支持定位功能的JSR179包、支持在線支付功能的JSR229包等。

Java虛擬機的移植首先要肯定兩件事:一是目標CPU,二是目標OS(操做系統)。OS移植比較簡單,移植工做集中在虛擬機自身和核心CLDC庫上;而CPU移植則較爲複雜,由於彙編解釋器和適配的編譯器十分依賴於目標CPU架構。

2、編譯配置

#!/bin/bash
export CVM_TARGET_TOOLS_PREFIX=
export GNU_TOOLS_DIR=
export WORK_DIR=$PWD
export COMPONENTS_DIR=$WORK_DIR
export JAVA_HOME=
export JAVA_PATH=$JAVA_HOME
export JDK_HOME=$JAVA_HOME
export PATH=$JAVA_HOME:$PATH
export CVM_JAVABIN=$JAVA_HOME/bin
export BUILD_OUTPUT_DIR=$COMPONENTS_DIR/output


############################################################
export CVM_PRELOAD_LIB=true
export JAVAME_LEGAL_DIR=$PWD/legal
export PATH=$JAVA_HOME:$PATH
export CVM_DEBUG=false
export CVM_JIT=true
export CVM_BUILD_SO=true
export USE_AAPCS=true
export J2ME_CLASSLIB=foundation
#export CVM_PRELOAD_LIB=true
export TOOLS_DIR=$WORK_DIR/tools
export CVM_BUILD_SUBDIR=true
export CVM_BUILD_SUBDIR_NAME=phoneme-advanced
export PCSL_PLATFORM=linux_arm_gcc
export USE_MIDP=true
export USE_JPEG=true


# Multimedia Subsystem
# Description: Mobile Media API                                                                                                                   
export JPEG_DIR=$COMPONENTS_DIR/jpeg

export ANDROID_SYSROOT=
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
export CFLAGS="--sysroot=$ANDROID_SYSROOT"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"
export EXTRA_CFLAGS=$CFLAGS

echo "CVM_TARGET_TOOLS_PREFIX=$CVM_TARGET_TOOLS_PREFIX" >> cdc/build/linux-arm-generic/GNUmakefile
cd cdc/build/linux-arm-generic
make -f GNUmakefile bin VERBOSE_BUILD=true USE_VERBOSE_MAKE=true $@

CVM_TARGET_TOOLS_PREFIX 編譯環境目錄ndk目錄我用的是android-ndk-r9d

JAVA_HOME 爲jdk環境目錄

ANDROID_SYSROOT 爲ndk 下的arch-arm目錄

正常狀況下會遇到一些錯誤,基本上是android與linux差別致使的改掉它就行

一切正常的話就會在cdc/build/linux-arm-generic下生成foundation目錄裏面有可執行文件cvm

此時的jvm只能在命令行運行一些測試例子。

bin/cvm -cp testclasses.zip Test

今天就到這,下一篇咱們將介紹將它編譯成庫在android 上調用,以及port接口如何實現等。

若是你們對本系列文章有疑問,能夠直接在公衆號留言,小編第一時間聯繫原創做者幫你耐心解答。

技術人員都有本身的情懷,深陷其中而不被理解,歡迎關注我的微信公衆平臺:程序員互動聯盟(coder_online),一個開發人員的家,來訴說本身的故事。

相關文章
相關標籤/搜索