关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »使用 Go 进行 iOS 和 Android 编程

    使用 Go 进行 iOS 和 Android 编程

    2015-12-10 00:00:00 出处:oneapm
    分享

    虽然 Go 并不是一门新语言,不过最近两年来 Go 还是增加了很多有趣的特性,而且使用这门语言的知名项目的数量也在快速的增长。我写过一篇文章,介绍了 SitePoint 用到的编程语言,其中提到了移动端的支持,所以我觉得需要研究一下可能性。

    我很高兴 Android 是支持 Go 语言的,这一方面应该是二者都是 Google 的技术,另一方面恐怕也与开发者希望用 Go 替换 Java 的愿望有关。

    开始

    你需要安装 Golang 1.5+。

    接下来需要安装 GoMobile 工具,用于编译和运行 Android 和 iOS 的应用:

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

    我们会参考 gomobile 包里的例子,位于 GoLangInstalldir/src/golang.org/x/mobile/example/。假如你没有安装这些例子,参考下面的命令来安装:

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

    构建和安装 Go 的 Native 应用

    对于很多应用,编译 Go 的 Native 应用时,忽略那些平台相关的库和接口是可以接受的。假如是这样的情况,编译已有的 Go 代码是很轻松的,我们可以选择使用一个功能子集,这些功能包括:

    App 控制和配置 OpenGL ES 2 资源管理 事件管理 一些实验性的包,包括 OpenAL、audio、font、sprite 和运动传感器

    我们将从已有的 gomobile 项目里的一些例子开始,你可以用自己项目里的文件替换它们。

    Android

    构建一个 Android 的 APK 包

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

    部署到设备上

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

    iOS

    构建一个 iOS 的 IPA 包

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

    部署到设备

    跟 Android 不一样,对于 iOS 来说没有一个统一的部署命令,你需要用你熟知的方式把包拷贝到设备或者模拟器上,例如使用 ios-deploy 工具。

    可以用上面的步骤,试试 golang.org/x/mobile/example/audio 这个例子。

    让我们深入了解一下 audio 这个例子(详细的代码就不列出了了),你并不需要对 Go 语言非常精通(我就是不太精通),我们先了解一下都能干些啥。

    首先你可以看到一些 import 语句:

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

    假如你查看一下 import 的这些包所在的目录 GoLangInstalldir/src/golang.org/x/mobile/* 下的文件,你可以发现那些编译到你的代码里的那些 Java 和 Objective-C 文件。

    再进一步了解一下,你可以在代码里找到对这些 import 的包(例如 app 和 glctx)的引用。

    Going Native

    我们可以用 Go 写代码,然后构建一个紧凑的优化过的 native 应用,但是目前这个应用还不是完全的 native 的风格,因为所有依赖的库还都是 Java 或者 Objective-C / Swift 的。我们怎样来改善这个体验呢?

    Go Mobile 团队给我们了另一个选择,可以在一个 native 应用里使用 go 的包(也即你的程序)。特别是共享一些公共的 Go 代码,把它们绑定到 native 的代码上是非常好用的。这种方式上手很快,不过长期来说维护会比较麻烦一些。

    Android

    假如使用 Android Studio,可以导入项目 GoLangInstalldir/src/golang.org/x/mobile/example/bind/android,打开 build.grade (hello 模块)文件,更新一下 GOPATH 和 GO 的路径,下面是我的文件内容(我是用 Homebrew 安装的 GoLang):

    使用 Go 进行 iOS 和 Android 编程

    同步 Gradle 后,应用就可以部署到仿真器或者真实设备上了。

    注意: 当前这种方式只支持基于 ARM 的设备和仿真器。

    让我们看一下 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 来 import 对应的 go 文件,文件里的 Greetings 函数在 Java 代码里可以通过 Hello.Greetings 来调用。并不需要太复杂的步骤,在go 函数和 native 的 UI 元素之间就可以建立上绑定关系。

    iOS

    把一个 iOS 应用和 Go 程序直接进行绑定需要不同的步骤。首先需要运行下面的命令:

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

    这样会在当前目录下创建一个叫 Hello.framework 的 bundle,在项目里可以使用它。

    在 Xcode 打开例子中的 iOS 项目,位于 GoLangInstalldir/src/golang.org/x/mobile/example/bind/ios/bind.xcodeproj ,把 Hello.framework 拖到项目里,假如需要,选择”Copy items”。目录结构现在看上去是下面这样:

    使用 Go 进行 iOS 和 Android 编程

    构建和运行这个应用(更像 Android 应用),我们可以看到在 Objective-C 代码里进行 Go 函数的调用。

    看一下现在的代码:

    #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”导入了之前生成的 framework,textLabel.text = GoHelloGreetings(@”iOS and Gopher”);调用了它暴露出的一个函数来设置一个 label 的值。

    也可以使用同样是自动生成的基于 Swift 的项目里的 Objective-C 的 framework,像下面这样:

    let msg = Hello.GoHelloGreetings("gopher")

    是否值得?

    嗯,简单的说可能是不值得。假如你已经在使用 Go 来写应用了,并且不在乎应用是否 native 的,那么你可以放开手继续做,因为你已经知道了构建和部署用 Go 写的 native 应用是很简单的。假如你打算花更多的精力尝试一下绑定,你可以走的更远一些,不过还是需要稍微控制一下。

    假如你没在用 Go,那么就不太值的现在就在开发 native 的移动应用时考虑 Go。不过我有很强烈的预感,在不久的将来,Go 会成为这方面很有潜力的选择的。最后欢迎你的建议和意见。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。