diff options
Diffstat (limited to 'app/build.gradle')
| -rw-r--r-- | app/build.gradle | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/app/build.gradle b/app/build.gradle index bc9ec9b..b397685 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,59 @@ 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 @@ -28,10 +81,6 @@ android { } } - buildFeatures { - prefab true - } - externalNativeBuild { cmake { path 'src/main/jni/CMakeLists.txt' @@ -48,3 +97,11 @@ android { dependencies { implementation 'com.alphacephei:vosk-android:0.3.75' } + +configurations { + voskFiles { + canBeResolved = true + canBeConsumed = false + extendsFrom implementation + } +} |
