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.3' } buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'org.tboox:gradle-xmake-plugin:1.2.3' } 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:assemblesee https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/
$ ./gradlew gradle-xmake-plugin:publishPlugins- Email:waruqi@gmail.com
- Homepage:xmake.io
- Community
- Chat on Reddit
- Chat on Telegram
- Chat on Discord
- Chat on QQ Group: 343118190, 662147501
- Source Code:GitHub, Gitee
- 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]