forked from extern/Unexpected-Keyboard
657d67d4bf
This allows to add new kinds of keys that need more data without making KeyValue's footprint bigger for common keys. This changes the [_symbol] field into [_payload], which holds the same as the previous field for more common keys but can hold bigger objects for keys of the new "Complex" kind. This also adds a complex key: String keys with a symbol different than the outputted string. Unit tests are added as the Java language is not helpful in making robust code.
200 lines
5.4 KiB
Groovy
200 lines
5.4 KiB
Groovy
plugins {
|
|
id 'com.android.application' version '8.1.1'
|
|
}
|
|
|
|
dependencies {
|
|
testImplementation "junit:junit:4.13.2"
|
|
}
|
|
|
|
android {
|
|
namespace 'juloo.keyboard2'
|
|
compileSdk 34
|
|
|
|
defaultConfig {
|
|
applicationId "juloo.keyboard2"
|
|
minSdk 11
|
|
targetSdkVersion 35
|
|
versionCode 42
|
|
versionName "1.29.1"
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
manifest.srcFile 'AndroidManifest.xml'
|
|
java.srcDirs = ['srcs']
|
|
res.srcDirs = ['res', 'build/generated-resources']
|
|
assets.srcDirs = ['assets']
|
|
}
|
|
|
|
test {
|
|
java.srcDirs = ['test']
|
|
}
|
|
}
|
|
|
|
signingConfigs {
|
|
// Debug builds will always be signed. If no environment variables are set, a default
|
|
// keystore will be initialized by the task initDebugKeystore and used. This keystore
|
|
// can be uploaded to GitHub secrets by following instructions in CONTRIBUTING.md
|
|
// in order to always receive correctly signed debug APKs from the CI.
|
|
debug {
|
|
storeFile(System.env.DEBUG_KEYSTORE ? file(System.env.DEBUG_KEYSTORE) : file("debug.keystore"))
|
|
storePassword(System.env.DEBUG_KEYSTORE_PASSWORD ? "$System.env.DEBUG_KEYSTORE_PASSWORD" : "debug0")
|
|
keyAlias(System.env.DEBUG_KEY_ALIAS ? "$System.env.DEBUG_KEY_ALIAS" : "debug")
|
|
keyPassword(System.env.DEBUG_KEY_PASSWORD ? "$System.env.DEBUG_KEY_PASSWORD" : "debug0")
|
|
}
|
|
|
|
release {
|
|
if (System.env.RELEASE_KEYSTORE) {
|
|
storeFile file(System.env.RELEASE_KEYSTORE)
|
|
storePassword "$System.env.RELEASE_KEYSTORE_PASSWORD"
|
|
keyAlias "$System.env.RELEASE_KEY_ALIAS"
|
|
keyPassword "$System.env.RELEASE_KEY_PASSWORD"
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled true
|
|
shrinkResources true
|
|
debuggable false
|
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
|
|
resValue "string", "app_name", "@string/app_name_release"
|
|
signingConfig signingConfigs.release
|
|
}
|
|
|
|
debug {
|
|
minifyEnabled false
|
|
shrinkResources false
|
|
debuggable true
|
|
applicationIdSuffix ".debug"
|
|
resValue "string", "app_name", "@string/app_name_debug"
|
|
resValue "bool", "debug_logs", "true"
|
|
signingConfig signingConfigs.debug
|
|
}
|
|
}
|
|
|
|
// Name outputs after the application ID.
|
|
android.applicationVariants.all { variant ->
|
|
variant.outputs.all {
|
|
outputFileName = "${applicationId}.apk"
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_7
|
|
targetCompatibility JavaVersion.VERSION_1_7
|
|
}
|
|
|
|
lintOptions {
|
|
// Translation are already checked by 'syncTranslations'
|
|
disable 'MissingTranslation'
|
|
}
|
|
}
|
|
|
|
tasks.register('buildKeyboardFont') {
|
|
println "\nBuilding assets/special_font.ttf"
|
|
mkdir "$buildDir"
|
|
exec {
|
|
workingDir "$projectDir/srcs/special_font"
|
|
def svgFiles = workingDir.listFiles().findAll {
|
|
it.isFile() && it.name.endsWith(".svg")
|
|
}
|
|
commandLine("fontforge", "-lang=ff", "-script", "build.pe", "$buildDir/special_font.ttf", *svgFiles)
|
|
}
|
|
copy {
|
|
from "$buildDir/special_font.ttf"
|
|
into "assets"
|
|
}
|
|
}
|
|
|
|
tasks.register('genEmojis') {
|
|
println "\nGenerating res/raw/emojis.txt"
|
|
exec {
|
|
workingDir = projectDir
|
|
commandLine "python", "gen_emoji.py"
|
|
}
|
|
}
|
|
|
|
tasks.withType(Test).configureEach {
|
|
dependsOn 'genLayoutsList'
|
|
dependsOn 'checkKeyboardLayouts'
|
|
dependsOn 'syncTranslations'
|
|
dependsOn 'compileComposeSequences'
|
|
}
|
|
|
|
tasks.register('genLayoutsList') {
|
|
println "\nGenerating res/values/layouts.xml"
|
|
exec {
|
|
workingDir = projectDir
|
|
commandLine "python", "gen_layouts.py"
|
|
}
|
|
}
|
|
|
|
tasks.register('checkKeyboardLayouts') {
|
|
println "\nChecking layouts"
|
|
exec {
|
|
def layouts = new File(projectDir, "srcs/layouts").listFiles().findAll {
|
|
it.name.endsWith(".xml")
|
|
}
|
|
workingDir = projectDir
|
|
commandLine("python", "check_layout.py", *layouts)
|
|
standardOutput = new FileOutputStream("${projectDir}/check_layout.output")
|
|
}
|
|
}
|
|
|
|
tasks.register('syncTranslations') {
|
|
println "\nUpdating translations"
|
|
exec {
|
|
workingDir = projectDir
|
|
commandLine "python", "sync_translations.py"
|
|
}
|
|
}
|
|
|
|
tasks.register('compileComposeSequences') {
|
|
def out = "srcs/juloo.keyboard2/ComposeKeyData.java"
|
|
println "\nGenerating ${out}"
|
|
exec {
|
|
def sequences = new File(projectDir, "srcs/compose").listFiles().findAll {
|
|
!it.name.endsWith(".py") && !it.name.endsWith(".md")
|
|
}
|
|
workingDir = projectDir
|
|
commandLine("python", "srcs/compose/compile.py", *sequences)
|
|
standardOutput = new FileOutputStream("${projectDir}/${out}")
|
|
}
|
|
}
|
|
|
|
tasks.named("preBuild") {
|
|
dependsOn += "initDebugKeystore"
|
|
dependsOn += "copyRawQwertyUS"
|
|
dependsOn += "copyLayoutDefinitions"
|
|
}
|
|
|
|
tasks.register('initDebugKeystore') {
|
|
if (!file("debug.keystore").exists()) {
|
|
println "Initializing default debug keystore"
|
|
exec {
|
|
// A shell script might be needed if this line requires input from the user
|
|
commandLine "keytool", "-genkeypair", "-dname", "cn=d, ou=e, o=b, c=ug", "-alias", "debug", "-keypass", "debug0", "-keystore", "debug.keystore", "-keyalg", "rsa", "-storepass", "debug0", "-validity", "10000"
|
|
}
|
|
}
|
|
}
|
|
|
|
// latn_qwerty_us is used as a raw resource by the custom layout option.
|
|
tasks.register('copyRawQwertyUS')
|
|
{
|
|
copy {
|
|
from "srcs/layouts/latn_qwerty_us.xml"
|
|
into "build/generated-resources/raw"
|
|
}
|
|
}
|
|
|
|
tasks.register('copyLayoutDefinitions')
|
|
{
|
|
copy {
|
|
from "srcs/layouts"
|
|
include "*.xml"
|
|
into "build/generated-resources/xml"
|
|
}
|
|
}
|