xmake-gradle
Введение
xmake-gradle — это плагин Gradle, который бесшовно интегрирует xmake.
Если вы хотите узнать больше, пожалуйста, обратитесь к:
Подготовка
Сначала нам нужно установить соответствующий инструмент командной строки xmake. Инструкции по установке см. в разделе «xmake» (https://github.com/xmake-io/xmake).
Применение плагина
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.1.8'
}
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.tboox:gradle-xmake-plugin:1.1.8'
}
repositories {
mavenCentral()
}
}
apply plugin: "org.tboox.gradle-xmake-plugin"
Конфигурация
Пример самой простой конфигурации:
если мы добавим файл xmake.lua
в projectdir/jni/xmake.lua
, то нам нужно только включить соответствующий путь JNI-проекта в build.gradle, чтобы активировать xmake:
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
Структура 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")
Дополнительные настройки Gradle:
android {
defaultConfig {
externalNativeBuild {
xmake {
// Добавляем глобальные флаги компиляции C
cFlags "-DTEST"
// Добавляем глобальные флаги компиляции C++
cppFlags "-DTEST", "-DTEST2"
// Устанавливаем режим сборки, соответствующий настройке `xmake f -m debug` в xmake.lua
buildMode "debug"
// Указываем список ABI для компиляции, поддерживаемые значения: armeabi, armeabi-v7a, arm64-v8a, x86, x86_64
// Если не указано, мы также можем получить список из defaultConfig.ndk.abiFilters
abiFilters "armeabi-v7a", "arm64-v8a"
// Определяем цели для компиляции
// targets "xxx", "yyy"
}
}
}
externalNativeBuild {
xmake {
// Устанавливаем корневой путь файла xmake.lua в проекте JNI, это обязательно, иначе xmake не будет активирован
path "jni/xmake.lua"
// Включаем подробный вывод, отображающий полные параметры командной строки компиляции, другие значения: verbose, normal
logLevel "verbose"
// Указываем библиотеку STL для C++, по умолчанию используется c++_static, другие значения: c++_static/c++_shared, gnustl_static/gnustl_shared, stlport_static/stlport_shared
stl "c++_shared"
// Устанавливаем путь к исполняемому файлу xmake (обычно не требуется)
// program /usr/local/bin/xmake
// Отключаем стандартную библиотеку C++, по умолчанию она включена
// stdcxx false
//
``` ## Компиляция JNI
### Компиляция JNI и генерация APK
После применения плагина `gradle-xmake-plugin` задача `xmakeBuild` автоматически внедряется в существующую задачу `assemble`, выполняя компиляцию и интеграцию библиотеки JNI.
```console
$ ./gradlew app:assembleDebug
> Task :nativelib:xmakeConfigureForArm64
> Task :nativelib:xmakeBuildForArm64
>> xmake build
[ 50%]: компиляция ccache.debug nativelib.cc
[ 75%]: компоновка.debug libnativelib.so
[100%]: сборка прошла успешно!
>> установка артефактов в /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a
> Задача :nativelib:xmakeConfigureForArmv7
> Задача :nativelib:xmakeBuildForArmv7
>> xmake build
[ 50%]: компиляция ccache.debug nativelib.cc
[ 75%]: компоновка.debug libnativelib.so
[100%]: сборка прошла успешно!
>> установка артефактов в /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a
> Задача :nativelib:preBuild
> Задача :nativelib:assemble
> Задача :app:assembleDebug
$ ./gradlew nativelib:xmakeRebuild
$ ./gradlew gradle-xmake-plugin:assemble
См.: https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/
$ ./gradlew gradle-xmake-plugin:publishPlugins
Проект xmake-gradle является личным открытым проектом, его развитие требует вашей поддержки. Если вы хотите поддержать разработку проекта xmake-gradle, вы можете сделать пожертвование, чтобы помочь ему развиваться. 🙏 [Поддержать этот проект]
Спонсирование проекта позволит разместить ваш логотип и ссылку на веб-сайт здесь. [Спонсировать этот проект]
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )