A gradle plugin that integrates xmake seamlessly
source link: https://github.com/xmake-io/xmake-gradle
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
xmake-gradle
A gradle plugin that integrates xmake seamlessly
Introduction ( 中文 )
xmake-gradle is a gradle plugin that integrates xmake seamlessly.
If you want to know more, please refer to:
Prerequisites
XMake installed on the system. Available here .
Apply the plugin
plugins DSL
plugins { id 'org.tboox.gradle-xmake-plugin' version '1.0.7' }
Legacy plugin application
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'org.tboox:gradle-xmake-plugin:1.0.7' } repositories { mavenCentral() } } apply plugin: "org.tboox.gradle-xmake-plugin"
Configuation
Simplest Example
We add xmake.lua
to projectdir/jni/xmake.lua
and enable xmake in build.gradle.
build.gradle
android { externalNativeBuild { xmake { path "jni/xmake.lua" } } }
JNI
The JNI project structure:
projectdir - src - main - java - jni - xmake.lua - *.cpp
xmake.lua:
add_rules("mode.debug", "mode.release") target("nativelib") set_kind("shared") add_files("nativelib.cc")
More Gradle Configuations
android { defaultConfig { externalNativeBuild { xmake { // append the global cflags (optional) cFlags "-DTEST" // append the global cppflags (optional) cppFlags "-DTEST", "-DTEST2" // switch the build mode to `debug` for `xmake f -m debug` (optional) buildMode "debug" // set abi filters (optional), e.g. armeabi, armeabi-v7a, arm64-v8a, x86, x86_64 // we can also get abiFilters from defaultConfig.ndk.abiFilters abiFilters "armeabi-v7a", "arm64-v8a" } } } externalNativeBuild { xmake { // enable xmake and set xmake.lua project file path path "jni/xmake.lua" // enable verbose output (optional), e.g. verbose, warning, normal logLevel "verbose" // set c++stl (optional), e.g. c++_static/c++_shared, gnustl_static/gnustl_shared, stlport_static/stlport_shared stl "c++_shared" // set the given xmake program path (optional) // program /usr/local/bin/xmake // disable stdc++ library (optional) // stdcxx false // set the given ndk directory path (optional) // ndk "/Users/ruki/files/android-ndk-r20b/" // set sdk version of ndk (optional) // sdkver 21 } } }
Build
Build JNI and generate apk
The xmakeBuild
will be injected to assemble
task automatically if the gradle-xmake-plugin has been applied.
$ ./gradlew app:assembleDebug > Task :nativelib:xmakeConfigureForArm64 > Task :nativelib:xmakeBuildForArm64 >> xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! >> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a > Task :nativelib:xmakeConfigureForArmv7 > Task :nativelib:xmakeBuildForArmv7 >> xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! >> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a > Task :nativelib:preBuild > Task :nativelib:assemble > Task :app:assembleDebug
Force to rebuild JNI
$ ./gradlew nativelib:xmakeRebuild
Development
Build Plugins
$ ./gradlew gradle-xmake-plugin:assemble
Publish Plugins
see https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/
$ ./gradlew gradle-xmake-plugin:publishPlugins
Contacts
- Email: [email protected]
- Homepage: tboox.org
- Community: /r/tboox on reddit
- ChatRoom: Char on telegram , Chat on gitter
- QQ Group: 343118190(full), 662147501
- Wechat Public: tboox-os
Backers
Thank you to all our backers! :pray: [ Become a backer ]
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [ Become a sponsor ]
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK