2010-10-14 20 views
2

當我第一次發佈Dalvik和Google的Android操作系統時,我讀了很多。其中一個我不太明白的事情就是爲什麼使用Java。我的理解是是這樣的:是否有特定的原因Java是編程Android的唯一方式?

Java code -> Java bytecode -> Dalvik bytecode 

我不明白的是,爲什麼我還沒有看到任何編譯直Dalvik的代碼或任何其他前端比Java的Dalvik虛擬機。在沒有Java的情況下使用直接編譯器或使用Android的方式是否有任何工作正在進行?

爲了闡明我正在尋找不編譯爲Java字節碼的語言。而且我也不關心動態語言,我已經閱讀了一些關於它們的問題。我也知道NDK,我正在尋找關於Dalvik編譯語言的信息,而不是真正的本地編譯語言。

+0

請參閱[ Android without Java ](http://stackoverflow.com/questions/3242034/android-without-java)。但是,您應該澄清您是否正在尋找Java語言(相對常見)或Java字節碼的替代品。我還沒有親自聽說過使用Davlik VM但不是Java字節碼的項目。 – 2010-10-14 07:28:19

回答

0

每個人都使用Java,因爲這正是Android開發正式支持的內容,這正是Android SDK在開發時所基於的內容。但是,它們還提供NDK(本機開發工具包),允許您使用C/C++進行開發。

看到自己原來公佈的在這裏:http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

+0

我相信很多次NDK需要特殊的電話支持嗎?而且我正在尋找更直接的Dalvik代碼,而不是機器代碼。 – Earlz 2010-10-14 07:34:31

2

還有編寫原生Android應用程序在操作系統上運行的直接(這是尼克斯的*的變化)成爲了可能。對於推薦的方法是使用Android NDK:

http://developer.android.com/sdk/ndk/index.html

還有更多的「哈克」的方式做到這一點:使用ARM C/C++編譯器和只寫你的應用程序就像任何普通的* nix程序。不過,這大部分適用於沒有GUI的後臺服務。

+0

有趣:-) – willcodejavaforfood 2010-10-14 07:53:23

1

我不明白的是爲什麼我還沒有看到什麼編譯成Dalvik虛擬機的直接Dalvik代碼或任何其他前端比Java。

這樣做的原因基本上是沒有必要爲「直接到Dalvik的」編譯,因爲,正如你正確地指出,現有編譯鏈通過字節去反正。

直接進入達爾維克的唯一原因是,如果語言在某種意義上可以利用不在字節碼中的dex特性。但是,dex和java字節碼非常相似。主要的區別可能是Dalvik是基於寄存器而JVM是基於堆棧的。除此之外,指令集非常相似。


正如你可能已經意識到,您可以使用基於JVM的編譯爲Java字節碼的任何語言,就是。

一些例子:

+0

好吧,達爾維克確實有「goto」;-) – 2010-10-14 16:07:00

+2

所以java字節碼 – aioobe 2010-10-14 16:45:31

+0

直接進入Dalvik對於高級混淆器很有用,因爲它可以利用dalvik字節代碼格式的細微差異來欺騙天真的反向工程工具依靠轉換回Java字節碼。但對普通編程沒用。 – Antimony 2013-09-07 19:08:19

1

MonoDroid的是一個測試項目,C#.NET代碼轉換成Dalvik的。這並不完全,但它會爲知道C#的人開放一些可能性,但不會有Java。

相關問題