build.gradle.kts (1786B) - raw
1 plugins { 2 alias(libs.plugins.rust.android) 3 alias(libs.plugins.androidLibrary) 4 alias(libs.plugins.kotlinAndroid) 5 } 6 7 val nativeName = rootProject.ext.get("buildHash") 8 9 android { 10 namespace = rootProject.ext["applicationId"].toString() + ".nativelib" 11 compileSdk = 34 12 13 buildToolsVersion = "34.0.0" 14 ndkVersion = System.getenv("ANDROID_NDK_HOME")?.trimEnd('/')?.substringAfterLast("/") ?: "27.1.12297006" 15 16 buildFeatures { 17 buildConfig = true 18 } 19 20 defaultConfig { 21 buildConfigField("String", "NATIVE_NAME", "\"$nativeName\".toString()") 22 minSdk = 28 23 } 24 25 compileOptions { 26 sourceCompatibility = JavaVersion.VERSION_21 27 targetCompatibility = JavaVersion.VERSION_21 28 } 29 30 kotlinOptions { 31 jvmTarget = "21" 32 } 33 } 34 35 cargo { 36 module = "rust" 37 libname = nativeName.toString() 38 targetIncludes = arrayOf("libsnapenhance.so") 39 profile = "release" 40 targets = listOf("arm64", "arm") 41 } 42 43 fun getNativeFiles() = File(projectDir, "build/rustJniLibs/android").listFiles()?.flatMap { abiFolder -> 44 abiFolder.takeIf { it.isDirectory }?.listFiles()?.toList() ?: emptyList() 45 } 46 47 48 val buildAndRename by tasks.registering { 49 dependsOn("cargoBuild") 50 doLast { 51 getNativeFiles()?.forEach { file -> 52 if (file.name.endsWith(".so")) { 53 println("Renaming ${file.absolutePath}") 54 file.renameTo(File(file.parent, "lib$nativeName.so")) 55 } 56 } 57 } 58 } 59 60 val cleanNatives by tasks.registering { 61 finalizedBy(buildAndRename) 62 doFirst { 63 println("Cleaning native files") 64 getNativeFiles()?.forEach { file -> 65 file.deleteRecursively() 66 } 67 } 68 } 69 70 tasks.named("preBuild").configure { 71 dependsOn(cleanNatives) 72 }