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

2021-01-06 開源中國

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的選項,這個選項可以提供以下功能:

不止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。」

原文出處: Sergio De Simone   譯文出處: infoQ 曹知淵。

相關焦點

  • Clojure在Android開發中的應用情況
    要說最近Android開發中的新語言誰最火,毫無疑問是Kotlin,不過對於函數式編程愛好者,Clojure才算他們的心頭好。Clojure是一種運行在Java平臺上的Lisp方言,有人對它的評價是這樣的:構建於JVM之上,Clojure就是一門「嚴肅」的語言,而非很多人眼中的Lisp「玩具」語言,你學習後可以馬上使用並且實踐。但是Clojure又是Lisp方言,Lisp的神奇能力它還都保留,這樣兼具美學和實用的語言如何讓人不愛?
  • 像寫Flutter一樣開發Android原生應用
    要問到Flutter和Android原生App,在開發是有何區別,編程方式是繞不開的話題。Flutter採用聲明式編程,Android原生開發則採用命令式編程。聲明式編程 VS.同時存在一些其他的定義,這些定義不是簡單的將聲明式編程和命令式編程做對比,例如:聲明式編程是告訴計算機需要計算「什麼」而不是「如何」去計算;任何沒有副作用的程式語言,或者更確切一點,任何引用透明的程式語言;任何有嚴格計算邏輯的程式語言。這些定義有一些是重合的。
  • 為什麼我堅持用Go語言做Web應用開發框架?
    【CSDN編者按】很多情況下,企業上線或需要快速迭代一款新的產品,但會發現原有的後端框架已不太適用,甚至影響了開發調試速度,那麼尋找一種新的開發框架和程式語言變得極為迫切。本篇將揭秘用於創建網站和REST API的最流行、最強力和最全面的Go框架。Google的Go語言(又名Golang)已成為編寫網絡服務和API強有力的選擇。
  • web開發我更喜歡使用GO語言
    go語言可能是Google開發的程式語言,迅速受到開發的關注並願意使用它,在2016年被TIOBE 選為「TIOBE 年最佳程式語言」,可想而知go能被開發者認可一定有它獨特的優勢,而我更喜歡使用GO語言web開發。
  • 厲害了,FydeOS - 可原生運行 Android + Linux 應用的國產 OS
    可原生運行 Android 應用 + Linux 應用,我們知道,Linux 最大的問題是生態問題,沒有軟體,但是 FydeOS 給出了它的解決方案,兼容 Android,可原生運行 Android 應用,FydeOS = Chrome OS + Android + Linux,沒錯,就是這麼牛逼。
  • 使用Go 進行 iOS 和 Android 編程
    雖然 Go 並不是一門新語言,不過最近兩年來 Go 還是增加了很多有趣的特性,而且使用這門語言的知名項目的數量也在快速的增長。我寫過一篇文章,介紹了 SitePoint 用到的程式語言,其中提到了移動端的支持,所以我覺得需要研究一下可能性。
  • 跟光磊學Go語言-Go語言概述與開發環境搭建
    簡單:C語言37個關鍵字,C++11多達84個關鍵字,Go只有25個關鍵字,對於複雜任務,例如並發和內存管理,go語言提供了並發支持以及垃圾回收機制。高效:GO語言作為一種編譯 、強類型語言,仍然可以使用指針去訪問內存。生產力:Go語言有簡潔清晰的依賴管理以及獨特的接口類型設計,甚至對一些編程範式的約束為開發者做出了選擇,例如支持複合而不支持繼承的擴展方式。
  • 最佳Android應用程式開發工具(IDE)
    隨著對android智慧型手機的需求不斷增加,市場上優質的android應用正在蓬勃發展。 因此,同樣需要使用完美的Android IDE進行android應用程式開發。 幸運的是,我們有許多可用的android IDE,這使得android應用程式的開發變得相當容易。
  • 2019年11月,分析Android原生開發的現狀
    原生開發的生態一直在不斷地發展變化,過去5年從事android開發的經歷讓我深刻的體會到了這一點。另一方面,SQLDelight支持Kotlin跨平臺。因此,隨著Kotlin使用率的增加,我預計SQLDelight的使用率也會隨之增加。順便說一下,AndroidX中有對原生SQLite的使用說明,我還不知道該怎麼使用。但是如果您想在應用中使用原生SQLite,那麼你或許需要去認真的研究下這個主題。
  • 為什麼很多公司轉型 Go 語言開發?Go 語言能做什麼
    鑑於Go語言的特點和設計的初衷,Go語言作為伺服器程式語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分布式系統、資料庫代理等;網絡編程方面,Go語言廣泛應用於Web 應用、API應用、下載應用等;除此之外,Go語言還適用於內存資料庫和雲平臺領域,目前國外很多雲平臺都是採用Go開發。
  • Go語言正確快速安裝開發工具
    我最近幹啥我最近都在學習Go語言相關的東西以及搗鼓論文。不是沒時間更新,其實就是自己懶。 後續應該會回復正常的節奏了。今天都幹了些啥今天下午都在安裝Go語言的東西,因為自己打算使用VsCode作為Go的開發主力。
  • M1 Mac使用原生Go與開發環境
    Go 1.16版將正式支持Apple Silicon M1晶片,即arm64架構的Mac作業系統,目前go 1.16版版本為beta1,只是會在這個基礎上再修修
  • go語言如何實現一個原生的中間件開發
    web開發的背景下,「中間件」通常意思是「包裝原始應用並添加一些額外的功能的應用的一部分」。這個概念似乎總是不被人理解,但是我認為中間件非常棒。首先,一個好的中間件有一個責任就是可插拔並且自足。這就意味著你可以在接口級別嵌入你的中間件他就能直接運行。它不會影響你編碼方式,不是框架,僅僅是你請求處理裡面的一層而已。
  • Go程式語言也可以用來編寫Web應用?
    Go程式語言也可以用來編寫Web應用? Go語言的語法接近C語言,但是對於變量的聲明是不同的,其他語法不同之處是for循環和if判斷式沒有括號圍繞。Go語言支持垃圾回收功能。
  • Android Studio 4.1 發布,全方位提升開發體驗
    設置完畢後,模擬器將提供鉸鏈角度傳感器和姿態變化信息,方便您測試應用在這些機型上的響應情況。請參閱博文《使用 Android 模擬器在 Android 11 上進行開發》了解更多。我們希望擴展此功能以共享原生庫。AGP 4.1 支持在 Android 庫項目的 AAR 中從外部原生構建中導出庫。
  • Android Studio 3.0 正式發布,支持 Kotlin 語言
    Android Studio 3.0 專注於加速 Android 應用開發,包含大量更新內容,主要分為三個功能塊,包括:更新概述:開發Java 8 特性支持改進 —— 該版本繼續改進對 Java 8 語言特性的支持,新增了 migration to a javac 工具鏈,在項目中使用 Java 8 語言功能更加容易。
  • go程式語言能做什麼
    鑑於Go語言的特點和設計的初衷,Go語言作為伺服器程式語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分布式系統、資料庫代理等;網絡編程方面,Go語言廣泛應用於Web 應用、API應用、下載應用等;除此之外,Go語言還適用於內存資料庫和雲平臺領域,目前國外很多雲平臺都是採用Go開發。
  • 華為雲的Go語言云原生實戰經驗:建立雲原生應用開發基礎能力
    在近日於上海召開的第六屆GopherChina大會上,華為雲微服務首席架構師田曉亮就受邀分享了《華為雲的Go語言云原生實戰經驗》,講述如何構建韌性、高可靠、安全的雲原生應用系統,並孵化雲原生應用開發框架Gochassis,以提升團隊開發效能。
  • 在 iOS 和 Android 上運行 Go 代碼
    .├── android/├── go/│ ├── cmd/│ │ └── libfoo/│ │ └── main.go│ ├── foo/│ │ └── foo.go│ ├── go.mod│ └── go.sum└── ios/$ mkdir -p android ios go/cmd/libfoo go/foo
  • Android uni-app 封裝原生插件
    一個使用Vue.js開發所有前端應用框架,開發者編寫一套代碼,可發布到運行體驗好組件、api與微信小程序一致兼容weex原生渲染通過技術棧,學習成本低vue的語法、微信小程序的api內嵌mpvue開放生態,組件更豐富支持通過npm安裝第三方包支持微信小程序自定義組件及SDK兼容mpvue組件及項目