日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
使用 Go 進(jìn)行 iOS 和 Android 編程

雖然 Go 并不是一門新語(yǔ)言,不過最近兩年來(lái) Go 還是增加了很多有趣的特性,而且使用這門語(yǔ)言的知名項(xiàng)目的數(shù)量也在快速的增長(zhǎng)。我寫過一篇文章,介紹了 SitePoint 用到的編程語(yǔ)言,其中提到了移動(dòng)端的支持,所以我覺得需要研究一下可能性。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、安寧網(wǎng)絡(luò)推廣、小程序制作、安寧網(wǎng)絡(luò)營(yíng)銷、安寧企業(yè)策劃、安寧品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供安寧建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

我很高興 Android 是支持 Go 語(yǔ)言的,這一方面應(yīng)該是二者都是 Google 的技術(shù),另一方面恐怕也與開發(fā)者希望用 Go 替換 Java 的愿望有關(guān)。

開始

你需要安裝 Golang 1.5+。

接下來(lái)需要安裝 GoMobile 工具,用于編譯和運(yùn)行 Android 和 iOS 的應(yīng)用:

go get golang.org/x/mobile/cmd/gomobile
gomobile init

我們會(huì)參考 gomobile 包里的例子,位于 GoLangInstalldir/src/golang.org/x/mobile/example/。如果你沒有安裝這些例子,參考下面的命令來(lái)安裝:

go get -d golang.org/x/mobile/example/basic

構(gòu)建和安裝 Go 的 Native 應(yīng)用

對(duì)于很多應(yīng)用,編譯 Go 的 Native 應(yīng)用時(shí),忽略那些平臺(tái)相關(guān)的庫(kù)和接口是可以接受的。如果是這樣的情況,編譯已有的 Go 代碼是很輕松的,我們可以選擇使用一個(gè)功能子集,這些功能包括:

  • App 控制和配置

  • OpenGL ES 2

  • 資源管理

  • 事件管理

  • 一些實(shí)驗(yàn)性的包,包括 OpenAL、audio、font、sprite 和運(yùn)動(dòng)傳感器

我們將從已有的 gomobile 項(xiàng)目里的一些例子開始,你可以用自己項(xiàng)目里的文件替換它們。

Android

構(gòu)建一個(gè) Android 的 APK 包

gomobile build -target=android golang.org/x/mobile/example/basic

部署到設(shè)備上

gomobile install golang.org/x/mobile/example/basic

iOS

構(gòu)建一個(gè) iOS 的 IPA 包

gomobile build -target=ios golang.org/x/mobile/example/basic

部署到設(shè)備

跟 Android 不一樣,對(duì)于 iOS 來(lái)說沒有一個(gè)統(tǒng)一的部署命令,你需要用你熟知的方式把包拷貝到設(shè)備或者模擬器上,例如使用 ios-deploy 工具。

可以用上面的步驟,試試 golang.org/x/mobile/example/audio 這個(gè)例子。

讓我們深入了解一下 audio 這個(gè)例子(詳細(xì)的代碼就不列出了了),你并不需要對(duì) Go 語(yǔ)言非常精通(我就是不太精通),我們先了解一下都能干些啥。

首先你可以看到一些 import 語(yǔ)句:

import (...
    "golang.org/x/mobile/app"
    "golang.org/x/mobile/asset"...)

如果你查看一下 import 的這些包所在的目錄 GoLangInstalldir/src/golang.org/x/mobile/* 下的文件,你可以發(fā)現(xiàn)那些編譯到你的代碼里的那些 Java 和 Objective-C 文件。

再進(jìn)一步了解一下,你可以在代碼里找到對(duì)這些 import 的包(例如 app 和 glctx)的引用。

Going Native

我們可以用 Go 寫代碼,然后構(gòu)建一個(gè)緊湊的優(yōu)化過的 native 應(yīng)用,但是目前這個(gè)應(yīng)用還不是完全的 native 的風(fēng)格,因?yàn)樗幸蕾嚨膸?kù)還都是 Java 或者 Objective-C / Swift 的。我們?cè)鯓觼?lái)改善這個(gè)體驗(yàn)?zāi)兀?/p>

Go Mobile 團(tuán)隊(duì)給我們了另一個(gè)選擇,可以在一個(gè) native 應(yīng)用里使用 go 的包(也即你的程序)。特別是共享一些公共的 Go 代碼,把它們綁定到 native 的代碼上是非常好用的。這種方式上手很快,不過長(zhǎng)期來(lái)說維護(hù)會(huì)比較麻煩一些。

Android

如果使用 Android Studio,可以導(dǎo)入項(xiàng)目 GoLangInstalldir/src/golang.org/x/mobile/example/bind/android,打開 build.grade (hello 模塊)文件,更新一下 GOPATH 和 GO 的路徑,下面是我的文件內(nèi)容(我是用 Homebrew 安裝的 GoLang):

同步 Gradle 后,應(yīng)用就可以部署到仿真器或者真實(shí)設(shè)備上了。

注意: 當(dāng)前這種方式只支持基于 ARM 的設(shè)備和仿真器。

讓我們看一下 Java 和 Go 的代碼:

MainActivity.java

package org.golang.example.bind;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import go.hello.Hello;

public class MainActivity extends Activity {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.mytextview);

        // Call Go function.
        String greetings = Hello.Greetings("Android and Gopher");
        mTextView.setText(greetings);
    }}

src/golang.org/x/mobile/example/bind/hello/hello.go

package hello
import "fmt"

func Greetings(name string) string {
    return fmt.Sprintf("Hello, %s!", name)}

通過 import go.hello.Hello 來(lái) import 對(duì)應(yīng)的 go 文件,文件里的 Greetings 函數(shù)在 Java 代碼里可以通過 Hello.Greetings 來(lái)調(diào)用。并不需要太復(fù)雜的步驟,在go 函數(shù)和 native 的 UI 元素之間就可以建立上綁定關(guān)系。

iOS

把一個(gè) iOS 應(yīng)用和 Go 程序直接進(jìn)行綁定需要不同的步驟。首先需要運(yùn)行下面的命令:

cd GoLang_Install_dir/src/golang.org/x/mobile/example/bind
gomobile bind -target=ios golang.org/x/mobile/example/bind/hello

這樣會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)叫 Hello.framework 的 bundle,在項(xiàng)目里可以使用它。

在 Xcode 打開例子中的 iOS 項(xiàng)目,位于 GoLangInstalldir/src/golang.org/x/mobile/example/bind/ios/bind.xcodeproj ,把 Hello.framework 拖到項(xiàng)目里,如果需要,選擇”Copy items”。目錄結(jié)構(gòu)現(xiàn)在看上去是下面這樣:

構(gòu)建和運(yùn)行這個(gè)應(yīng)用(更像 Android 應(yīng)用),我們可以看到在 Objective-C 代碼里進(jìn)行 Go 函數(shù)的調(diào)用。

看一下現(xiàn)在的代碼:

#import "ViewController.h"
#import "hello/Hello.h"  // Gomobile bind generated header file in hello.framework

@interface ViewController ()
@end

@implementation ViewController

@synthesize textLabel;

- (void)loadView {
    [super loadView];
    textLabel.text = GoHelloGreetings(@"iOS and Gopher");
}

@end

#import “hello/Hello.h”導(dǎo)入了之前生成的 framework,textLabel.text = GoHelloGreetings(@”iOS and Gopher”);調(diào)用了它暴露出的一個(gè)函數(shù)來(lái)設(shè)置一個(gè) label 的值。

也可以使用同樣是自動(dòng)生成的基于 Swift 的項(xiàng)目里的 Objective-C 的 framework,像下面這樣:

let msg = Hello.GoHelloGreetings("gopher")

是否值得?

嗯,簡(jiǎn)單的說可能是不值得。如果你已經(jīng)在使用 Go 來(lái)寫應(yīng)用了,并且不在乎應(yīng)用是否 native 的,那么你可以放開手繼續(xù)做,因?yàn)槟阋呀?jīng)知道了構(gòu)建和部署用 Go 寫的 native 應(yīng)用是很簡(jiǎn)單的。如果你打算花更多的精力嘗試一下綁定,你可以走的更遠(yuǎn)一些,不過還是需要稍微控制一下。

如果你沒在用 Go,那么就不太值的現(xiàn)在就在開發(fā) native 的移動(dòng)應(yīng)用時(shí)考慮 Go。不過我有很強(qiáng)烈的預(yù)感,在不久的將來(lái),Go 會(huì)成為這方面很有潛力的選擇的。***歡迎你的建議和意見。


網(wǎng)頁(yè)名稱:使用 Go 進(jìn)行 iOS 和 Android 編程
分享路徑:http://www.dlmjj.cn/article/cdodisp.html