Introduccion
xmake-gradle es un complemento de gradle que integra perfectamente xmake.
En la actualidad, hay dos formas de hacer un desarrollo integrado de Android Jni en Gradle, soportado por ndkBuild o CMake, Gradle también tiene integración integrada de estas dos herramientas
Sin embargo, mantener Android.mk sigue siendo muy tedioso, especialmente para proyectos grandes, y la sintaxis dsl de cmake no es simple e intuitiva, y personalmente no me gusta mucho. Por lo tanto, utilicé xmake para implementar el desarrollo multiplataforma. Es simple, rápido, amigable para los principiantes, y también es muy poderoso. Puede ir a la página de inicio del proyecto xmake para ver la introducción.
Pero antes de que quiera usar xmake para compilar la biblioteca de Android, solo puedo usar la línea de comando, como:
xmake f -p android --ndk=xxxx
xmake
Aunque es muy simple, pero si desea empaquetar e integrarse con Android apk / aar, aún necesita mucho trabajo adicional. Con el fin de mejorar la eficiencia de los desarrolladores, recientemente reorganicé este complemento de Gradle para integrarlo sin problemas en toda la construcción de Gradle Sistema.
De esta manera, los usuarios pueden usar fácilmente xmake para compilar la biblioteca jni en el estudio de Android, y la integración automática.
Además, la configuración de gradle relacionada es básicamente la misma que cmake y ndkbuild, la mayoría de ellas son compatibles, y el costo de cambio también se reducirá mucho.
Todos pueden probarlo, el complemento recientemente lanzado. Si desea obtener más información, consulte:
Preparación
Primero debemos instalar la herramienta de línea de comandos xmake correspondiente. Para obtener instrucciones de instalación, consulte: xmake .
Complemento de aplicación
Integración mediante plug-in DSL
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.0.6'
}
Método de integración de complemento abandonado
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.tboox:gradle-xmake-plugin:1.0.6'
}
repositories {
mavenCentral()
}
}
apply plugin: "org.tboox.gradle-xmake-plugin"
Configuracion
El ejemplo de configuración más simple.
Si le agregamos xmake.lua
archivos projectdir/jni/xmake.lua
, entonces solo necesitamos habilitar la ruta del proyecto JNI correspondiente especificada en xmake especificada en build.gradle.
build.gradle
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
JNI
Estructura de ingeniería JNI
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")
Más instrucciones de configuración de Gradle
android {
defaultConfig {
externalNativeBuild {
xmake {
// 追加设置全局 c 编译 flags
cFlags "-DTEST"
// 追加设置全局 c++编译 flags
cppFlags "-DTEST", "-DTEST2"
// 设置切换编译模式,与`xmake f -m debug`的配置对应,具体模式值根据自己的 xmake.lua 设置而定
buildMode "debug"
// 设置需要编译的 abi 列表,支持:armeabi, armeabi-v7a, arm64-v8a, x86, x86_64
// 如果没有设置的话,我们也支持从 defaultConfig.ndk.abiFilters 中获取 abiFilters
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
externalNativeBuild {
xmake {
// 设置 jni 工程中 xmake.lua 根文件路径,这是必须的,不设置就不会启用 jni 编译
path "jni/xmake.lua"
// 启用详细输出,会显示完整编译命令行参数,其他值:verbose, warning, normal
logLevel "verbose"
// 指定 c++ stl 库,默认不指定会使用 c++_static,其他值:c++_static/c++_shared, gnustl_static/gnustl_shared, stlport_static/stlport_shared
stl "c++_shared"
// 设置 xmake 可执行程序路径(通常不用设置)
// program /usr/local/bin/xmake
// 禁用 stdc++库,默认是启用的
// stdcxx false
// 设置其他指定的 ndk 目录路径 (这是可选的,默认 xmake 会自动从$ANDROID_NDK_HOME 或者`~/Library/Android/sdk/ndk-bundle`中检测)
// 当然如果用户通过`xmake g --ndk=xxx`配置了全局设置,也会自动从这个里面检测
// ndk "/Users/ruki/files/android-ndk-r20b/"
// 设置 ndk 中 sdk 版本
// sdkver 21
}
}
}
Compilar JNI
Compila JNI y genera APK
Cuando gradle-xmake-plugin
se aplica el complemento, la xmakeBuild
tarea se inyectará automáticamente en la assemble
tarea existente , y la compilación e integración de la biblioteca jni se realizará automáticamente.
$ ./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
Reconstrucción forzada de JNI
$ ./gradlew nativelib:xmakeRebuild