2010-08-06 13 views
27

我有興趣將Scala(或其他非Java JVM語言)整合到android平臺中。我並不是指用Scala寫一個android應用程序,我早就做過,但實際上已經連接到構建android平臺源代碼樹的構建過程。我想這將會是一個掛鉤makefile等問題。有沒有人對此有所瞭解?如何將Scala整合到核心Android平臺?

我到目前爲止有: 平臺源treefrom混帳://android.git.kernel.org/platform/manifest.git建在它的處女形式,通過「[下載引導和建立谷歌Android ] [1]」

  • 構建/核心/組合/ scalac.mk#配置Scala編譯器相關的變量,通過config.mk包括在建立/核心/ definitions.mk
  • 添加了定義用於全子目錄-scala-files和一個all-scala-files-
  • 定義中增加了定義.mk構建scal一個文件,它們包含在包

剩下的是什麼:

  • 包括斯卡拉 - library.jar
  • 確保更改-bootclasspath沒有打破任何
  • 圖出來如何處理scala類依賴於java類的情況,反之亦然
  • 重大清理代碼
  • 測試!
  • 圖做出來的(除了剛剛張貼在這裏)與改變什麼,我做了

看起來像我幾乎沒有!

從過去

的一些注意事項最新:我發現那裏的Java源文件進行編譯!在definitions.mk中,參見'define transform-java-to-classes.jar'。最新的想法是編寫一個transform-scala-to-class的定義,然後讓它直接存儲那些被打包的類。我將在transform-java-to-classes.jar的這一步之前調用transform-scala-to-class。對eclipse和cygwin的支持現在將被放棄,因爲它會使代碼變得混亂,從而增加我失敗的機率。構建過程從根Makefile開始運行build/core/main.mk build/core/main.mk包含build/core/config.mk,其中包含build/core/combo/javac.mk其中設置了HOST_JAVAC,TARGET_JAVAC和COMMON_JAVAC。 COMMON_JAVAC是「具有通用參數的Java編譯器命令」,除了在特殊環境(openjdk或eclipse)中,其他兩個變量默認情況下會獲得這些值。此文件外不使用COMMON_JAVAC。另外兩個僅用於build/core/definitions.mk。

build/core/java_library.mk(包含在config.mk中)似乎只關心構建jar。這超出了我們關心的範圍。任何與jar的交互都預設了類文件,這預示着我們已經成功構建了我們的scala文件。

在main.mk中有關於java版本的檢查。我們將忽略這些,並假設我們的scala版本是兼容的。現在(在combo/scalac.mk中)我使用的是javac.mk中使用的--target arg。這應該可能存儲在一個變量中。

main.mk還包含build/core/definitions.mk,它依次定義了一些有用的函數。我們在這裏關心的是all-java-files-under和all-subdir-java-files。後者用於Android.mk文件來查找java文件。前者用於實施後者。我會寫他們的Scala等價物。

爲了弄清楚構建過程是如何工作的,我現在正在運行make和-n等。我從stackoverflow文章「[用於調試makefiles的工具] [2]」得到了這個想法。我也在研究重製調試。

build/core/{config.mk,definitions.mk}給了我們關於哪些make文件/命令用來做什麼的信息。

作爲在每個項目基礎上攻擊支持的可能方式,可能會將其他代碼添加到項目的Android.mk文件中。從platform/build/core/build-system.html我們看到:「Android.mk是控制構建給定模塊的makefile片段的標準名稱,只有頂層目錄應該有一個名爲」Makefile「的文件。您可以創建一個新的目標,如「scala-build」,並在最終make之前運行該目標(使PackageName爲scala-build)。人們也許也可以將它隱藏在一個變量賦值中,從而減輕對明確調用目標的需求。

另一種方式(遠遠更加黑客)是劫持用於javac的命令。這是在build/core/combo/javac.mk中設置的。您的項目的Android.mk將不得不包含LOCAL_SRC_FILES中的* .scala文件以及* .java文件。

+0

我會問在android建築郵件列表上的這個。 https://groups.google.com/group/android-building – 2010-08-11 22:51:15

回答

7

reddit上的夥計們說,有一個關於將Scala整合到Android上的教程螞蟻here

+0

我會試試這個。謝謝! – Octoberdan 2010-08-14 16:35:14

+0

@Ooberoberdan如果你可以通知你的進度,這將是非常酷的線程。 – folone 2010-08-14 21:22:58

+0

我週末不在家,但剛回來。直到明天,我沒有時間去放棄它。我一定會讓你知道的! – Octoberdan 2010-08-15 17:33:25