aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-08-16 17:20:52 +1200
committerArslaan Pathan <[email protected]>2026-08-16 17:20:52 +1200
commit4cd0d7b22d068f86233c6e349de76e55962ce805 (patch)
tree5747aa8870949578e2282facf8c01c59670157f8
parentcca2765ee64df3247f32ca0d7eb07ed5a7ad868a (diff)
downloadmoku-assistant-4cd0d7b22d068f86233c6e349de76e55962ce805.tar.xz
moku-assistant-4cd0d7b22d068f86233c6e349de76e55962ce805.zip
[chore/migrate-cmake] add tasks to extract vosk and fix cmake configurations
-rw-r--r--.gitignore2
-rw-r--r--app/build.gradle65
2 files changed, 63 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 3377c1a..5cba561 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,8 @@ vosk/
tmp/
app/build/
app/.cxx/
+app/src/main/jni/vosk
+app/src/main/jniLibs
.gradle/
gradle-cache/
android-cache/
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
+ }
+}