Go語言對Android原生應用開發的支持情況

jopen 10年前發布 | 35K 次閱讀 Go語言 Android

英文原文:The State of Go Language for Android Native Development

  Google 工程師和獨立開發人員提出了幾份不同的提案,旨在讓 Go 語言支持開發原生的 Android 應用。這項工作無法讓 Go 語言編寫的應用使用 Android NDK 的全部接口,但有可能使用其中的一個子集。

  David Crawshaw 是 Google 的工程師,他寫了一份提案,旨在讓 Go 語言部分支持編寫 Android 應用。根據他的說法,“用 Go 語言來實現整個 Android 平臺非常困難。Android 平臺是用 Java 寫的,并擁有龐大的 API 層。”

  但是,Crawshaw 說,一部分 Android 應用——比如游戲——使用了精簡得多的C語言 API 編寫代碼,這些 API 由 Android NDK 提供。這樣,使用 Go 語言來開發和 NDK 一樣的功能,提供對 Android 的支持是有可能實現的。

  Crawshaw 建議在 Go 1.4 的開發周期中,Go 語言的代碼庫引入一個叫 GOOS=android 的選項,這個選項可以提供以下功能:

  • 為 Android NDK 中導出的 OpenGL、OpenSL 和 OpenMAX 接口,提供 Go 語言的綁定(binding)。
  • 從 Java 語言到 Go 語言的綁定生成器(binding generator)。如果我們有一個 Go 語言編寫的軟件包,那么這個生成器可以幫助 Java 代碼調用它,所以游戲菜單界面就可以直接使用標準的 SDK 來編寫了。
  • 集成到 Android Studio 的編譯系統中。
  • </ul>

      不止 Crawshaw 一個人提出了把 Go 語言和 Android 結合起來的想法。Elias Naur 建議擴 展 Go 語言的工具鏈來支持創建動態庫。這樣我們就可以在 Android 應用中使用 Go 語言編寫的庫,它們被 Android 應用加載和運行,并打包在 apk 中發行。要把這個想法變為現實,有一個重要的前提條件:加入對交叉編譯的支持,而 Go 1.3 已經實現了它。交叉編譯是必需的,因為 NDK 本身并不能在 Android 上運行,只有使用 NDK 編譯和(或)鏈接的可執行程序和動態庫才能在 Android 設備上運行。

      上面這個提案基于已有的開源項目 goandroid,作者就是 Elias Naur。Goandroid 修改了 Go 語言的工具鏈和運行時庫,使之能編寫動態庫,在原生的 Android 應用中運行,而 Google 官方并不支持這個功能。

      最后,還有一個叫 Mandala 的項目,它是一個更全面的框架,它的目標是使 Go 語言能編寫 Android 原生應用。Mandala 利用了 Goandroid 的工具鏈,它的作者 Andrea Fazzi 說,感謝 Goandroid,“你可以在桌面環境中開發、測試和運行你的應用,然后再把它部署到 Android 設備上。它鼓勵大家以 Go 語言獨特的方式來編寫 Android 應用:使用通道(channels)來實現通訊,而不是回調函數(callbacks)”

      在功能方面,Mandala 項目跟 Crawshaw 的提案很接近,它的目標也主要是為游戲提供解決方案:“我們不應該把 Mandala 框架看作是一個上層的游戲引擎,而是應該在它基礎之上構建游戲引擎,或者把已有的游戲引擎移植到它上面。” Fazzi 提醒道,Google 并不支持用 Go 語言來開發原生的 Android 應用,但他也表達了他的期望“當前這些工作可以起到某種激勵作用,促使 Go 語言開發團隊從官方層面支持 Android。”

    來自: InfoQ
                        <span id="shareA4" class="fl">                            
                            </span>
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!