jvm虛擬機器androidy移植-編譯篇

來源:互聯網
上載者:User

標籤:

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

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

言歸正傳,發發牢騷可以,但是幹活還得繼續。

我們肯定不去造輪子,那樣太累。還是藉助開源來完成我們的功能,經過google找到了一個好的的開源jvm, PhoneMe sun開源的java虛擬機器。

PhoneME簡介

phoneME Feature software是一個最佳化了的Java ME架構。它的核心是支援多任務的MIDP2.1規範實現。當phoneME Feature software運行多個MIDlet時,它只使用一個系統進程,因為一個Java虛擬機器執行個體可以執行幾個應用,並提供獨立的運行時空間。所有啟動並執行應用都是獨立的,看起來好象每個應用都在自己的虛擬機器中執行一樣。

       phoneME Feature software提供給為MIDP或者是移動資訊裝置相關的開發人員。       以下是phoneME Feature software MR2版本包含的內容特性:l         高效能的Java ME平台架構l         支援每個功能領域(儲存,網路和使用者介面等)的模組化實現l         子系統,目錄和便攜性類庫l         最小的特定平台實現代碼l         多任務能力和支援並發應用(MIDlet)l         本地應用管理APIl         本地資源管理APIl         支援德州儀器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上。

一、源碼版本下載

#!/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
這個是最後更新的版本,及為最新版本,不過是四年前更新的。

 

二、結構說明

 

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架構。

二、編譯配置

#!/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 [email protected]

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),一個開發人員的家,來訴說自己的故事。

 

 

 

 

 

 

 

 

jvm虛擬機器androidy移植-編譯篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.