SnapEnhance/native/build.gradle.kts
2024-08-11 16:05:07 +02:00

73 lines
1.7 KiB
Plaintext

plugins {
alias(libs.plugins.rust.android)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.kotlinAndroid)
}
val nativeName = rootProject.ext.get("buildHash")
android {
namespace = rootProject.ext["applicationId"].toString() + ".nativelib"
compileSdk = 34
buildToolsVersion = "34.0.0"
ndkVersion = "26.3.11579264"
buildFeatures {
buildConfig = true
}
defaultConfig {
buildConfigField("String", "NATIVE_NAME", "\"$nativeName\".toString()")
minSdk = 28
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlinOptions {
jvmTarget = "21"
}
}
cargo {
module = "rust"
libname = nativeName.toString()
targetIncludes = arrayOf("libsnapenhance.so")
profile = "release"
targets = listOf("arm64", "arm")
}
fun getNativeFiles() = File(projectDir, "build/rustJniLibs/android").listFiles()?.flatMap { abiFolder ->
abiFolder.takeIf { it.isDirectory }?.listFiles()?.toList() ?: emptyList()
}
val buildAndRename by tasks.registering {
dependsOn("cargoBuild")
doLast {
getNativeFiles()?.forEach { file ->
if (file.name.endsWith(".so")) {
println("Renaming ${file.absolutePath}")
file.renameTo(File(file.parent, "lib$nativeName.so"))
}
}
}
}
val cleanNatives by tasks.registering {
finalizedBy(buildAndRename)
doFirst {
println("Cleaning native files")
getNativeFiles()?.forEach { file ->
file.deleteRecursively()
}
}
}
tasks.named("preBuild").configure {
dependsOn(cleanNatives)
}