-
Notifications
You must be signed in to change notification settings - Fork 15
/
build.gradle
120 lines (95 loc) · 4.03 KB
/
build.gradle
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
111
112
113
114
115
116
117
118
119
120
import com.vanniktech.maven.publish.AndroidSingleVariantLibrary
import com.vanniktech.maven.publish.SonatypeHost
plugins {
alias libs.plugins.androidLibrary
alias libs.plugins.jetbrainsKotlinAndroid
alias libs.plugins.cargo.ndk
alias libs.plugins.ktfmt
alias libs.plugins.mavenPublish
}
android {
namespace 'com.stadiamaps.ferrostar.core'
compileSdk 34
ndkVersion "26.2.11394342"
defaultConfig {
minSdk 25
targetSdk 34
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
// For as long as we support API 25; once we can raise support to 26, all is fine
coreLibraryDesugaring libs.desugar.jdk.libs
implementation libs.androidx.ktx
implementation libs.androidx.appcompat
implementation libs.kotlinx.coroutines
implementation libs.kotlinx.datetime
implementation libs.androidx.lifecycle.viewmodel.ktx
implementation(platform(libs.okhttp.bom))
implementation(libs.okhttp.core)
implementation libs.moshi
// TODO: Migrate version to TOML (doesn't work). Likely related issue: https://github.com/gradle/gradle/issues/21267
//noinspection UseTomlInstead
implementation 'net.java.dev.jna:jna:5.14.0@aar'
testImplementation libs.junit
// These probably shouldn't have to be androidTestImplementation... see rant in
// ValhallaCoreTest.kt
androidTestImplementation libs.okhttp.mock
androidTestImplementation libs.kotlinx.coroutines.test
androidTestImplementation libs.androidx.test.junit
androidTestImplementation libs.androidx.test.espresso
}
cargoNdk {
module = "../common" // Directory containing Cargo.toml
librariesNames = ["libferrostar.so"]
extraCargoBuildArguments = ["-p", "ferrostar"]
}
android.libraryVariants.all { variant ->
def bDir = layout.buildDirectory.dir("generated/source/uniffi/${variant.name}/java").get()
def generateBindings = tasks.register("generate${variant.name.capitalize()}UniFFIBindings", Exec) {
workingDir '../../common'
commandLine 'cargo', 'run', '-p', 'uniffi-bindgen', 'generate', '--library', '../android/core/src/main/jniLibs/arm64-v8a/libferrostar.so', '--language', 'kotlin', '--out-dir', bDir
dependsOn "buildCargoNdk${variant.name.capitalize()}"
}
variant.javaCompileProvider.get().dependsOn(generateBindings)
// Some stuff here is broken, since Android Tests don't run after running gradle build,
// but do otherwise. Also CI is funky.
tasks.named("compile${variant.name.capitalize()}Kotlin").configure {
dependsOn generateBindings
}
tasks.named("connectedDebugAndroidTest").configure {
dependsOn generateBindings
}
def sourceSet = variant.sourceSets.find { it.name == variant.name }
sourceSet.java.srcDir layout.buildDirectory.file("generated/source/uniffi/${variant.name}/java")
// UniFFI tutorial notes that they made several attempts like this but were unsuccessful coming
// to a good solution for forcing the directory to be marked as generated (short of checking in
// project files, I suppose).
// idea.module.generatedSourceDirs += file("${buildDir}/generated/source/uniffi/${variant.name}/java/uniffi")
}
mavenPublishing {
publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
signAllPublications()
configure(new AndroidSingleVariantLibrary("release", true, true))
apply from: "${rootProject.projectDir}/common-pom.gradle"
pom {
name = "Ferrostar Core"
description = "Core libray, models, and navigation business logic for Ferrostar"
commonPomConfig(it)
}
}