diff --git a/.idea/gradle.xml b/.idea/gradle.xml index c8275882..231bc84e 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,7 @@ diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index f010ff24..00000000 --- a/app/build.gradle +++ /dev/null @@ -1,110 +0,0 @@ -plugins { - id "kotlin-kapt" - id "dagger.hilt.android.plugin" -} - -repositories { - maven { url 'https://jitpack.io' } -} - -final def keystorePropertiesFile = rootProject.file("keystore.properties") -android { - adbOptions { - installOptions = ["--user 0"] - } - defaultConfig { - applicationId "dev.msfjarvis.lobsters" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - javaCompileOptions { - annotationProcessorOptions { - arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] - } - } - } - - buildTypes { - release { - minifyEnabled true - proguardFiles "proguard-android-optimize.txt", "proguard-rules.pro" - } - } - - compileOptions.coreLibraryDesugaringEnabled = true - - buildFeatures.compose = true - - composeOptions { - kotlinCompilerVersion "${kotlin_version}" - kotlinCompilerExtensionVersion "${compose_version}" - } - - if (keystorePropertiesFile.exists()) { - final def keystoreProperties = new Properties() - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) - - signingConfigs { - release { - keyAlias keystoreProperties["keyAlias"] - keyPassword keystoreProperties["keyPassword"] - storeFile rootProject.file(keystoreProperties["storeFile"]) - storePassword keystoreProperties["storePassword"] - } - } - buildTypes.debug.signingConfig = signingConfigs.release - buildTypes.release.signingConfig = signingConfigs.release - } -} - -tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { - kotlinOptions { - freeCompilerArgs += [ - "-Xallow-jvm-ir-dependencies", - "-Xskip-prerelease-check", - "-Xopt-in=kotlin.RequiresOptIn", - "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", - "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi", - ] - } -} - -dependencies { - - kapt "com.github.MatrixDev.Roomigrant:RoomigrantCompiler:$roomigrant_version" - kapt "com.google.dagger:hilt-compiler:$hilt_dagger_version" - kapt "androidx.hilt:hilt-compiler:$hilt_androidx_version" - kapt "androidx.room:room-compiler:$room_version" - implementation(project(":lobsters-api")) - implementation(project(":model")) - implementation "androidx.core:core-ktx:$core_version" - implementation "androidx.activity:activity-ktx:$activity_version" - implementation "androidx.appcompat:appcompat:$appcompat_version" - implementation "androidx.browser:browser:$browser_version" - implementation "androidx.compose.foundation:foundation:$compose_version" - implementation "androidx.compose.foundation:foundation-layout:$compose_version" - implementation "androidx.compose.foundation:foundation-text:$compose_version" - implementation "androidx.compose.runtime:runtime:$compose_version" - implementation "androidx.compose.material:material:$compose_version" - implementation "androidx.compose.compiler:compiler:$compose_version" - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.ui:ui-text:$compose_version" - implementation "androidx.compose.ui:ui-text-android:$compose_version" - implementation "androidx.compose.ui:ui-unit:$compose_version" - implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_androidx_version" - implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" - implementation "androidx.navigation:navigation-compose:$nav_compose_version" - implementation "androidx.room:room-runtime:$room_version" - implementation "androidx.room:room-ktx:$room_version" - implementation "androidx.ui:ui-tooling:$compose_version" - implementation "com.github.MatrixDev.Roomigrant:RoomigrantLib:$roomigrant_version" - implementation "com.google.android.material:material:$material_version" - implementation "com.google.dagger:hilt-android:$hilt_dagger_version" - implementation "com.squareup.moshi:moshi:$moshi_version" - implementation "dev.chrisbanes.accompanist:accompanist-coil:$accompanist_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" - implementation "saschpe.android:customtabs:$customtabs_version" - androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_dagger_version" - testImplementation "junit:junit:$junit_version" - androidTestImplementation "androidx.ui:ui-test:$compose_version" - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:$desugar_version" -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 00000000..3c610c94 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,100 @@ +import java.util.Properties + +plugins { + id("com.android.application") + kotlin("android") + kotlin("kapt") + id("dagger.hilt.android.plugin") + `lobsters-plugin` + `core-library-desugaring` +} + +repositories { + maven { setUrl("https://jitpack.io") } +} + +val keystorePropertiesFile = rootProject.file("keystore.properties") + +android { + adbOptions.installOptions("--user 0") + defaultConfig { + applicationId = "dev.msfjarvis.lobsters" + versionCode = 1 + versionName = "1.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + javaCompileOptions.annotationProcessorOptions { + argument("room.schemaLocation", "${projectDir}/schemas") + } + } + + buildTypes { + named("release") { + isMinifyEnabled = true + setProguardFiles(listOf("proguard-android-optimize.txt", "proguard-rules.pro")) + } + } + + buildFeatures.compose = true + + composeOptions { + kotlinCompilerVersion = "1.4.10" + kotlinCompilerExtensionVersion = Dependencies.COMPOSE_VERSION + } + + if (keystorePropertiesFile.exists()) { + val keystoreProperties = Properties() + keystoreProperties.load(keystorePropertiesFile.inputStream()) + signingConfigs { + register("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = rootProject.file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } + listOf("release", "debug").map { + buildTypes.getByName(it).signingConfig = signingConfigs.getByName(it) + } + } +} + +dependencies { + + kapt(Dependencies.ThirdParty.Roomigrant.compiler) + kapt(Dependencies.AndroidX.Hilt.daggerCompiler) + kapt(Dependencies.AndroidX.Hilt.daggerHiltCompiler) + kapt(Dependencies.AndroidX.Room.compiler) + implementation(project(":lobsters-api")) + implementation(project(":model")) + implementation(Dependencies.AndroidX.coreKtx) + implementation(Dependencies.AndroidX.activityKtx) + implementation(Dependencies.AndroidX.appCompat) + implementation(Dependencies.AndroidX.browser) + implementation(Dependencies.AndroidX.Compose.foundation) + implementation(Dependencies.AndroidX.Compose.foundationLayout) + implementation(Dependencies.AndroidX.Compose.foundationText) + implementation(Dependencies.AndroidX.Compose.runtime) + implementation(Dependencies.AndroidX.Compose.material) + implementation(Dependencies.AndroidX.Compose.compiler) + implementation(Dependencies.AndroidX.Compose.ui) + implementation(Dependencies.AndroidX.Compose.uiTooling) + implementation(Dependencies.AndroidX.Compose.uiText) + implementation(Dependencies.AndroidX.Compose.uiTextAndroid) + implementation(Dependencies.AndroidX.Compose.uiUnit) + implementation(Dependencies.AndroidX.Hilt.hiltLifecycleViewmodel) + implementation(Dependencies.AndroidX.Lifecycle.runtimeKtx) + implementation(Dependencies.AndroidX.Lifecycle.viewmodelKtx) + implementation(Dependencies.AndroidX.Compose.navigation) + implementation(Dependencies.AndroidX.Room.runtime) + implementation(Dependencies.AndroidX.Room.ktx) + implementation(Dependencies.ThirdParty.Roomigrant.runtime) + implementation(Dependencies.AndroidX.material) + implementation(Dependencies.AndroidX.Hilt.dagger) + implementation(Dependencies.ThirdParty.Moshi.lib) + implementation(Dependencies.ThirdParty.accompanist) + implementation(Dependencies.Kotlin.Coroutines.android) + implementation(Dependencies.ThirdParty.customtabs) + androidTestImplementation(Dependencies.Testing.daggerHilt) + testImplementation(Dependencies.Testing.junit) + androidTestImplementation(Dependencies.Testing.uiTest) +} diff --git a/build.gradle b/build.gradle deleted file mode 100644 index fc607f43..00000000 --- a/build.gradle +++ /dev/null @@ -1,98 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - ext { - accompanist_version = "0.3.2" - activity_version = "1.2.0-beta01" - agp_version = "4.2.0-alpha15" - appcompat_version = "1.3.0-alpha02" - browser_version = "1.3.0-beta01" - compose_version = "1.0.0-alpha06" - core_version = "1.5.0-alpha04" - coroutines_version = "1.4.0" - customtabs_version = "3.0.2" - dagger_version = "2.29.1" - desugar_version = "1.0.10" - hilt_androidx_version = "1.0.0-alpha02" - hilt_dagger_version = "2.29.1-alpha" - junit_version = "4.13.1" - kotlin_version = "1.4.10" - lifecycle_version = "2.3.0-beta01" - material_version = "1.3.0-alpha03" - moshi_version = "1.11.0" - nav_compose_version = "1.0.0-alpha01" - okhttp_version = "3.14.9" - retrofit_version = "2.9.0" - room_version = "2.3.0-alpha03" - roomigrant_version = "0.2.0" - } - repositories { - google() - jcenter() - } - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_dagger_version" - } -} - -plugins { - id("com.github.ben-manes.versions") version "0.33.0" -} - -allprojects { - repositories { - google() - jcenter() - } -} - -subprojects { - repositories { - google() - jcenter() - } - if (name == "app") { - apply plugin: "com.android.application" - } else { - apply plugin: "com.android.library" - } - apply plugin: "kotlin-android" - android { - compileSdkVersion 30 - - defaultConfig { - minSdkVersion 23 - targetSdkVersion 30 - versionCode 1 - versionName "1.0" - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - } - configurations.all { - resolutionStrategy { - force "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - force "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - force "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" - } - } - tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} - -tasks { - wrapper { - gradleVersion = "6.7" - distributionType = Wrapper.DistributionType.ALL - } -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..d12b1bf9 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,18 @@ +buildscript { + apply(from = "buildSrc/buildDependencies.gradle") + val build: Map by extra + repositories { + google() + jcenter() + } + dependencies { + classpath(build.getValue("androidGradlePlugin")) + classpath(build.getValue("daggerGradlePlugin")) + classpath(build.getValue("kotlinGradlePlugin")) + } +} + +plugins { + id("com.github.ben-manes.versions") version "0.34.0" + `lobsters-plugin` +} diff --git a/buildSrc/.gitignore b/buildSrc/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/buildSrc/.gitignore @@ -0,0 +1 @@ +/build diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..dc982bd8 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,34 @@ +apply(from = "buildDependencies.gradle") +val build: Map by extra + +plugins { + `kotlin-dsl` +} + +repositories { + google() + gradlePluginPortal() +} + +kotlinDslPluginOptions { + experimentalWarning.set(false) +} + +gradlePlugin { + plugins { + register("lobsters") { + id = "lobsters-plugin" + implementationClass = "LobstersPlugin" + } + register("coreLibraryDesugaring") { + id = "core-library-desugaring" + implementationClass = "CoreLibraryDesugaringPlugin" + } + } +} + +dependencies { + implementation(build.getValue("kotlinGradlePlugin")) + implementation(build.getValue("daggerGradlePlugin")) + implementation(build.getValue("androidGradlePlugin")) +} diff --git a/buildSrc/buildDependencies.gradle b/buildSrc/buildDependencies.gradle new file mode 100644 index 00000000..3c34b50f --- /dev/null +++ b/buildSrc/buildDependencies.gradle @@ -0,0 +1,11 @@ +rootProject.ext.versions = [ + agp: '4.2.0-alpha16', + daggerHilt: '2.29.1-alpha', + kotlin: '1.4.10', +] + +rootProject.ext.build = [ + androidGradlePlugin: "com.android.tools.build:gradle:${versions.agp}", + daggerGradlePlugin: "com.google.dagger:hilt-android-gradle-plugin:${versions.daggerHilt}", + kotlinGradlePlugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}", +] diff --git a/buildSrc/src/main/java/BaseProjectConfig.kt b/buildSrc/src/main/java/BaseProjectConfig.kt new file mode 100644 index 00000000..4ca10e33 --- /dev/null +++ b/buildSrc/src/main/java/BaseProjectConfig.kt @@ -0,0 +1,98 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +import com.android.build.gradle.TestedExtension +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.tasks.Delete +import org.gradle.api.tasks.testing.Test +import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.gradle.api.tasks.wrapper.Wrapper +import org.gradle.kotlin.dsl.repositories +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +/** + * Configure root project. + * Note that classpath dependencies still need to be defined in the `buildscript` block in the top-level build.gradle.kts file. + */ +internal fun Project.configureForRootProject() { + // register task for cleaning the build directory in the root project + tasks.register("clean", Delete::class.java) { + delete(rootProject.buildDir) + } + tasks.withType { + gradleVersion = "6.7" + distributionType = Wrapper.DistributionType.ALL + distributionSha256Sum = "0080de8491f0918e4f529a6db6820fa0b9e818ee2386117f4394f95feb1d5583" + } +} + +/** + * Configure all projects including the root project + */ +internal fun Project.configureForAllProjects() { + repositories { + google() + jcenter() + maven { setUrl("https://jitpack.io") } + } + tasks.withType { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + freeCompilerArgs = freeCompilerArgs + additionalCompilerArgs + languageVersion = "1.4" + } + } + tasks.withType { + maxParallelForks = Runtime.getRuntime().availableProcessors() * 2 + testLogging { + events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) + } + } +} +/** + * Apply configuration options for Android Application projects. + */ +@Suppress("UnstableApiUsage") +internal fun BaseAppModuleExtension.configureAndroidApplicationOptions(project: Project) { + project.tasks.withType { + kotlinOptions { + freeCompilerArgs = freeCompilerArgs + listOf( + "-Xopt-in=kotlin.RequiresOptIn", + "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", + "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi" + ) + } + } +} + +/** + * Apply baseline configurations for all Android projects (Application and Library). + */ +@Suppress("UnstableApiUsage") +internal fun TestedExtension.configureCommonAndroidOptions() { + compileSdkVersion(30) + + defaultConfig { + minSdkVersion(23) + targetSdkVersion(30) + } + + packagingOptions { + exclude("**/*.version") + exclude("**/*.txt") + exclude("**/*.kotlin_module") + exclude("**/plugin.properties") + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + testOptions.animationsDisabled = true +} diff --git a/buildSrc/src/main/java/CoreLibraryDesugaringPlugin.kt b/buildSrc/src/main/java/CoreLibraryDesugaringPlugin.kt new file mode 100644 index 00000000..824bf34f --- /dev/null +++ b/buildSrc/src/main/java/CoreLibraryDesugaringPlugin.kt @@ -0,0 +1,34 @@ +import com.android.build.gradle.AppPlugin +import com.android.build.gradle.LibraryPlugin +import com.android.build.gradle.TestedExtension +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType + +/** + * A plugin that enables Java 8 desugaring for consuming new Java language APIs. + * + * Apply this plugin to the build.gradle.kts file in Android Application or Android Library projects: + * ``` + * plugins { + * `core-library-desugaring` + * } + * ``` + */ +class CoreLibraryDesugaringPlugin : Plugin { + override fun apply(project: Project) { + project.plugins.withType { + project.extensions.getByType().configure(project) + } + + project.plugins.withType { + project.extensions.getByType().configure(project) + } + } + + private fun TestedExtension.configure(project: Project) { + compileOptions.isCoreLibraryDesugaringEnabled = true + project.dependencies.add("coreLibraryDesugaring", Dependencies.AndroidX.coreLibraryDesugaring) + } +} diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt new file mode 100644 index 00000000..fa67766a --- /dev/null +++ b/buildSrc/src/main/java/Dependencies.kt @@ -0,0 +1,111 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +private const val ANDROIDX_HILT_VERSION = "1.0.0-alpha02" +private const val DAGGER_HILT_VERSION = "2.29.1-alpha" + +object Dependencies { + const val COMPOSE_VERSION = "1.0.0-alpha06" + object Kotlin { + object Coroutines { + + private const val version = "1.4.1" + const val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version" + const val core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version" + } + } + + object AndroidX { + + const val activityKtx = "androidx.activity:activity-ktx:1.2.0-beta01" + const val appCompat = "androidx.appcompat:appcompat:1.3.0-alpha02" + const val browser = "androidx.browser:browser:1.3.0-beta01" + const val coreKtx = "androidx.core:core-ktx:1.5.0-alpha04" + const val coreLibraryDesugaring = "com.android.tools:desugar_jdk_libs:1.0.10" + const val material = "com.google.android.material:material:1.3.0-alpha03" + + object Compose { + + const val compiler = "androidx.compose.compiler:compiler:$COMPOSE_VERSION" + const val foundation = "androidx.compose.foundation:foundation:$COMPOSE_VERSION" + const val foundationLayout = "androidx.compose.foundation:foundation-layout:$COMPOSE_VERSION" + const val foundationText = "androidx.compose.foundation:foundation-text:$COMPOSE_VERSION" + const val material = "androidx.compose.material:material:$COMPOSE_VERSION" + const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha01" + const val runtime = "androidx.compose.runtime:runtime:$COMPOSE_VERSION" + const val ui = "androidx.compose.ui:ui:$COMPOSE_VERSION" + const val uiText = "androidx.compose.ui:ui-text:$COMPOSE_VERSION" + const val uiTextAndroid = "androidx.compose.ui:ui-text-android:$COMPOSE_VERSION" + const val uiUnit = "androidx.compose.ui:ui-unit:$COMPOSE_VERSION" + const val uiTooling = "androidx.ui:ui-tooling:$COMPOSE_VERSION" + } + + object Hilt { + const val dagger = "com.google.dagger:hilt-android:$DAGGER_HILT_VERSION" + const val daggerCompiler = "com.google.dagger:hilt-compiler:$DAGGER_HILT_VERSION" + const val daggerHiltCompiler = "androidx.hilt:hilt-compiler:$ANDROIDX_HILT_VERSION" + const val hiltLifecycleViewmodel = + "androidx.hilt:hilt-lifecycle-viewmodel:$ANDROIDX_HILT_VERSION" + } + + object Lifecycle { + + private const val version = "2.3.0-beta01" + const val runtimeKtx = "androidx.lifecycle:lifecycle-runtime-ktx:$version" + const val viewmodelKtx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$version" + } + + object Room { + + private const val version = "2.3.0-alpha03" + const val compiler = "androidx.room:room-compiler:$version" + const val ktx = "androidx.room:room-ktx:$version" + const val runtime = "androidx.room:room-runtime:$version" + } + } + + object ThirdParty { + + const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.3.2" + const val customtabs = "saschpe.android:customtabs:3.0.2" + + object Moshi { + + private const val version = "1.11.0" + const val codegen = "com.squareup.moshi:moshi-kotlin-codegen:$version" + const val lib = "com.squareup.moshi:moshi:$version" + } + + object Retrofit { + + private const val version = "2.9.0" + const val lib = "com.squareup.retrofit2:retrofit:$version" + const val moshi = "com.squareup.retrofit2:converter-moshi:$version" + } + + object Roomigrant { + + private const val version = "0.2.0" + const val compiler = "com.github.MatrixDev.Roomigrant:RoomigrantCompiler:$version" + const val runtime = "com.github.MatrixDev.Roomigrant:RoomigrantLib:$version" + } + + } + + object Testing { + + const val daggerHilt = "com.google.dagger:hilt-android-testing:$DAGGER_HILT_VERSION" + const val junit = "junit:junit:4.13.1" + const val mockWebServer = "com.squareup.okhttp3:mockwebserver:3.14.9" + const val uiTest = "androidx.ui:ui-test:$COMPOSE_VERSION" + + object AndroidX { + + private const val version = "1.3.1-alpha02" + const val runner = "androidx.test:runner:$version" + const val rules = "androidx.test:rules:$version" + } + } +} diff --git a/buildSrc/src/main/java/KaptConfigs.kt b/buildSrc/src/main/java/KaptConfigs.kt new file mode 100644 index 00000000..3d0e7745 --- /dev/null +++ b/buildSrc/src/main/java/KaptConfigs.kt @@ -0,0 +1,17 @@ +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.plugin.KaptExtension + +/** + * Apply default kapt configs to the [Project]. + */ +internal fun Project.configureKapt() { + extensions.configure { + javacOptions { + option("-Adagger.fastInit=enabled") + option("-Adagger.experimentalDaggerErrorMessages=enabled") + option("-Xmaxerrs", 500) + option("-Adagger.moduleBindingValidation=ERROR") + } + } +} diff --git a/buildSrc/src/main/java/KotlinCompilerArgs.kt b/buildSrc/src/main/java/KotlinCompilerArgs.kt new file mode 100644 index 00000000..021494e6 --- /dev/null +++ b/buildSrc/src/main/java/KotlinCompilerArgs.kt @@ -0,0 +1,9 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +internal val additionalCompilerArgs = listOf( + "-Xallow-jvm-ir-dependencies", + "-Xskip-prerelease-check" +) diff --git a/buildSrc/src/main/java/LobstersPlugin.kt b/buildSrc/src/main/java/LobstersPlugin.kt new file mode 100644 index 00000000..a5bd8494 --- /dev/null +++ b/buildSrc/src/main/java/LobstersPlugin.kt @@ -0,0 +1,52 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +import com.android.build.gradle.TestedExtension +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension +import com.android.build.gradle.internal.plugins.AppPlugin +import com.android.build.gradle.internal.plugins.LibraryPlugin +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.JavaLibraryPlugin +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin + +class LobstersPlugin : Plugin { + + override fun apply(project: Project) { + project.configureForAllProjects() + + if (project.isRoot) { + project.configureForRootProject() + } + + project.plugins.all { + when (this) { + is JavaPlugin, + is JavaLibraryPlugin -> { + project.tasks.withType { + options.compilerArgs.add("-Xlint:unchecked") + options.isDeprecation = true + } + } + is LibraryPlugin -> { + project.extensions.getByType().configureCommonAndroidOptions() + } + is AppPlugin -> { + project.extensions.getByType().configureCommonAndroidOptions() + project.extensions.getByType().configureAndroidApplicationOptions(project) + } + is Kapt3GradleSubplugin -> { + project.configureKapt() + } + } + } + } +} + +private val Project.isRoot get() = this == this.rootProject diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 14e30f74..99d667cc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionSha256Sum=0080de8491f0918e4f529a6db6820fa0b9e818ee2386117f4394f95feb1d5583 distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/lobsters-api/build.gradle b/lobsters-api/build.gradle deleted file mode 100644 index 14fbb225..00000000 --- a/lobsters-api/build.gradle +++ /dev/null @@ -1,14 +0,0 @@ -plugins { - id 'kotlin-kapt' -} - -dependencies { - implementation project(":model") - implementation "com.squareup.retrofit2:retrofit:$retrofit_version" - implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" - kaptTest "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version" - testImplementation "junit:junit:$junit_version" - testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - //noinspection GradleDependency - testImplementation "com.squareup.okhttp3:mockwebserver:$okhttp_version" -} diff --git a/lobsters-api/build.gradle.kts b/lobsters-api/build.gradle.kts new file mode 100644 index 00000000..41c48b8d --- /dev/null +++ b/lobsters-api/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + id("com.android.library") + kotlin("android") + kotlin("kapt") + `lobsters-plugin` +} + +dependencies { + implementation(project(":model")) + implementation(Dependencies.ThirdParty.Retrofit.lib) + implementation(Dependencies.ThirdParty.Retrofit.moshi) + kaptTest(Dependencies.ThirdParty.Moshi.codegen) + testImplementation(Dependencies.Testing.junit) + testImplementation(Dependencies.Kotlin.Coroutines.core) + testImplementation(Dependencies.Testing.mockWebServer) +} diff --git a/model/build.gradle b/model/build.gradle deleted file mode 100644 index 15922c39..00000000 --- a/model/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - id 'kotlin-kapt' -} - -dependencies { - kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version" - implementation "com.squareup.moshi:moshi:$moshi_version" -} diff --git a/model/build.gradle.kts b/model/build.gradle.kts new file mode 100644 index 00000000..cf3f95c4 --- /dev/null +++ b/model/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("com.android.library") + kotlin("android") + kotlin("kapt") + `lobsters-plugin` +} + +dependencies { + kapt(Dependencies.ThirdParty.Moshi.codegen) + implementation(Dependencies.ThirdParty.Moshi.lib) +}