如何Golang開(kāi)發(fā)Android應(yīng)用:

創(chuàng)新互聯(lián)公司專(zhuān)注于安仁企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都做商城網(wǎng)站。安仁網(wǎng)站建設(shè)公司,為安仁等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì)網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
一丶準(zhǔn)備
1.一臺(tái)Linux 64的機(jī)器
2.一個(gè)帶有AndroidStudioIDE的開(kāi)發(fā)機(jī)器
因?yàn)榄h(huán)境配置實(shí)在復(fù)雜,所以引入的docker。
docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash
cd example; echo "view example projects
docker起來(lái)之后,什么就都配置好了,NDK,java,GO的環(huán)境變量了,等等,并且還預(yù)裝了vim,gradle,tmux,git,syncthing,svn
二丶代碼
1.寫(xiě)代碼之前,先約定下目錄結(jié)構(gòu)
go的代碼都放在src/golib下,編譯使用make.bash編譯腳本,看下這個(gè)文件樹(shù)
.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go編譯生成的so文件
| ? ? ? ? ? ? ? `-- libgojni.so
|-- main.go_tmpl # 一個(gè)模板文件,先不用管它
|-- make.bash # 編譯腳本,用來(lái)生成.so和Java代碼
`-- src
|-- golib
| ? |-- hi
| ? | ? |-- go_hi#1438;#1438;#1438; # 自動(dòng)生成的代碼
| ? | ? | ? `-- go_hi.go
| ? | ? `-- hi.go # 需要編寫(xiě)的代碼
| ? `-- main.go
`-- main
? ?|-- AndroidManifest.xml
? ?|-- java
? ?| ? |-- go # 自動(dòng)生成的代碼
? ?| ? | ? |-- Go.java
? ?| ? | ? |-- Seq.java
? ?| ? | ? `-- hi
? ?| ? | ? ? ? `-- Hi.java
? ?| ? `-- me/shengxiang/gohello # 主要的邏輯代碼
? ?| ? ? ? ? ? ? ? ? ? ? ?`-- MainActivity.java#1438;#1438;#1438;
? ?`-- res
2.寫(xiě)了一個(gè)例子
git clone
3.編譯下,試試行不行(就算不行問(wèn)題應(yīng)該也不大,因?yàn)榇髥?wèn)題都被消滅了)
cd GoHello/app
./make.bash
../gradlew build
4.一切順利的話(huà)在build/outputs/apk下應(yīng)該可以看到app-debug.apk這個(gè)文件。
編譯好的放到qiniu上了,可以點(diǎn)擊下載看看
下面可以嘗試改改
打開(kāi)hi.go這個(gè)文件
hi.go的內(nèi)容,比較簡(jiǎn)單,寫(xiě)Go代碼主要就是這部分
// Package hi provides a function for saying hello.
package hi
import "fmt"
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
return "(Go)World"
}
5.文件末尾添加下面這行代碼
func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}
使用./make.bash重新編譯下
6.打開(kāi)MainActivity.java?修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
? ?@Override
? ?public void onClick(View v) {
? ? ? ?String message = Hi.Welcome("yourname");
? ? ? ?Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
? ?}
});
編譯運(yùn)行下,把生成的apk安裝到手機(jī)上試試。
Go 語(yǔ)言是一個(gè)試圖結(jié)合動(dòng)態(tài)類(lèi)型和靜態(tài)類(lèi)型,編譯效率和安全性以及語(yǔ)言的易用性等眾多特性與一體的一種嘗試。他的另一個(gè)目標(biāo)是支持現(xiàn)代的基于網(wǎng)絡(luò)的、基于多核的計(jì)算。最后,Go 還是非常快的,他可以在單個(gè)計(jì)算機(jī)上僅僅花費(fèi)幾秒時(shí)間構(gòu)建一個(gè)龐大的應(yīng)用程序。使用GO語(yǔ)言開(kāi)發(fā)android語(yǔ)言步驟如下:
1. 下載安裝Go語(yǔ)言(版本1.5+)
Golang鏈接
回到頂部
2. 下載安裝 gomobile
下載
$ go get golang.org/x/mobile/cmd/gomobile
安裝(需要等待幾分鐘)
gomobile init
回到頂部
3. Golang開(kāi)發(fā)手機(jī)應(yīng)用有兩種方式
a. 原生應(yīng)用開(kāi)發(fā)
$ go get -d golang.org/x/mobile/example/basic
主要應(yīng)用領(lǐng)域:
應(yīng)用控制管理與配置
OpenGL ES 2 綁定
Asset 管理
Event 管理
試驗(yàn)中的包,含有OpenAL 綁定、音頻、字體、圖形以及運(yùn)動(dòng)傳感器
Android開(kāi)發(fā)
$ gomobile build -target=android golang.org/x/mobile/example/basic
此命令會(huì)生成名為basic的apk安裝包
$ gomobile install golang.org/x/mobile/example/basic
此命令將安裝apk包到已連接的android設(shè)備
Go的內(nèi)存回收還不是很完善。這對(duì)內(nèi)存捉雞的移動(dòng)設(shè)備是不小的弊端,因?yàn)閮?nèi)存貴而且越大越費(fèi)電。雖說(shuō)JAVA內(nèi)存管理也好不到哪去,但是在對(duì)性能敏感的地方可以換JNI。
所以性能上Go是很尷尬的。
加上Go的資源不如JAVA豐富,IDE不如IntelliJ 成熟,Go用來(lái)開(kāi)發(fā)只是說(shuō)說(shuō)而已。
所以開(kāi)發(fā)效率Go根本不能和JAVA比。
個(gè)人認(rèn)為Google目前需要的是類(lèi)C#的兼具功能、性能、可移植性強(qiáng)的Native語(yǔ)言。
Go語(yǔ)言是谷歌推出的一種全新的編程語(yǔ)言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說(shuō):我們之所以開(kāi)發(fā)Go,是因?yàn)檫^(guò)去10多年間軟件開(kāi)發(fā)的難度令人沮喪。
Go是谷歌2009發(fā)布的第二款編程語(yǔ)言。2009年7月份,谷歌曾發(fā)布了Simple語(yǔ)言,它是用來(lái)開(kāi)發(fā)Android應(yīng)用的一種BASIC語(yǔ)言.
Go Logo
北京時(shí)間2010年1月10日,Go語(yǔ)言摘得了TIOBE公布的2009年年度大獎(jiǎng)。該獎(jiǎng)項(xiàng)授予在2009年市場(chǎng)份額增長(zhǎng)最多的編程語(yǔ)言。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗(yàn)到了從未有過(guò)的開(kāi)發(fā)效率。"派克表示,和今天的C++或C一樣,Go是一種系統(tǒng)語(yǔ)言。他解釋道,"使用它可以進(jìn)行快速開(kāi)發(fā),同時(shí)它還是一個(gè)真正的編譯語(yǔ)言,我們之所以現(xiàn)在將其開(kāi)源,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大。"
2007年,谷歌把Go作為一個(gè)20%項(xiàng)目開(kāi)始研發(fā),即讓員工抽出本職工作之外時(shí)間的20%, 投入在該項(xiàng)目上。除了派克外,該項(xiàng)目的成員還有其他谷歌工程師也參與研發(fā)。
派克表示,編譯后Go代碼的運(yùn)行速度與C語(yǔ)言非常接近,而且編譯速度非常快,就像在使用一個(gè)交互式語(yǔ)言。現(xiàn)有編程語(yǔ)言均未專(zhuān)門(mén)對(duì)多核處理器進(jìn)行優(yōu)化。Go就是谷歌工程師為這類(lèi)程序編寫(xiě)的一種語(yǔ)言。它不是針對(duì)編程初學(xué)者設(shè)計(jì)的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο螅揖哂姓嬲拈]包(closures)和反射 (reflection)等功能。
在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類(lèi)似,對(duì)于Java開(kāi)發(fā)者來(lái)說(shuō),應(yīng)該能夠輕松學(xué)會(huì) Go。之所以將Go作為一個(gè)開(kāi)源項(xiàng)目發(fā)布,目的是讓開(kāi)源社區(qū)有機(jī)會(huì)創(chuàng)建更好的工具來(lái)使用該語(yǔ)言,例如 Eclipse IDE中的插件。
在谷歌公開(kāi)發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒(méi)有使用Go,但是谷歌已經(jīng)使用該語(yǔ)言開(kāi)發(fā)了幾個(gè)內(nèi)部項(xiàng)目。派克表示,Go是否會(huì)對(duì)谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過(guò)Go的確可以和Native Client配合使用。他表示"Go可以讓?xiě)?yīng)用完美的運(yùn)行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實(shí)現(xiàn)Wave,無(wú)論是在前端還是后臺(tái)。
Go 同時(shí)具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對(duì)64位x64和32位x86計(jì)算機(jī)的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對(duì)ARM芯片和Android設(shè)備的支持。派克表示,"Android手機(jī)存在的問(wèn)題是,我們一直沒(méi)有一個(gè)數(shù)學(xué)協(xié)處理器。"
個(gè)人認(rèn)為:
1、上手快
只要你有其會(huì)其他語(yǔ)言,學(xué)習(xí)go很快。
2、go語(yǔ)言非常適合寫(xiě)服務(wù)端
因?yàn)樗_(kāi)源,所以很容易找到你想要的框架,開(kāi)發(fā)效率非常高。
3、跨平臺(tái)
你的一個(gè)程序可以隨意部署。
不受操作系統(tǒng)限制,windwos、linux、macos都能支持。
不受處理器限制,x86、arm也都可以,你要知道國(guó)產(chǎn)可替代的U就是arm。
4、部署簡(jiǎn)單
編譯成一個(gè)文件就可以發(fā)布了,不需要環(huán)境支撐。
以上是最基本的理由,當(dāng)然這些對(duì)于.net core來(lái)說(shuō)也一樣,但是對(duì)比一下發(fā)布的文件大小你就知道該選擇誰(shuí)了。
標(biāo)題名稱(chēng):go語(yǔ)言寫(xiě)app如何,go語(yǔ)言用什么軟件寫(xiě)
文章URL:http://chinadenli.net/article2/dsgoioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站策劃、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站設(shè)計(jì)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容