gomobile bind rules for Bazel.
To build Android app, we need the pre-installed Android, and set ANDROID_HOME and ANDROID_NDK_HOME.
For example,
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_NDK_HOME="$HOME/Android/Sdk/ndk-bundle/android-ndk-r21e"If you want one command to install Android SDK and NDK, please check this standalone script: https://github.com/google/mediapipe/blob/master/setup_android_sdk_and_ndk.sh.
We also use the local JDK which is used by bazel too. JAVA_HOME is detected automatically, if you can run bazel directly.
To build Gobind for Android (<Lib>@java) and iOS (<Lib>@objc), and then export respective packages:
aar (<Lib>_aar_import) and xcframwork (<Lib>@objc@xcframework).
# To build all binding files.
bazel build //examples/helloworld:all
# To build HelloLib.aar for Android.
bazel build //examples/helloworld/go:HelloLib_aar_import
# To build HelloLib.xcframework for iOS
bazel build //examples/helloworld/go:HelloLib@objc@xcframework
# Buildable targets:
# //examples/helloworld/go:HelloLib_aar_import
# //examples/helloworld/go:HelloLib@objc@xcframework
# //examples/helloworld/go:HelloLib@objc
# //examples/helloworld/go:HelloLib@java@jar
# //examples/helloworld/go:HelloLib@java@aar
# //examples/helloworld/go:HelloLib@java
# //examples/helloworld/go:HelloLib@gopathTo build the Android app directly, use:
# To build Android app.
bazel build //examples/helloworld/android:app
# Install apk via adb.
adb install bazel-bin/examples/helloworld/android/app.apkThe code is ported from https://github.com/znly/rules_gomobile. Since the repo hasn't been updated for 2 years and used old Golang and bazel (1.2.1) versions, we couldn't make it work initially.
Now the repo has been refactored at large scale.
- Changed the Go generator from command
gobindtogomobilefor Android/iOS. (See pkg: https://pkg.go.dev/golang.org/x/mobile/cmd/gomobile for details) - Used
gazelleto manage Go packages. - Simplified rules.