| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.2.2'
    }
}
plugins {
    id 'org.gradle.crypto.checksum' version '1.4.0'
}
import org.gradle.crypto.checksum.Checksum
apply plugin: 'com.android.application'
repositories {
    google()
    mavenCentral()
}
dependencies {
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'org.hamcrest:hamcrest-all:1.3'
}
android {
    compileSdk 34
    buildToolsVersion "34.0.0"
    ndkVersion "26.1.10909125"
    namespace "com.reecedunn.espeak"
    buildFeatures {
        buildConfig = true
    }
    defaultConfig {
        minSdk 21
        targetSdk 33
        versionCode 22
        versionName "1.52.0"
        externalNativeBuild {
            cmake {
                arguments "-DUSE_ASYNC:BOOL=OFF", "-DUSE_MBROLA:BOOL=OFF"
                targets "ttsespeak", "espeak-data"
            }
        }
    }
    externalNativeBuild {
        cmake {
            path "jni/CMakeLists.txt"
            version "3.22.1"
        }
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            res.srcDirs = ['res']
        }
        androidTest.setRoot('eSpeakTests')
        androidTest {
            java.srcDirs = ['eSpeakTests/src']
        }
    }
    lint {
        abortOnError false
    }
}
tasks.register('checkData') {
    doFirst {
        assert file("../espeak-ng-data/en_dict").exists()
        assert file("../espeak-ng-data/intonations").exists()
        assert file("../espeak-ng-data/phondata").exists()
        assert file("../espeak-ng-data/phondata-manifest").exists()
        assert file("../espeak-ng-data/phonindex").exists()
        assert file("../espeak-ng-data/phontab").exists()
    }
}
tasks.register('createDataArchive', Zip) {
    preserveFileTimestamps = false
    reproducibleFileOrder = true
    archiveFileName = "espeakdata.zip"
    destinationDirectory = file("res/raw")
    from("build/generated/espeak-ng-data/") {
        into "espeak-ng-data"
    }
}
tasks.register('createDataHash', Checksum) {
    dependsOn tasks.createDataArchive
    checksumAlgorithm.set(Checksum.Algorithm.SHA256)
    inputFiles.setFrom(file("./res/raw/espeakdata.zip"))
    outputDirectory.set(layout.buildDirectory.dir('intermediates/datahash'))
}
tasks.register('createDataVersion', Copy) {
    dependsOn tasks.createDataHash
    from layout.buildDirectory.file('intermediates/datahash/espeakdata.zip.sha256')
    rename { return 'espeakdata_version' }
    into file("./res/raw")
}
tasks.whenTaskAdded { task ->
    if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
        task.dependsOn createDataVersion
    }
}
createDataVersion.mustRunAfter 'externalNativeBuildDebug'
createDataVersion.mustRunAfter 'externalNativeBuildRelease'
project.afterEvaluate {
    tasks.checkData.dependsOn(externalNativeBuildDebug)
    tasks.createDataArchive.dependsOn(externalNativeBuildDebug)
    tasks.named('mapDebugSourceSetPaths') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
    tasks.named('mergeDebugResources') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
    tasks.named('packageDebugResources') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
    tasks.named('mapReleaseSourceSetPaths') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
    tasks.named('mergeReleaseResources') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
    tasks.named('packageReleaseResources') {
        dependsOn ':createDataVersion', ':createDataArchive'
    }
}
 |