在Android中引用golang編譯的aar包

gomobile是在安卓中使用golang的工程雌澄,既可以全部代碼用golang滚婉,也可以引用部分golang的代碼豁陆,但是現(xiàn)在還不成熟,還是試驗階段沛慢。
不過它不需要像C++那樣去手動回收內(nèi)存赡若。

gomobile介紹wiki
https://github.com/golang/go/wiki/Mobile#sdk-applications-and-generating-bindings
gomobile地址
https://github.com/golang/mobile

支持的類型

  • Signed integer and floating point types.
  • String and boolean types.
  • Byte slice types. Note that byte slices are passed by reference,
    and support mutation.
  • Any function type all of whose parameters and results have
    supported types. Functions must return either no results,
    one result, or two results where the type of the second is
    the built-in 'error' type.
  • Any interface type, all of whose exported methods have
    supported function types.
  • Any struct type, all of whose exported methods have
    supported function types and all of whose exported fields
    have supported types.

https://godoc.org/golang.org/x/mobile/cmd/gobind

基本類型也就是

  • string(不支持string數(shù)組)
  • bool
  • int(java這邊引用的時候會是long)
  • byte[]

傳遞返回值無法傳遞數(shù)組,可以將數(shù)據(jù)轉(zhuǎn)成json格式然后通過string或者byte array傳遞過來团甲,這邊再解析逾冬。最好不要通過for循環(huán)頻繁調(diào)用,因為他們之間的通訊是有代價的躺苦。

配置gomobile的環(huán)境

$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init # it might take a few minutes

最好將目錄$GOPATH/bin加到環(huán)境變量身腻,不然運行g(shù)omobile命令還需要進入到GOPATH/bin目錄下。

如果go get不下來gomobile的話匹厘,可以將鏡像工程:https://github.com/golang/mobileclone到GOPATH/src/golang.org/x目錄下

gomobile init之前需要環(huán)境變量中配置了ndk環(huán)境嘀趟,或者通過ndk標簽指定ndk目錄gomobile init -ndk ~/soft-code/android-ndk-r14b,試過經(jīng)典的android-ndk-r10e會報一個pyton錯誤愈诚。

運行sample測試環(huán)境是否成功

使用android studio導(dǎo)入$GOPATH/src/golang.org/x/mobile/example/bind/android項目她按。

打開hello模塊底下的build.gradle填充里面的目錄

plugins {
    id "org.golang.mobile.bind" version "0.2.13"
}

gobind {
    /* The Go package path; must be under one of the GOPATH elements or
     a relative to the current directory (e.g. ../../hello) */
    pkg = "golang.org/x/mobile/example/bind/hello"

    /* GOPATH where the Go package is; check `go env` */
     GOPATH = "~/go"

    /* Absolute path to the go binary */
     GO = "/usr/local/bin/go"

    /* Optionally, set the absolute path to the gomobile binary if the
    /* gomobile binary is not located in the GOPATH's bin directory. */
//     GOMOBILE = "~/go/src/golang.org/x/mobile"
}
  • 需要修改幾個變量牛隅,一個是GOPATH這個只需要寫自己go env里的gopath就可以。
  • GO目錄酌泰,其實就是go的安裝目錄媒佣,在mac下可以通過命令which go找到對應(yīng)的安裝路徑。
  • 第三個GOMOBILE就是指gomobile可執(zhí)行文件的路徑陵刹,一般是在GOPATH/bin目錄下丈攒。可以不用設(shè)置授霸。(如果gomobile的目錄在GOPATH里)

接下來編譯運行對應(yīng)的安卓工程應(yīng)該就ok了巡验,可以看到他在hello的model里有一個aar文件。

這里主要是將安卓工程和對應(yīng)的go工程通過聯(lián)系起來碘耳,方便開發(fā)显设,而不是每次改動go都需要重新生成aar,然后導(dǎo)入aar辛辨。這里通過這個配置每次編譯運行安卓工程都會自動生成并且更新aar捕捂。

通過命令生成aar

有的時候可能就是想要一個aar,沒必要建一個安卓工程配置各種東西斗搞。
這時候有一個go工程就好了指攒,要把需要提供給外部使用的方法放到一個目錄下,然后對外開放的方法設(shè)置為public的(方法名開頭大寫)僻焚。然后對這個目錄運行gomobile bind命令

gomobile bind -target=android golang.org/x/mobile/example/bind/hello

這個命令會在當前運行的目錄底下生成.aar好source.jar文件
這里的hello就是需要打包的go文件所在的目錄允悦。
需要注意的地方:

  • 后面的目錄寫從GOPATH/src后面開始就可以了,不要寫絕對路徑虑啤。
  • 不要寫到文件名隙弛,寫到文件名上一級的文件夾名稱就可以了。他會把這個文件夾里所有的public方法都對外提供狞山。

可能遇到的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全闷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍启,更是在濱河造成了極大的恐慌总珠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘纯,死亡現(xiàn)場離奇詭異局服,居然都是意外死亡,警方通過查閱死者的電腦和手機屡律,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門腌逢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來降淮,“玉大人超埋,你說我怎么就攤上這事搏讶。” “怎么了霍殴?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵媒惕,是天一觀的道長。 經(jīng)常有香客問我来庭,道長妒蔚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任月弛,我火速辦了婚禮肴盏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帽衙。我一直安慰自己菜皂,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布厉萝。 她就那樣靜靜地躺著恍飘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谴垫。 梳的紋絲不亂的頭發(fā)上章母,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音翩剪,去河邊找鬼乳怎。 笑死,一個胖子當著我的面吹牛前弯,可吹牛的內(nèi)容都是我干的舞肆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼博杖,長吁一口氣:“原來是場噩夢啊……” “哼椿胯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剃根,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哩盲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狈醉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廉油,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年苗傅,在試婚紗的時候發(fā)現(xiàn)自己被綠了抒线。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡渣慕,死狀恐怖嘶炭,靈堂內(nèi)的尸體忽然破棺而出抱慌,到底是詐尸還是另有隱情,我是刑警寧澤眨猎,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布抑进,位于F島的核電站,受9級特大地震影響睡陪,放射性物質(zhì)發(fā)生泄漏寺渗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一兰迫、第九天 我趴在偏房一處隱蔽的房頂上張望信殊。 院中可真熱鬧,春花似錦汁果、人聲如沸鸡号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲸伴。三九已至,卻和暖如春晋控,著一層夾襖步出監(jiān)牢的瞬間汞窗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工赡译, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仲吏,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓蝌焚,卻偏偏與公主長得像裹唆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子只洒,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評論 25 707
  • 用兩張圖告訴你许帐,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,699評論 2 59
  • 一毕谴,環(huán)境搭建 1成畦、安裝Go a. 下載地址為:https://golang.org/dl/ b. 這里下載到的版本...
    殤月123閱讀 5,043評論 0 2
  • 在去年oracle和谷歌的官司告一段落,但是Android開發(fā)者仍急切谷歌能夠想蘋果一樣涝开,開發(fā)自己的編程語言進行A...
    Tenny1225閱讀 6,822評論 3 10
  • 文| 夏喜冬 01 “我的意中人是個蓋世英雄循帐,有一天他會踩著七色云彩來娶我∫ㄎ洌” 曾經(jīng)拄养,《大話西游》中紫霞仙子對至尊...
    夏喜冬閱讀 916評論 4 4