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 }