plugins { id 'com.android.application' } def mainSrcDir = projectDir.toString() + "/src/main" task extractVosk { doLast { def voskAar = project.configurations.voskFiles.files.find { it.name.startsWith('vosk-android') } if (voskAar == null) { throw new GradleException("Vosk AAR not found") } def voskHeaderDir = file("$mainSrcDir/jni/vosk/include") def voskLibDir = file("$mainSrcDir/jniLibs/arm64-v8a") voskHeaderDir.mkdirs() voskLibDir.mkdirs() def headerUrl = "https://raw.githubusercontent.com/alphacep/vosk-api/refs/tags/v0.3.50/src/vosk_api.h" def headerFile = new File(voskHeaderDir, "vosk_api.h") headerFile.withOutputStream { out -> new URL(headerUrl).withInputStream { out << it } } def extractDir = file("$buildDir/tmp/extractVosk") delete extractDir extractDir.mkdirs() copy { from zipTree(voskAar) into extractDir include "jni/arm64-v8a/libvosk.so" } def voskSoSource = file("$extractDir/jni/arm64-v8a/libvosk.so") if (voskSoSource.exists()) { copy { from voskSoSource into voskLibDir } } else { throw new GradleException("libvosk.so not found in Vosk AAR") } delete extractDir } } tasks.whenTaskAdded { task -> if (task.name.startsWith('configureCMake')) { task.dependsOn extractVosk } } android { namespace 'com.arslaancodes.mokuassistant' compileSdk 34 defaultConfig { applicationId 'com.arslaancodes.mokuassistant' minSdk 26 targetSdk 34 versionCode 1 versionName '1.0' externalNativeBuild { cmake { cppFlags '' abiFilters 'arm64-v8a' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') } } externalNativeBuild { cmake { path 'src/main/jni/CMakeLists.txt' } } sourceSets { main { java.srcDirs = ['src/main/java'] jni.srcDirs = ['src/main/jni'] jniLibs.srcDirs = ['src/main/jniLibs'] } } } dependencies { implementation 'com.alphacephei:vosk-android:0.3.75' implementation 'androidx.core:core:1.13.1' } configurations { voskFiles { canBeResolved = true canBeConsumed = false extendsFrom implementation } }