aboutsummaryrefslogtreecommitdiff
path: root/app/build.gradle
blob: 6ea99c0893f6cce5d20f3a84e73e42111a9d17ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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
	}
}