Introduction (中文)
xmake-gradle is a gradle plugin that integrates xmake seamlessly.
If you want to know more, please refer to:
XMake installed on the system. Available here.
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.2.0'
}
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.tboox:gradle-xmake-plugin:1.2.0'
}
repositories {
mavenCentral()
}
}
apply plugin: "org.tboox.gradle-xmake-plugin"
We add xmake.lua
to projectdir/jni/xmake.lua
and enable xmake in build.gradle.
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
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")
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"
// set the built targets
//targets "xxx", "yyy"
}
}
}
externalNativeBuild {
xmake {
// enable xmake and set xmake.lua project file path
path "jni/xmake.lua"
// enable verbose output (optional), e.g. verbose, 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
}
}
}
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
$ ./gradlew nativelib:xmakeRebuild
$ ./gradlew gradle-xmake-plugin:assemble
see https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/
$ ./gradlew gradle-xmake-plugin:publishPlugins
- Email:waruqi@gmail.com
- Homepage:tboox.org
- Community:/r/tboox on reddit
- ChatRoom:Char on telegram, Chat on gitter
- QQ Group: 343118190(full), 662147501
- Wechat Public: tboox-os
Thank you to all our backers! 🙏 [Become a backer]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]