Merge pull request #585 from seedvault-app/feature/kotlin-gradle-build-scripts
Switch to Kotlin build scripts + version catalog
This commit is contained in:
commit
6ce2e27a99
16 changed files with 702 additions and 692 deletions
243
app/build.gradle
243
app/build.gradle
|
@ -1,243 +0,0 @@
|
|||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'org.jlleitschuh.gradle.ktlint'
|
||||
}
|
||||
|
||||
def gitDescribe = { ->
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine 'git', 'describe', '--always', '--tags', '--dirty=-dirty'
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString().trim()
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.stevesoltys.seedvault'
|
||||
compileSdk rootProject.ext.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
minSdk rootProject.ext.minSdk
|
||||
targetSdk rootProject.ext.targetSdk
|
||||
versionNameSuffix "-$gitDescribe"
|
||||
testInstrumentationRunner "com.stevesoltys.seedvault.KoinInstrumentationTestRunner"
|
||||
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
||||
|
||||
if (project.hasProperty('instrumented_test_size')) {
|
||||
final testSize = project.getProperty('instrumented_test_size')
|
||||
println("Instrumented test size: $testSize")
|
||||
|
||||
testInstrumentationRunnerArguments size: testSize
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
}
|
||||
}
|
||||
|
||||
lint {
|
||||
disable "DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult",
|
||||
"CheckedExceptions"
|
||||
abortOnError true
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
languageVersion = "1.8"
|
||||
}
|
||||
packagingOptions {
|
||||
exclude("META-INF/LICENSE.md")
|
||||
exclude("META-INF/LICENSE-notice.md")
|
||||
}
|
||||
testOptions {
|
||||
unitTests.all {
|
||||
useJUnitPlatform()
|
||||
testLogging {
|
||||
events "passed", "skipped", "failed"
|
||||
}
|
||||
}
|
||||
unitTests {
|
||||
includeAndroidResources = true
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
test {
|
||||
java.srcDirs += "$projectDir/src/sharedTest/java"
|
||||
}
|
||||
androidTest {
|
||||
java.srcDirs += "$projectDir/src/sharedTest/java"
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
aosp {
|
||||
// Generated from the AOSP platform key:
|
||||
// https://android.googlesource.com/platform/build/+/refs/tags/android-11.0.0_r29/target/product/security/platform.pk8
|
||||
keyAlias "platform"
|
||||
keyPassword "platform"
|
||||
storeFile file("development/platform.jks")
|
||||
storePassword "platform"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes.release.signingConfig = signingConfigs.aosp
|
||||
buildTypes.debug.signingConfig = signingConfigs.aosp
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly rootProject.ext.aosp_libs
|
||||
|
||||
/**
|
||||
* Dependencies in AOSP
|
||||
*
|
||||
* We try to keep the dependencies in sync with what AOSP ships as Seedvault is meant to be built
|
||||
* with the AOSP build system and gradle builds are just for more pleasant development.
|
||||
* Using the AOSP versions in gradle builds allows us to spot issues early on.
|
||||
*/
|
||||
implementation rootProject.ext.kotlin_libs.std
|
||||
// These coroutine libraries get upgraded otherwise to versions incompatible with kotlin version
|
||||
implementation rootProject.ext.kotlin_libs.coroutines
|
||||
|
||||
implementation rootProject.ext.std_libs.androidx_core
|
||||
// A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
|
||||
implementation rootProject.ext.std_libs.androidx_fragment
|
||||
implementation rootProject.ext.std_libs.androidx_activity
|
||||
implementation rootProject.ext.std_libs.androidx_preference
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_viewmodel_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_livedata_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_constraintlayout
|
||||
implementation rootProject.ext.std_libs.androidx_documentfile
|
||||
implementation rootProject.ext.std_libs.com_google_android_material
|
||||
|
||||
implementation rootProject.ext.storage_libs.com_google_crypto_tink_android
|
||||
|
||||
/**
|
||||
* Storage Dependencies
|
||||
*/
|
||||
implementation project(':storage:lib')
|
||||
|
||||
/**
|
||||
* External Dependencies
|
||||
*
|
||||
* If the dependencies below are updated,
|
||||
* please make sure to update the prebuilt libraries and the Android.bp files
|
||||
* in the top-level `libs` folder to reflect that.
|
||||
* You can copy these libraries from ~/.gradle/caches/modules-2/files-2.1
|
||||
*/
|
||||
// later versions than 2.1.1 require newer kotlin version
|
||||
// implementation "io.insert-koin:koin-core-jvm:3.2.0"
|
||||
// implementation "io.insert-koin:koin-android:3.2.0"
|
||||
implementation fileTree(include: ['*.jar'], dir: "${rootProject.rootDir}/libs/koin-android")
|
||||
implementation fileTree(include: ['*.aar'], dir: "${rootProject.rootDir}/libs/koin-android")
|
||||
|
||||
// implementation "cash.z.ecc.android:kotlin-bip39:1.0.6"
|
||||
implementation fileTree(include: ['kotlin-bip39-jvm-1.0.6.jar'], dir: "${rootProject.rootDir}/libs")
|
||||
|
||||
/**
|
||||
* Test Dependencies (do not concern the AOSP build)
|
||||
*/
|
||||
lintChecks rootProject.ext.lint_libs.exceptions
|
||||
|
||||
// anything less than 'implementation' fails tests run with gradlew
|
||||
testImplementation rootProject.ext.aosp_libs
|
||||
testImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
testImplementation('org.robolectric:robolectric:4.10.3')
|
||||
testImplementation 'org.hamcrest:hamcrest:2.2'
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit5_version"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-params:$junit5_version"
|
||||
testImplementation "io.mockk:mockk:$mockk_version"
|
||||
testImplementation 'org.bitcoinj:bitcoinj-core:0.16.2'
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit5_version"
|
||||
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit5_version"
|
||||
|
||||
androidTestImplementation rootProject.ext.aosp_libs
|
||||
androidTestImplementation 'androidx.test:runner:1.4.0'
|
||||
androidTestImplementation 'androidx.test:rules:1.4.0'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||
androidTestImplementation "io.mockk:mockk-android:1.13.8"
|
||||
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
|
||||
}
|
||||
|
||||
apply from: "${rootProject.rootDir}/gradle/ktlint.gradle"
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs.add('-Xbootclasspath/p:app/libs/android.jar:app/libs/libcore.jar')
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(Test).configureEach {
|
||||
testLogging {
|
||||
showExceptions true
|
||||
showCauses true
|
||||
showStackTraces true
|
||||
|
||||
exceptionFormat = 'full'
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
all {
|
||||
resolutionStrategy {
|
||||
failOnNonReproducibleResolution()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('provisionEmulator', Exec) {
|
||||
group("emulator")
|
||||
|
||||
dependsOn(tasks.assembleRelease)
|
||||
|
||||
doFirst {
|
||||
commandLine "${project.projectDir}/development/scripts/provision_emulator.sh",
|
||||
"seedvault",
|
||||
"system-images;android-34;default;x86_64"
|
||||
|
||||
environment "ANDROID_HOME", android.sdkDirectory.absolutePath
|
||||
environment "JAVA_HOME", System.properties['java.home']
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('startEmulator', Exec) {
|
||||
group("emulator")
|
||||
|
||||
doFirst {
|
||||
commandLine "${project.projectDir}/development/scripts/start_emulator.sh", "seedvault"
|
||||
|
||||
environment "ANDROID_HOME", android.sdkDirectory.absolutePath
|
||||
environment "JAVA_HOME", System.properties['java.home']
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('installEmulatorRelease', Exec) {
|
||||
group("emulator")
|
||||
|
||||
dependsOn(tasks.assembleRelease)
|
||||
|
||||
doFirst {
|
||||
commandLine "${project.projectDir}/development/scripts/install_app.sh"
|
||||
|
||||
environment "ANDROID_HOME", android.sdkDirectory.absolutePath
|
||||
environment "JAVA_HOME", System.properties['java.home']
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('clearEmulatorAppData', Exec) {
|
||||
group("emulator")
|
||||
|
||||
doFirst {
|
||||
commandLine "${project.projectDir}/development/scripts/clear_app_data.sh"
|
||||
|
||||
environment "ANDROID_HOME", android.sdkDirectory.absolutePath
|
||||
environment "JAVA_HOME", System.properties['java.home']
|
||||
}
|
||||
}
|
256
app/build.gradle.kts
Normal file
256
app/build.gradle.kts
Normal file
|
@ -0,0 +1,256 @@
|
|||
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
||||
import java.io.ByteArrayOutputStream
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
kotlin("android")
|
||||
}
|
||||
|
||||
val gitDescribe = {
|
||||
val stdout = ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine("git", "describe", "--always", "--tags", "--dirty=-dirty")
|
||||
standardOutput = stdout
|
||||
}
|
||||
stdout.toString().trim()
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.stevesoltys.seedvault"
|
||||
compileSdk = libs.versions.compileSdk.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
minSdk = libs.versions.minSdk.get().toInt()
|
||||
targetSdk = libs.versions.targetSdk.get().toInt()
|
||||
versionNameSuffix = "-${gitDescribe()}"
|
||||
testInstrumentationRunner = "com.stevesoltys.seedvault.KoinInstrumentationTestRunner"
|
||||
testInstrumentationRunnerArguments(mapOf("disableAnalytics" to "true"))
|
||||
|
||||
if (project.hasProperty("instrumented_test_size")) {
|
||||
val testSize = project.property("instrumented_test_size").toString()
|
||||
println("Instrumented test size: $testSize")
|
||||
|
||||
testInstrumentationRunnerArguments(mapOf("size" to testSize))
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
create("aosp") {
|
||||
// Generated from the AOSP platform key:
|
||||
// https://android.googlesource.com/platform/build/+/refs/tags/android-11.0.0_r29/target/product/security/platform.pk8
|
||||
keyAlias = "platform"
|
||||
keyPassword = "platform"
|
||||
storeFile = file("development/platform.jks")
|
||||
storePassword = "platform"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
all {
|
||||
isMinifyEnabled = false
|
||||
}
|
||||
|
||||
getByName("release").signingConfig = signingConfigs.getByName("aosp")
|
||||
getByName("debug").signingConfig = signingConfigs.getByName("aosp")
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
languageVersion = "1.8"
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude("META-INF/LICENSE.md")
|
||||
exclude("META-INF/LICENSE-notice.md")
|
||||
}
|
||||
|
||||
testOptions.unitTests {
|
||||
all { it.useJUnitPlatform() }
|
||||
|
||||
isIncludeAndroidResources = true
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
named("test") {
|
||||
java.srcDirs("$projectDir/src/sharedTest/java")
|
||||
}
|
||||
named("androidTest") {
|
||||
java.srcDirs("$projectDir/src/sharedTest/java")
|
||||
}
|
||||
}
|
||||
|
||||
lint {
|
||||
abortOnError = true
|
||||
|
||||
disable.clear()
|
||||
disable += setOf(
|
||||
"DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult",
|
||||
"CheckedExceptions"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
val aospLibs = fileTree("$projectDir/libs") {
|
||||
// For more information about this module:
|
||||
// https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-11.0.0_r3/Android.bp#507
|
||||
// framework_intermediates/classes-header.jar works for gradle build as well,
|
||||
// but not unit tests, so we use the actual classes (without updatable modules).
|
||||
//
|
||||
// out/target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates/classes.jar
|
||||
include("android.jar")
|
||||
// out/target/common/obj/JAVA_LIBRARIES/core-libart.com.android.art_intermediates/classes.jar
|
||||
include("libcore.jar")
|
||||
}
|
||||
|
||||
compileOnly(aospLibs)
|
||||
|
||||
/**
|
||||
* Dependencies in AOSP
|
||||
*
|
||||
* We try to keep the dependencies in sync with what AOSP ships as Seedvault is meant to be built
|
||||
* with the AOSP build system and gradle builds are just for more pleasant development.
|
||||
* Using the AOSP versions in gradle builds allows us to spot issues early on.
|
||||
*/
|
||||
implementation(libs.bundles.kotlin)
|
||||
// These coroutine libraries get upgraded otherwise to versions incompatible with kotlin version
|
||||
implementation(libs.bundles.coroutines)
|
||||
|
||||
implementation(libs.androidx.core)
|
||||
// A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
|
||||
implementation(libs.androidx.fragment)
|
||||
implementation(libs.androidx.activity)
|
||||
implementation(libs.androidx.preference)
|
||||
implementation(libs.androidx.lifecycle.viewmodel.ktx)
|
||||
implementation(libs.androidx.lifecycle.livedata.ktx)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.androidx.documentfile)
|
||||
implementation(libs.google.material)
|
||||
|
||||
implementation(libs.google.tink.android)
|
||||
|
||||
/**
|
||||
* Storage Dependencies
|
||||
*/
|
||||
implementation(project(":storage:lib"))
|
||||
|
||||
/**
|
||||
* External Dependencies
|
||||
*
|
||||
* If the dependencies below are updated,
|
||||
* please make sure to update the prebuilt libraries and the Android.bp files
|
||||
* in the top-level `libs` folder to reflect that.
|
||||
* You can copy these libraries from ~/.gradle/caches/modules-2/files-2.1
|
||||
*/
|
||||
// later versions than 2.1.1 require newer kotlin version
|
||||
implementation(fileTree("${rootProject.rootDir}/libs/koin-android").include("*.jar"))
|
||||
implementation(fileTree("${rootProject.rootDir}/libs/koin-android").include("*.aar"))
|
||||
|
||||
implementation(fileTree("${rootProject.rootDir}/libs").include("kotlin-bip39-jvm-1.0.6.jar"))
|
||||
|
||||
/**
|
||||
* Test Dependencies (do not concern the AOSP build)
|
||||
*/
|
||||
lintChecks(libs.thirdegg.lint.rules)
|
||||
|
||||
// anything less than 'implementation' fails tests run with gradlew
|
||||
testImplementation(aospLibs)
|
||||
testImplementation("androidx.test.ext:junit:1.1.5")
|
||||
testImplementation("org.robolectric:robolectric:4.10.3")
|
||||
testImplementation("org.hamcrest:hamcrest:2.2")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api:${libs.versions.junit5.get()}")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-params:${libs.versions.junit5.get()}")
|
||||
testImplementation("io.mockk:mockk:${libs.versions.mockk.get()}")
|
||||
testImplementation("org.bitcoinj:bitcoinj-core:0.16.2")
|
||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${libs.versions.junit5.get()}")
|
||||
testRuntimeOnly("org.junit.vintage:junit-vintage-engine:${libs.versions.junit5.get()}")
|
||||
|
||||
androidTestImplementation(aospLibs)
|
||||
androidTestImplementation("androidx.test:runner:1.4.0")
|
||||
androidTestImplementation("androidx.test:rules:1.4.0")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.3")
|
||||
androidTestImplementation("io.mockk:mockk-android:1.13.8")
|
||||
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
tasks.withType(JavaCompile::class) {
|
||||
options.compilerArgs.add("-Xbootclasspath/p:app/libs/android.jar:app/libs/libcore.jar")
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<Test>().configureEach {
|
||||
testLogging {
|
||||
events("passed", "skipped", "failed")
|
||||
|
||||
showExceptions = true
|
||||
showCauses = true
|
||||
showStackTraces = true
|
||||
exceptionFormat = TestExceptionFormat.FULL
|
||||
}
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
resolutionStrategy {
|
||||
failOnNonReproducibleResolution()
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register<Exec>("provisionEmulator") {
|
||||
group = "emulator"
|
||||
|
||||
dependsOn(tasks.getByName("assembleRelease"))
|
||||
|
||||
doFirst {
|
||||
commandLine(
|
||||
"${project.projectDir}/development/scripts/provision_emulator.sh",
|
||||
"seedvault",
|
||||
"system-images;android-34;default;x86_64"
|
||||
)
|
||||
|
||||
environment("ANDROID_HOME", android.sdkDirectory.absolutePath)
|
||||
environment("JAVA_HOME", System.getProperty("java.home"))
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register<Exec>("startEmulator") {
|
||||
group = "emulator"
|
||||
|
||||
doFirst {
|
||||
commandLine("${project.projectDir}/development/scripts/start_emulator.sh", "seedvault")
|
||||
|
||||
environment("ANDROID_HOME", android.sdkDirectory.absolutePath)
|
||||
environment("JAVA_HOME", System.getProperty("java.home"))
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register<Exec>("installEmulatorRelease") {
|
||||
group = "emulator"
|
||||
|
||||
dependsOn(tasks.getByName("assembleRelease"))
|
||||
|
||||
doFirst {
|
||||
commandLine("${project.projectDir}/development/scripts/install_app.sh")
|
||||
|
||||
environment("ANDROID_HOME", android.sdkDirectory.absolutePath)
|
||||
environment("JAVA_HOME", System.getProperty("java.home"))
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register<Exec>("clearEmulatorAppData") {
|
||||
group = "emulator"
|
||||
|
||||
doFirst {
|
||||
commandLine("${project.projectDir}/development/scripts/clear_app_data.sh")
|
||||
|
||||
environment("ANDROID_HOME", android.sdkDirectory.absolutePath)
|
||||
environment("JAVA_HOME", System.getProperty("java.home"))
|
||||
}
|
||||
}
|
33
build.gradle
33
build.gradle
|
@ -1,33 +0,0 @@
|
|||
buildscript {
|
||||
// 1.3.61 Android 11
|
||||
// 1.4.30 Android 12
|
||||
// 1.6.10 Android 13
|
||||
// 1.7.20 Android 13 (QPR2)
|
||||
// 1.8.10 Android 14
|
||||
// Check:
|
||||
// https://android.googlesource.com/platform/external/kotlinc/+/refs/tags/android-14.0.0_r1/build.txt
|
||||
ext.aosp_kotlin_version = '1.8.10' // 1.8.10-release-430 in AOSP
|
||||
ext.kotlin_version = '1.8.10'
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.android.application' version '8.1.2' apply false
|
||||
id 'com.android.library' version '8.1.2' apply false
|
||||
id 'com.google.protobuf' version '0.9.4' apply false
|
||||
id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version "$kotlin_version" apply false
|
||||
id 'org.jetbrains.dokka' version "$kotlin_version" apply false
|
||||
id 'org.jlleitschuh.gradle.ktlint' version '11.5.0' apply false
|
||||
}
|
||||
|
||||
ext {
|
||||
compileSdk = 34
|
||||
minSdk = 33
|
||||
targetSdk = 34
|
||||
}
|
||||
|
||||
apply from: 'gradle/dependencies.gradle'
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
35
build.gradle.kts
Normal file
35
build.gradle.kts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import org.jlleitschuh.gradle.ktlint.KtlintExtension
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id("com.android.application") version plugins.versions.androidGradle apply false
|
||||
id("com.android.library") version plugins.versions.androidGradle apply false
|
||||
id("com.google.protobuf") version plugins.versions.protobuf apply false
|
||||
id("org.jetbrains.kotlin.android") version plugins.versions.kotlin apply false
|
||||
id("org.jetbrains.kotlin.kapt") version plugins.versions.kotlin apply false
|
||||
id("org.jetbrains.dokka") version plugins.versions.kotlin apply false
|
||||
id("org.jlleitschuh.gradle.ktlint") version plugins.versions.ktlint apply false
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete::class) {
|
||||
delete(rootProject.buildDir)
|
||||
}
|
||||
|
||||
subprojects {
|
||||
if (path != ":storage:demo") {
|
||||
apply(plugin = "org.jlleitschuh.gradle.ktlint")
|
||||
|
||||
configure<KtlintExtension> {
|
||||
version.set("0.42.1")
|
||||
android.set(true)
|
||||
enableExperimentalRules.set(false)
|
||||
verbose.set(true)
|
||||
disabledRules.set(listOf("import-ordering", "no-blank-line-before-rbrace", "indent"))
|
||||
}
|
||||
}
|
||||
}
|
83
build.libs.toml
Normal file
83
build.libs.toml
Normal file
|
@ -0,0 +1,83 @@
|
|||
[metadata]
|
||||
|
||||
[versions]
|
||||
# Android SDK versions
|
||||
compileSdk = "34"
|
||||
minSdk = "33"
|
||||
targetSdk = "34"
|
||||
|
||||
# Test versions
|
||||
junit4 = "4.13.2"
|
||||
junit5 = "5.10.0" # careful, upgrading this can change a Cipher's IV size in tests!?
|
||||
mockk = "1.13.4" # newer versions require kotlin > 1.8.10
|
||||
espresso = "3.4.0"
|
||||
|
||||
# Dependency versions below this are AOSP versions.
|
||||
# We use "strictly" to enforce the version cannot be overriden by transitive dependencies.
|
||||
# We need to enforce that the versions we use are the same as AOSP to ensure compatibility.
|
||||
|
||||
# Kotlin versions
|
||||
# https://android.googlesource.com/platform/external/kotlinc/+/refs/tags/android-14.0.0_r1/build.txt
|
||||
aosp-kotlin = { strictly = "1.8.10" }
|
||||
|
||||
# Lint versions
|
||||
lint-rules = { strictly = "0.1.0" }
|
||||
|
||||
# Google versions
|
||||
# https://android.googlesource.com/platform/external/protobuf/+/refs/tags/android-14.0.0_r1/java/pom.xml#7
|
||||
protobuf = { strictly = "3.21.7" }
|
||||
# https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/extras/material-design-x/Android.bp#15
|
||||
material = { strictly = "1.7.0-alpha03" }
|
||||
# careful with upgrading tink, so old backups continue to be decryptable
|
||||
# https://github.com/google/tink/releases
|
||||
tink = { strictly = "1.10.0" }
|
||||
|
||||
# Coroutines versions
|
||||
# https://android.googlesource.com/platform/external/kotlinx.coroutines/+/refs/tags/android-14.0.0_r1/CHANGES.md
|
||||
coroutines = { strictly = "1.6.4" }
|
||||
|
||||
# AndroidX versions
|
||||
# https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp
|
||||
room = { strictly = "2.4.0-alpha05" }
|
||||
androidx-core = { strictly = "1.9.0-alpha05" }
|
||||
androidx-fragment = { strictly = "1.5.0-alpha03" }
|
||||
androidx-activity = { strictly = "1.5.0-alpha03" }
|
||||
androidx-preference = { strictly = "1.2.0-alpha01" }
|
||||
androidx-lifecycle-viewmodel-ktx = { strictly = "2.5.0-alpha03" }
|
||||
androidx-lifecycle-livedata-ktx = { strictly = "2.5.0-alpha03" }
|
||||
androidx-constraintlayout = { strictly = "2.2.0-alpha05" }
|
||||
androidx-documentfile = { strictly = "1.1.0-alpha01" }
|
||||
|
||||
[libraries]
|
||||
# Kotlin standard dependencies
|
||||
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "aosp-kotlin" }
|
||||
kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "aosp-kotlin" }
|
||||
kotlin-stdlib-common = { module = "org.jetbrains.kotlin:kotlin-stdlib-common", version.ref = "aosp-kotlin" }
|
||||
|
||||
# Lint dependencies
|
||||
thirdegg-lint-rules = { module = "com.github.thirdegg:lint-rules", version.ref = "lint-rules" }
|
||||
|
||||
# Google dependencies
|
||||
google-tink-android = { module = "com.google.crypto.tink:tink-android", version.ref = "tink" }
|
||||
google-protobuf-javalite = { module = 'com.google.protobuf:protobuf-javalite', version.ref = 'protobuf' }
|
||||
google-material = { module = 'com.google.android.material:material', version.ref = 'material' }
|
||||
|
||||
# Coroutines dependencies
|
||||
kotlinx-coroutines-core-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", version.ref = "coroutines" }
|
||||
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
|
||||
|
||||
# AndroidX dependencies
|
||||
androidx-core = { module = "androidx.core:core", version.ref = "androidx-core" }
|
||||
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
|
||||
androidx-fragment = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment" }
|
||||
androidx-activity = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" }
|
||||
androidx-preference = { module = "androidx.preference:preference", version.ref = "androidx-preference" }
|
||||
androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle-viewmodel-ktx" }
|
||||
androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidx-lifecycle-livedata-ktx" }
|
||||
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
|
||||
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-documentfile" }
|
||||
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
||||
|
||||
[bundles]
|
||||
kotlin = ["kotlin-stdlib", "kotlin-stdlib-jdk8", "kotlin-stdlib-common"]
|
||||
coroutines = ["kotlinx-coroutines-core-jvm", "kotlinx-coroutines-android"]
|
14
build.plugins.toml
Normal file
14
build.plugins.toml
Normal file
|
@ -0,0 +1,14 @@
|
|||
[versions]
|
||||
# We need to enforce that the versions we use are the same as AOSP to ensure compatibility.
|
||||
# 1.3.61 Android 11
|
||||
# 1.4.30 Android 12
|
||||
# 1.6.10 Android 13
|
||||
# 1.7.20 Android 13 (QPR2)
|
||||
# 1.8.10 Android 14
|
||||
# Check:
|
||||
# https://android.googlesource.com/platform/external/kotlinc/+/refs/tags/android-14.0.0_r1/build.txt
|
||||
kotlin = "1.8.10"
|
||||
|
||||
androidGradle = "8.1.2"
|
||||
protobuf = "0.9.4"
|
||||
ktlint = "11.5.0"
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2020 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'org.calyxos.backup.contacts'
|
||||
compileSdk rootProject.ext.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.calyxos.backup.contacts"
|
||||
minSdk rootProject.ext.minSdk
|
||||
targetSdk rootProject.ext.targetSdk
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude("META-INF/LICENSE.md")
|
||||
exclude("META-INF/LICENSE-notice.md")
|
||||
}
|
||||
|
||||
testOptions {
|
||||
unitTests.returnDefaultValues = true
|
||||
}
|
||||
|
||||
// optional signingConfigs
|
||||
// On userdebug builds, you can use the testkey here to update the system app
|
||||
def keystorePropertiesFile = project.file("keystore.properties")
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
def keystoreProperties = new Properties()
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
keyAlias keystoreProperties['keyAlias']
|
||||
keyPassword keystoreProperties['keyPassword']
|
||||
storeFile file(keystoreProperties['storeFile'])
|
||||
storePassword keystoreProperties['storePassword']
|
||||
}
|
||||
}
|
||||
buildTypes.release.signingConfig = signingConfigs.release
|
||||
buildTypes.debug.signingConfig = signingConfigs.release
|
||||
}
|
||||
}
|
||||
|
||||
def aospDeps = fileTree(include: [
|
||||
// out/target/common/obj/JAVA_LIBRARIES/com.android.vcard_intermediates/classes.jar
|
||||
'com.android.vcard.jar'
|
||||
], dir: 'libs')
|
||||
|
||||
dependencies {
|
||||
implementation aospDeps
|
||||
|
||||
testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
testImplementation "junit:junit:$junit4_version"
|
||||
testImplementation "io.mockk:mockk:$mockk_version"
|
||||
|
||||
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
|
||||
androidTestImplementation "io.mockk:mockk-android:$mockk_version"
|
||||
}
|
78
contactsbackup/build.gradle.kts
Normal file
78
contactsbackup/build.gradle.kts
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2020 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
import java.io.FileInputStream
|
||||
import java.util.Properties
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "org.calyxos.backup.contacts"
|
||||
compileSdk = libs.versions.compileSdk.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "org.calyxos.backup.contacts"
|
||||
minSdk = libs.versions.minSdk.get().toInt()
|
||||
targetSdk = libs.versions.targetSdk.get().toInt()
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments(mapOf("disableAnalytics" to "true"))
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude("META-INF/LICENSE.md")
|
||||
exclude("META-INF/LICENSE-notice.md")
|
||||
}
|
||||
|
||||
testOptions.unitTests {
|
||||
isReturnDefaultValues = true
|
||||
}
|
||||
|
||||
// optional signingConfigs
|
||||
// On userdebug builds, you can use the testkey here to update the system app
|
||||
val keystorePropertiesFile = project.file("keystore.properties")
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
val keystoreProperties = Properties()
|
||||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||||
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
keyAlias = keystoreProperties["keyAlias"] as String
|
||||
keyPassword = keystoreProperties["keyPassword"] as String
|
||||
storeFile = file(keystoreProperties["storeFile"] as String)
|
||||
storePassword = keystoreProperties["storePassword"] as String
|
||||
}
|
||||
}
|
||||
buildTypes.getByName("release").signingConfig = signingConfigs.getByName("release")
|
||||
buildTypes.getByName("debug").signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
|
||||
val aospDeps = fileTree(mapOf("include" to listOf("com.android.vcard.jar"), "dir" to "libs"))
|
||||
|
||||
dependencies {
|
||||
implementation(aospDeps)
|
||||
|
||||
testImplementation(libs.kotlin.stdlib.jdk8)
|
||||
testImplementation("junit:junit:${libs.versions.junit4.get()}")
|
||||
testImplementation("io.mockk:mockk:${libs.versions.mockk.get()}")
|
||||
|
||||
androidTestImplementation(libs.kotlin.stdlib.jdk8)
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation(
|
||||
"androidx.test.espresso:espresso-core:${libs.versions.espresso.get()}")
|
||||
androidTestImplementation("io.mockk:mockk-android:${libs.versions.mockk.get()}")
|
||||
}
|
|
@ -1,113 +0,0 @@
|
|||
ext {
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-13.0.0_r3/current/androidx/Android.bp#3901
|
||||
ext.room_version = "2.4.0-alpha05" // 2.5.0-alpha01 in AOSP but needs testing
|
||||
// https://android.googlesource.com/platform/external/protobuf/+/refs/tags/android-14.0.0_r1/java/pom.xml#7
|
||||
ext.protobuf_version = "3.21.7"
|
||||
|
||||
// test dependencies below - these do not care about AOSP and can be freely updated
|
||||
junit4_version = "4.13.2"
|
||||
junit5_version = "5.10.0" // careful, upgrading this can change a Cipher's IV size in tests!?
|
||||
mockk_version = "1.13.4" // newer versions require kotlin > 1.8.10
|
||||
espresso_version = "3.4.0"
|
||||
}
|
||||
|
||||
// To produce these binaries, in latest AOSP source tree, run
|
||||
// $ m
|
||||
ext.aosp_libs = fileTree(include: [
|
||||
// For more information about this module:
|
||||
// https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-11.0.0_r3/Android.bp#507
|
||||
// framework_intermediates/classes-header.jar works for gradle build as well,
|
||||
// but not unit tests, so we use the actual classes (without updatable modules).
|
||||
//
|
||||
// out/target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates/classes.jar
|
||||
'android.jar',
|
||||
// out/target/common/obj/JAVA_LIBRARIES/core-libart.com.android.art_intermediates/classes.jar
|
||||
'libcore.jar',
|
||||
], dir: "${rootProject.projectDir}/app/libs")
|
||||
|
||||
ext.kotlin_libs = [
|
||||
std: [
|
||||
dependencies.create('org.jetbrains.kotlin:kotlin-stdlib') {
|
||||
version { strictly "$aosp_kotlin_version" }
|
||||
},
|
||||
dependencies.create('org.jetbrains.kotlin:kotlin-stdlib-jdk8') {
|
||||
version { strictly "$aosp_kotlin_version" }
|
||||
},
|
||||
dependencies.create('org.jetbrains.kotlin:kotlin-stdlib-common') {
|
||||
version { strictly "$aosp_kotlin_version" }
|
||||
},
|
||||
],
|
||||
coroutines: [
|
||||
dependencies.create('org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm') {
|
||||
// https://android.googlesource.com/platform/external/kotlinx.coroutines/+/refs/tags/android-14.0.0_r1/CHANGES.md
|
||||
version { strictly '1.6.4' }
|
||||
},
|
||||
dependencies.create('org.jetbrains.kotlinx:kotlinx-coroutines-android') {
|
||||
// https://android.googlesource.com/platform/external/kotlinx.coroutines/+/refs/tags/android-14.0.0_r1/CHANGES.md
|
||||
version { strictly '1.6.4' }
|
||||
},
|
||||
],
|
||||
]
|
||||
|
||||
ext.std_libs = [
|
||||
androidx_core: [
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#2420
|
||||
dependencies.create('androidx.core:core') {
|
||||
version { strictly '1.9.0-alpha05' } // 1.9.0-alpha03 in AOSP but has SDK version issues
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#2386
|
||||
dependencies.create('androidx.core:core-ktx') {
|
||||
version { strictly '1.9.0-alpha05' } // 1.9.0-alpha03 in AOSP but has SDK version issues
|
||||
},
|
||||
],
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#2849
|
||||
androidx_fragment: dependencies.create('androidx.fragment:fragment-ktx') {
|
||||
version { strictly '1.5.0-alpha03' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#61
|
||||
androidx_activity: dependencies.create('androidx.activity:activity-ktx') {
|
||||
version { strictly '1.5.0-alpha03' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#4420
|
||||
androidx_preference: dependencies.create('androidx.preference:preference') {
|
||||
version { strictly '1.2.0-alpha01' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-13.0.0_r3/current/androidx/Android.bp#3521
|
||||
androidx_lifecycle_viewmodel_ktx: dependencies.create('androidx.lifecycle:lifecycle-viewmodel-ktx') {
|
||||
version { strictly '2.5.0-alpha03' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#3279
|
||||
androidx_lifecycle_livedata_ktx: dependencies.create('androidx.lifecycle:lifecycle-livedata-ktx') {
|
||||
version { strictly '2.5.0-alpha03' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#2244
|
||||
androidx_constraintlayout: dependencies.create('androidx.constraintlayout:constraintlayout') {
|
||||
version { strictly '2.2.0-alpha05' }
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/androidx/Android.bp#2556
|
||||
androidx_documentfile: dependencies.create('androidx.documentfile:documentfile') {
|
||||
version { strictly '1.1.0-alpha01' } // 1.1.0-alpha02 in AOSP but not released yet
|
||||
},
|
||||
// https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r1/current/extras/material-design-x/Android.bp#15
|
||||
com_google_android_material: dependencies.create('com.google.android.material:material') {
|
||||
version { strictly '1.7.0-alpha03' }
|
||||
},
|
||||
]
|
||||
|
||||
ext.lint_libs = [
|
||||
exceptions: 'com.github.thirdegg:lint-rules:0.1.0'
|
||||
]
|
||||
|
||||
ext.storage_libs = [
|
||||
androidx_room_runtime: dependencies.create('androidx.room:room-runtime') {
|
||||
version { strictly "$room_version" }
|
||||
},
|
||||
com_google_protobuf_javalite: dependencies.create('com.google.protobuf:protobuf-javalite') {
|
||||
version { strictly "$protobuf_version" }
|
||||
},
|
||||
// https://github.com/google/tink/releases
|
||||
com_google_crypto_tink_android: dependencies.create('com.google.crypto.tink:tink-android') {
|
||||
// careful with upgrading tink, so old backups continue to be decryptable
|
||||
version { strictly '1.10.0' }
|
||||
},
|
||||
]
|
|
@ -1,11 +0,0 @@
|
|||
ktlint {
|
||||
version = "0.42.1"
|
||||
android = true
|
||||
enableExperimentalRules = false
|
||||
verbose = true
|
||||
disabledRules = [
|
||||
"import-ordering",
|
||||
"no-blank-line-before-rbrace",
|
||||
"indent",
|
||||
]
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
pluginManagement {
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://storage.googleapis.com/r8-releases/raw") }
|
||||
}
|
||||
dependencies {
|
||||
// https://issuetracker.google.com/issues/227160052#comment37
|
||||
// This can be removed when we switch to Android Gradle plugin 8.2.
|
||||
classpath("com.android.tools:r8:8.2.28")
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
rootProject.name = 'Seedvault'
|
||||
include ':app'
|
||||
include ':contactsbackup'
|
||||
include ':storage:lib'
|
||||
include ':storage:demo'
|
44
settings.gradle.kts
Normal file
44
settings.gradle.kts
Normal file
|
@ -0,0 +1,44 @@
|
|||
pluginManagement {
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven {
|
||||
// https://issuetracker.google.com/issues/227160052#comment37
|
||||
// This can be removed when we switch to Android Gradle plugin 8.2.
|
||||
setUrl(uri("https://storage.googleapis.com/r8-releases/raw"))
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath("com.android.tools:r8:8.2.28")
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven("https://jitpack.io")
|
||||
}
|
||||
versionCatalogs {
|
||||
create("libs") {
|
||||
from(files("build.libs.toml"))
|
||||
}
|
||||
create("plugins") {
|
||||
from(files("build.plugins.toml"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "Seedvault"
|
||||
include(":app")
|
||||
include(":contactsbackup")
|
||||
include(":storage:lib")
|
||||
include(":storage:demo")
|
|
@ -1,76 +0,0 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'com.google.protobuf'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'org.jetbrains.kotlin.kapt'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'de.grobox.storagebackuptester'
|
||||
compileSdk rootProject.ext.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
applicationId "de.grobox.storagebackuptester"
|
||||
minSdk rootProject.ext.minSdk
|
||||
targetSdk rootProject.ext.targetSdk
|
||||
versionCode 20
|
||||
versionName "0.9.7"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
|
||||
}
|
||||
lint {
|
||||
disable "DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult"
|
||||
}
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
excludes += ['META-INF/services/kotlin*']
|
||||
}
|
||||
resources {
|
||||
excludes += [
|
||||
'META-INF/*.kotlin_module',
|
||||
'META-INF/androidx.*.version',
|
||||
'META-INF/services/kotlin*',
|
||||
'kotlin/internal/internal.kotlin_builtins'
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':storage:lib')
|
||||
|
||||
implementation rootProject.ext.kotlin_libs.std
|
||||
|
||||
implementation rootProject.ext.std_libs.androidx_core
|
||||
// A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
|
||||
implementation rootProject.ext.std_libs.androidx_fragment
|
||||
implementation rootProject.ext.std_libs.androidx_activity
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_viewmodel_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_livedata_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_constraintlayout
|
||||
implementation rootProject.ext.std_libs.com_google_android_material
|
||||
|
||||
implementation rootProject.ext.storage_libs.com_google_protobuf_javalite
|
||||
}
|
86
storage/demo/build.gradle.kts
Normal file
86
storage/demo/build.gradle.kts
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("com.google.protobuf")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
id("org.jetbrains.kotlin.kapt")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "de.grobox.storagebackuptester"
|
||||
compileSdk = libs.versions.compileSdk.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "de.grobox.storagebackuptester"
|
||||
minSdk = libs.versions.minSdk.get().toInt()
|
||||
targetSdk = libs.versions.targetSdk.get().toInt()
|
||||
versionCode = 20
|
||||
versionName = "0.9.7"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments.clear()
|
||||
testInstrumentationRunnerArguments.putAll(mapOf("disableAnalytics" to "true"))
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
freeCompilerArgs += listOf("-opt-in=kotlin.RequiresOptIn")
|
||||
}
|
||||
|
||||
lint {
|
||||
disable += setOf(
|
||||
"DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult"
|
||||
)
|
||||
}
|
||||
|
||||
packaging {
|
||||
jniLibs {
|
||||
excludes += listOf("META-INF/services/kotlin*")
|
||||
}
|
||||
resources {
|
||||
excludes += listOf(
|
||||
"META-INF/*.kotlin_module",
|
||||
"META-INF/androidx.*.version",
|
||||
"META-INF/services/kotlin*",
|
||||
"kotlin/internal/internal.kotlin_builtins"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":storage:lib"))
|
||||
|
||||
implementation(libs.bundles.kotlin)
|
||||
|
||||
implementation(libs.androidx.core)
|
||||
// A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
|
||||
implementation(libs.androidx.fragment)
|
||||
implementation(libs.androidx.activity)
|
||||
implementation(libs.androidx.lifecycle.viewmodel.ktx)
|
||||
implementation(libs.androidx.lifecycle.livedata.ktx)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.google.material)
|
||||
|
||||
implementation(libs.google.protobuf.javalite)
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id 'com.android.library'
|
||||
id 'com.google.protobuf'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'org.jetbrains.kotlin.kapt'
|
||||
id 'org.jetbrains.dokka'
|
||||
id 'org.jlleitschuh.gradle.ktlint'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'org.calyxos.backup.storage'
|
||||
compileSdk rootProject.ext.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
minSdk rootProject.ext.minSdk
|
||||
targetSdk rootProject.ext.targetSdk
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
||||
|
||||
consumerProguardFiles "consumer-rules.pro"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
all {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
languageVersion = "1.8"
|
||||
freeCompilerArgs += '-opt-in=kotlin.RequiresOptIn'
|
||||
freeCompilerArgs += '-Xexplicit-api=strict'
|
||||
}
|
||||
protobuf {
|
||||
protoc {
|
||||
if ("aarch64" == System.getProperty("os.arch")) {
|
||||
// mac m1
|
||||
artifact = "com.google.protobuf:protoc:$protobuf_version:osx-x86_64"
|
||||
} else {
|
||||
// other
|
||||
artifact = "com.google.protobuf:protoc:$protobuf_version"
|
||||
}
|
||||
}
|
||||
generateProtoTasks {
|
||||
all().each { task ->
|
||||
task.builtins {
|
||||
java {
|
||||
option "lite"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lint {
|
||||
disable "DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult",
|
||||
"CheckedExceptions"
|
||||
}
|
||||
}
|
||||
|
||||
kotlin {
|
||||
explicitApi = 'strict'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation rootProject.ext.kotlin_libs.std
|
||||
|
||||
implementation rootProject.ext.std_libs.androidx_core
|
||||
// A newer version gets pulled in with AOSP via core, so we include fragment here explicitly
|
||||
implementation rootProject.ext.std_libs.androidx_fragment
|
||||
implementation rootProject.ext.std_libs.androidx_activity
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_viewmodel_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_lifecycle_livedata_ktx
|
||||
implementation rootProject.ext.std_libs.androidx_constraintlayout
|
||||
implementation rootProject.ext.std_libs.androidx_documentfile
|
||||
implementation rootProject.ext.std_libs.com_google_android_material
|
||||
|
||||
implementation rootProject.ext.storage_libs.androidx_room_runtime
|
||||
implementation rootProject.ext.storage_libs.com_google_protobuf_javalite
|
||||
implementation rootProject.ext.storage_libs.com_google_crypto_tink_android
|
||||
kapt('androidx.room:room-compiler') {
|
||||
version { strictly "$room_version" }
|
||||
}
|
||||
|
||||
lintChecks rootProject.ext.lint_libs.exceptions
|
||||
|
||||
testImplementation "junit:junit:$junit4_version"
|
||||
testImplementation "io.mockk:mockk:$mockk_version"
|
||||
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
|
||||
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
|
||||
}
|
||||
|
||||
apply from: "${rootProject.rootDir}/gradle/ktlint.gradle"
|
106
storage/lib/build.gradle.kts
Normal file
106
storage/lib/build.gradle.kts
Normal file
|
@ -0,0 +1,106 @@
|
|||
import com.google.protobuf.gradle.id
|
||||
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
plugins {
|
||||
id("com.google.protobuf")
|
||||
id("org.jetbrains.kotlin.kapt")
|
||||
id("org.jetbrains.dokka")
|
||||
id("com.android.library")
|
||||
kotlin("android")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "org.calyxos.backup.storage"
|
||||
compileSdk = libs.versions.compileSdk.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
minSdk = libs.versions.minSdk.get().toInt()
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments["disableAnalytics"] = "true"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
all {
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
languageVersion = "1.8"
|
||||
freeCompilerArgs += listOf(
|
||||
"-opt-in=kotlin.RequiresOptIn",
|
||||
"-Xexplicit-api=strict"
|
||||
)
|
||||
}
|
||||
|
||||
protobuf {
|
||||
protoc {
|
||||
if ("aarch64" == System.getProperty("os.arch")) {
|
||||
// mac m1
|
||||
artifact = "com.google.protobuf:protoc:${libs.versions.protobuf.get()}:osx-x86_64"
|
||||
} else {
|
||||
// other
|
||||
artifact = "com.google.protobuf:protoc:${libs.versions.protobuf.get()}"
|
||||
}
|
||||
}
|
||||
generateProtoTasks {
|
||||
all().forEach { task ->
|
||||
task.builtins {
|
||||
id("java") {
|
||||
option("lite")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lint {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = false
|
||||
|
||||
disable.clear()
|
||||
disable += setOf(
|
||||
"DialogFragmentCallbacksDetector",
|
||||
"InvalidFragmentVersionForActivityResult",
|
||||
"CheckedExceptions"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.bundles.kotlin)
|
||||
implementation(libs.androidx.core)
|
||||
implementation(libs.androidx.fragment)
|
||||
implementation(libs.androidx.activity)
|
||||
implementation(libs.androidx.lifecycle.viewmodel.ktx)
|
||||
implementation(libs.androidx.lifecycle.livedata.ktx)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.androidx.documentfile)
|
||||
implementation(libs.google.material)
|
||||
implementation(libs.androidx.room.runtime)
|
||||
implementation(libs.google.protobuf.javalite)
|
||||
implementation(libs.google.tink.android)
|
||||
|
||||
kapt(group = "androidx.room", name = "room-compiler", version = libs.versions.room.get())
|
||||
lintChecks(libs.thirdegg.lint.rules)
|
||||
testImplementation("junit:junit:${libs.versions.junit4.get()}")
|
||||
testImplementation("io.mockk:mockk:${libs.versions.mockk.get()}")
|
||||
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:${libs.versions.aosp.kotlin.get()}")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation(
|
||||
"androidx.test.espresso:espresso-core:${libs.versions.espresso.get()}"
|
||||
)
|
||||
}
|
Loading…
Reference in a new issue