java调用go动态库_golang开发android应用(二) - go语言生成android动态库

本文介绍了如何使用gomobile bind生成Android动态库,并探讨了包名与类名相同的冲突问题。通过指定目标平台可以减小生成的AAR文件大小,但需要注意当前版本的gomobile不支持包名与类名相同的情况,这可能导致生成的类被覆盖。
摘要由CSDN通过智能技术生成

gomobile的两个有用参数,bind 生成动态库,build 生成apk

生成android动态库

gomobile bind -target=android github.com/dearcode/candy/server/android生成文件candy.aar,先查看下大小:

du -sh candy.aar

13M candy.aar巨大,13MB,本来想压缩下,发现这aar本身就是压缩过的,生成后的文件大小本身与代码有关,我用的是项目中的代码,如果按官方的测试代码生成的文件只有2MB

file candy.aar

candy.aar: Zip archive data, at least v2.0 to extract

指定运行平台

gomobile默认会生成四个平台arm, arm64, 386, amd64,你也可以指定平台,例:

gomobile bind -target=android/arm github.com/dearcode/candy/server/android这样生成的文件就相当小了,,,

du -sh candy.aar

3.0M candy.aar

package与struct同名问题

目前gomobile版本,包名不能与类名相同,如相同,则先最生根据包名生成的类文件的会被覆盖:

gomobile bind -v -target=android github.com/dearcode/candy/server/android

github.com/dearcode/candy/server/android

write /tmp/gomobile-work-063666765/fakegopath/pkg/android_arm64/github.com/dearcode/candy/server/android.a

write /tmp/gomobile-work-063666765/gomobile_bind/go_candymain.go

write /tmp/gomobile-work-063666765/gomobile_bind/go_main.go

write /tmp/gomobile-work-063666765/androidlib/main.go

write /tmp/gomobile-work-063666765/android/src/main/java/go/candy/Candy.java

write /tmp/gomobile-work-063666765/android/src/main/java/go/candy/Candy.java

write /tmp/gomobile-work-063666765/gomobile_bind/java_candy.c

write /tmp/gomobile-work-063666765/gomobile_bind/candy.h

write /tmp/gomobile-work-063666765/android/src/main/java/go/Universe.java

write /tmp/gomobile-work-063666765/android/src/main/java/go/error.java

write /tmp/gomobile-work-063666765/gomobile_bind/java_universe.c

write /tmp/gomobile-work-063666765/gomobile_bind/universe.h

write /tmp/gomobile-work-063666765/gomobile_bind/seq_android.go

write /tmp/gomobile-work-063666765/gomobile_bind/seq_android.c

write /tmp/gomobile-work-063666765/gomobile_bind/seq.h

write /tmp/gomobile-work-063666765/gomobile_bind/seq.go

write /tmp/gomobile-work-981501834/gomobile_bind/seq.go

具体源码在这里:

https://github.com/golang/mobile/blob/master/cmd/gomobile/bind.go#L255

在GenJava时会生成包名对应的类,但在GenClass的时候,分根据golang里的struct名生成新的类,此时如果有相同,则会被struct生成的类覆盖。

有疑问加站长微信联系(非本文作者)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值