如何Golang开发Android应用

Python016

如何Golang开发Android应用,第1张

如何Golang开发Android应用:

一丶准备

1.一台Linux 64的机器

2.一个带有AndroidStudioIDE的开发机器

因为环境配置实在复杂,所以引入的docker。

docker pull codeskyblue/docker-goandroid

docker run --rm -ti codeskyblue/docker-goandroid bash

cd exampleecho "view example projects

docker起来之后,什么就都配置好了,NDK,java,GO的环境变量了,等等,并且还预装了vim,gradle,tmux,git,syncthing,svn

二丶代码

1.写代码之前,先约定下目录结构

go的代码都放在src/golib下,编译使用make.bash编译脚本,看下这个文件

.

|-- app.iml

|-- build.gradle

|-- libs/armeabi-v7a # go编译生成的so文件

|               `-- libgojni.so

|-- main.go_tmpl # 一个模板文件,先不用管它

|-- make.bash # 编译脚本,用来生成.so和Java代码

`-- src

   |-- golib

   |   |-- hi

   |   |   |-- go_hi&#1438&#1438&#1438# 自动生成的代码

   |   |   |   `-- go_hi.go

   |   |   `-- hi.go # 需要编写的代码

   |   `-- main.go

   `-- main

       |-- AndroidManifest.xml

       |-- java

       |   |-- go # 自动生成的代码

       |   |   |-- Go.java

       |   |   |-- Seq.java

       |   |   `-- hi

       |   |       `-- Hi.java

       |   `-- me/shengxiang/gohello # 主要的逻辑代码

       |                      `-- MainActivity.java&#1438&#1438&#1438

       `-- res

2.写了一个例子

git clone

3.编译下,试试行不行(就算不行问题应该也不大,因为大问题都被消灭了)

cd GoHello/app

./make.bash

../gradlew build

4.一切顺利的话在build/outputs/apk下应该可以看到app-debug.apk这个文件。

编译好的放到qiniu上了,可以点击下载看看

下面可以尝试改改

打开hi.go这个文件

hi.go的内容,比较简单,写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.打开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()

       }

   })

编译运行下,把生成的apk安装到手机上试试。

Go的内存回收还不是很完善。这对内存捉鸡的移动设备是不小的弊端,因为内存贵而且越大越费电。虽说JAVA内存管理也好不到哪去,但是在对性能敏感的地方可以换JNI。

所以性能上Go是很尴尬的。

加上Go的资源不如JAVA丰富,IDE不如IntelliJ 成熟,Go用来开发只是说说而已。

所以开发效率Go根本不能和JAVA比。

个人认为Google目前需要的是类C#的兼具功能、性能、可移植性强的Native语言。