chore: manage dependencies with buildSrc, Kotlin DSL (#32)

This commit is contained in:
Adeniyi Mayokun
2021-02-28 20:35:28 +01:00
committed by GitHub
parent 21df873c5f
commit 3fda5f9d8d
132 changed files with 567 additions and 288 deletions

View File

@ -16,9 +16,9 @@ jobs:
ALGOLIA_APP_ID: ${{ secrets.ALGOLIAAPPID }}
run: |
touch apikey.properties
echo "API_KEY = $API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY = $ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID = $ALGOLIA_APP_ID" >> apikey.properties
echo "API_KEY=$API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY=$ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID=$ALGOLIA_APP_ID" >> apikey.properties
- name: Set up JDK 1.8
uses: actions/setup-java@v1
@ -46,9 +46,9 @@ jobs:
ALGOLIA_APP_ID: ${{ secrets.ALGOLIAAPPID }}
run: |
touch apikey.properties
echo "API_KEY = $API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY = $ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID = $ALGOLIA_APP_ID" >> apikey.properties
echo "API_KEY=$API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY=$ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID=$ALGOLIA_APP_ID" >> apikey.properties
- name: Set up JDK 1.8
uses: actions/setup-java@v1

View File

@ -23,9 +23,9 @@ jobs:
ALGOLIA_APP_ID: ${{ secrets.ALGOLIAAPPID }}
run: |
touch apikey.properties
echo "API_KEY = $API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY = $ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID = $ALGOLIA_APP_ID" >> apikey.properties
echo "API_KEY=$API_KEY" >> apikey.properties
echo "ALGOLIA_API_KEY=$ALGOLIA_API_KEY" >> apikey.properties
echo "ALGOLIA_APP_ID=$ALGOLIA_APP_ID" >> apikey.properties
- name: Set up JDK 1.8
uses: actions/setup-java@v1

1
.idea/gradle.xml generated
View File

@ -12,6 +12,7 @@
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/buildSrc" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />

View File

@ -1,203 +0,0 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin"
def apikeyPropertiesFile = rootProject.file("apikey.properties")
def apikeyProperties = new Properties()
apikeyProperties.load(new FileInputStream(apikeyPropertiesFile))
android {
compileSdkVersion 30
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.mayokunadeniyi.instantweather"
minSdkVersion 21
targetSdkVersion 30
versionCode 4
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "API_KEY", apikeyProperties['API_KEY'])
buildConfigField("String", "ALGOLIA_API_KEY", apikeyProperties['ALGOLIA_API_KEY'])
buildConfigField("String", "ALGOLIA_APP_ID", apikeyProperties['ALGOLIA_APP_ID'])
buildConfigField("String","BASE_URL","\"http://api.openweathermap.org/\"")
javaCompileOptions {
annotationProcessorOptions {
arguments += ["room.schemaLocation":
"$projectDir/schemas".toString()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
android {
sourceSets {
String sharedTestDir = 'src/sharedTest/java'
test {
java.srcDirs += sharedTestDir
}
androidTest {
java.srcDirs += sharedTestDir
}
}
}
buildFeatures {
dataBinding {
enabled = true
enabledForTests = true
}
}
testOptions.unitTests {
includeAndroidResources = true
returnDefaultValues = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
androidExtensions {
experimental = true
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/ASL2.0'
exclude("META-INF/*.kotlin_module")
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
//Material Design
implementation "com.google.android.material:material:$materialVersion"
//Lifecycle Extensions
implementation "android.arch.lifecycle:extensions:$lifeCycleExtensionVersion"
//Room
implementation "androidx.room:room-runtime:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
//Kotlin Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutineVersion"
//Navigation Components
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
//Retrofit
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
//Preferences
implementation "androidx.preference:preference:$preferencesVersion"
//Timber
implementation "com.jakewharton.timber:timber:$timberVersion"
// Retrofit Coroutines Support
implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$version_retrofit_coroutines_adapter"
//Weather Image
implementation 'com.github.pwittchen:weathericonview:1.1.0'
//CalenderView
implementation "com.github.shrikanth7698:Collapsible-Calendar-View-Android:$calendarVersion"
//Google Play Services
implementation "com.google.android.gms:play-services-location:$googlePlayLocation"
//VegaLayoutManager
implementation "com.stone.vega.library:VegaLayoutManager:$vega_version"
//Lifecycle KTX
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
//Algolia Search
implementation "com.algolia:instantsearch-android:$algolia_version"
//Paging Library
implementation "androidx.paging:paging-runtime-ktx:$paging_version"
//Elastic view
implementation "com.github.skydoves:elasticviews:$elastic_version"
//WorkManager
implementation "androidx.work:work-runtime-ktx:$work_version"
//Dagger
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
//OKHttp Logging Interceptor
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
//Chuck
debugImplementation "com.readystatesoftware.chuck:library:$chuck_version"
releaseImplementation "com.readystatesoftware.chuck:library-no-op:$chuck_version"
// AndroidX Test - JVM testing
testImplementation "androidx.test.ext:junit-ktx:$androidXTestExtKotlinRunnerVersion"
testImplementation "androidx.test:core-ktx:$androidXTestCoreVersion"
testImplementation "androidx.arch.core:core-testing:$archTestingVersion"
testImplementation 'junit:junit:4.13'
testImplementation "org.robolectric:robolectric:$robolectricVersion"
testImplementation "org.hamcrest:hamcrest-all:$hamcrestVersion"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutineVersion"
testImplementation "org.mockito:mockito-core:$mockitoVersion"
// AndroidX Test - Instrumented testing
androidTestImplementation "org.mockito:mockito-core:$mockitoVersion"
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
androidTestImplementation "androidx.arch.core:core-testing:$archTestingVersion"
androidTestImplementation "androidx.test:core-ktx:$androidXTestCoreVersion"
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutineVersion"
//Until the bug at https://issuetracker.google.com/128612536 is fixed
debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
}

220
app/build.gradle.kts Normal file
View File

@ -0,0 +1,220 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("com.android.application")
id("kotlin-android")
id("kotlin-android-extensions")
id("kotlin-kapt")
id("androidx.navigation.safeargs.kotlin")
id("com.google.firebase.crashlytics")
}
val API_KEY = "API_KEY"
val ALGOLIA_API_KEY = "ALGOLIA_API_KEY"
val ALGOLIA_APP_ID = "ALGOLIA_APP_ID"
fun getProperty(key: String): String {
val items = HashMap<String, String>()
val fl = rootProject.file("apikey.properties")
(fl.exists())?.let {
fl.forEachLine {
items[it.split("=")[0]] = it.split("=")[1]
}
}
return items[key] ?: ""
}
android {
compileSdkVersion(Config.compileSdkVersion)
buildToolsVersion(Config.buildTools)
defaultConfig {
applicationId(Config.applicationId)
minSdkVersion(Config.minSdkVersion)
targetSdkVersion(Config.targetSdkVersion)
versionCode(Config.versionCode)
versionName(Config.versionName)
testInstrumentationRunner(Config.testInstrumentationRunner)
buildConfigField("String", "API_KEY", getProperty(API_KEY))
buildConfigField("String", "ALGOLIA_API_KEY", getProperty(ALGOLIA_API_KEY))
buildConfigField("String", "ALGOLIA_APP_ID", getProperty(ALGOLIA_APP_ID))
buildConfigField("String", "BASE_URL", "\"http://api.openweathermap.org/\"")
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
android {
sourceSets {
getByName("test").java.srcDir("src/sharedTest/java")
getByName("androidTest").java.srcDir("src/sharedTest/java")
}
}
buildFeatures {
dataBinding = true
}
testOptions {
unitTests.apply {
isReturnDefaultValues = true
isIncludeAndroidResources = true
}
}
compileOptions {
sourceCompatibility(Config.javaVersion)
targetCompatibility(Config.javaVersion)
}
tasks.withType().all {
kotlinOptions {
jvmTarget = Config.javaVersion.toString()
}
}
androidExtensions {
isExperimental = true
}
packagingOptions {
exclude("META-INF/DEPENDENCIES")
exclude("META-INF/LICENSE")
exclude("META-INF/LICENSE.txt")
exclude("META-INF/license.txt")
exclude("META-INF/NOTICE")
exclude("META-INF/NOTICE.txt")
exclude("META-INF/notice.txt")
exclude("META-INF/LGPL2.1")
exclude("META-INF/ASL2.0")
exclude("META-INF/*.kotlin_module")
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation(Kotlin.stdlib)
implementation(AndroidX.appCompat)
implementation(AndroidX.coreKtx)
implementation(View.constraintLayout)
implementation(AndroidX.legacySupport)
//Material Design
implementation(View.material)
//Room
implementation(Database.roomRuntime)
kapt(Database.roomCompiler)
implementation(Database.roomKtx)
//Kotlin Coroutines
implementation(Kotlin.coroutinesAndroid)
//Navigation Components
implementation(Navigation.navigationFragment)
implementation(Navigation.navigationUi)
//Retrofit
implementation(Network.retrofit)
implementation(Network.gsonConverter)
implementation(Network.gson)
//Preferences
implementation(AndroidX.preferences)
//Timber
implementation(Utils.timber)
//Weather Image
implementation(Utils.weatherImage)
//CalenderView
implementation(Utils.calendarView)
//Google Play Services
implementation(Google.googlePlayGms)
//VegaLayoutManager
implementation(Utils.vegaLayoutManager)
//Lifecycle KTX
implementation(AndroidX.viewModel)
implementation(AndroidX.liveData)
implementation(AndroidX.lifeCycleCommon)
//Algolia Search
implementation(Utils.algoliaSearch)
//Paging Library
implementation(AndroidX.paging)
//Elastic view
implementation(Utils.elasticViews)
//WorkManager
implementation(AndroidX.workManager)
//Dagger
implementation(Dagger.dagger)
kapt(Dagger.daggerCompiler)
implementation(Dagger.daggerAndroid)
kapt(Dagger.daggerProcessor)
implementation(Dagger.daggerAndroidSupport)
//OKHttp Logging Interceptor
implementation(Network.okhttpInterceptor)
//Chuck
debugImplementation(Network.chuck)
releaseImplementation(Network.chuckNoOp)
//Firebase BoM, Crashlytics, Analytics
implementation(platform(Firebase.firebaseBom))
implementation(Firebase.crashlytics)
implementation(Firebase.analytics)
// AndroidX Test - JVM testing
testImplementation(AndroidX.testExt)
testImplementation(AndroidX.coreKtxTest)
testImplementation(AndroidX.archCoreTesting)
testImplementation(UnitTest.junit)
testImplementation(UnitTest.roboelectric)
testImplementation(UnitTest.hamcrest)
testImplementation(Kotlin.coroutineTest)
testImplementation(UnitTest.mockitoCore)
// AndroidX Test - Instrumented testing
androidTestImplementation(UnitTest.mockitoCore)
androidTestImplementation(AndroidX.testExt)
androidTestImplementation(AndroidTest.espresso)
androidTestImplementation(AndroidTest.espressoContrib)
androidTestImplementation(AndroidTest.espressoIntent)
androidTestImplementation(AndroidX.archCoreTesting)
androidTestImplementation(AndroidX.coreKtxTest)
androidTestImplementation(AndroidX.testRules)
androidTestImplementation(Kotlin.coroutineTest)
//Until the bug at https://issuetracker.google.com/128612536 is fixed
debugImplementation(AndroidX.fragmentTesting)
implementation(AndroidTest.idlingResource)
}

View File

@ -1,6 +1,6 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

View File

@ -3,7 +3,6 @@ package com.mayokunadeniyi.instantweather.di.module
import android.app.Application
import android.content.Context
import com.google.gson.Gson
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
import com.mayokunadeniyi.instantweather.BuildConfig
import com.mayokunadeniyi.instantweather.utils.LocationLiveData
import com.mayokunadeniyi.instantweather.utils.SharedPreferenceHelper
@ -82,7 +81,6 @@ class AppModule {
val retrofitBuilder = Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(client.get())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.addConverterFactory(converterFactory)
val okHttpClientBuilder = OkHttpClient.Builder()

View File

@ -1,71 +0,0 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
google()
jcenter()
}
dependencies {
def nav_version = "2.3.0-alpha06"
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
plugins {
id "org.jlleitschuh.gradle.ktlint" version "9.3.0"
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
apply plugin: "org.jlleitschuh.gradle.ktlint"
}
task clean(type: Delete) {
delete rootProject.buildDir
}
//Define versions in a single place
ext {
//App dependencies
hamcrestVersion = '1.3'
junitVersion = '4.12'
robolectricVersion = '4.3.1'
androidXTestCoreVersion = '1.2.0'
androidXTestExtKotlinRunnerVersion = '1.1.1'
androidXTestRulesVersion = '1.2.0-beta01'
archTestingVersion = '2.1.0'
lifeCycleExtensionVersion = '2.1.1'
materialVersion = '1.3.0-alpha02'
retrofitVersion = '2.9.0'
roomVersion = '2.2.5'
nav_version = '2.3.0'
preferencesVersion = '1.1.1'
coroutineVersion = "1.3.3"
version_retrofit_coroutines_adapter = "0.9.2"
calendarVersion = 'v1.0.3'
googlePlayLocation = '17.0.0'
timberVersion = '4.7.1'
vega_version = '1.0.6'
lifecycle_version = '2.2.0'
algolia_version = '2.3.1'
paging_version = '2.1.2'
elastic_version = '2.0.7'
work_version = '2.4.0'
mockitoVersion = "2.27.0"
espressoVersion = "3.2.0"
fragment_version = "1.3.0-alpha06"
dagger_version = "2.31"
okhttp_version = "4.9.0"
chuck_version = "1.1.0"
}

34
build.gradle.kts Normal file
View File

@ -0,0 +1,34 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath (Plugins.gradleAndroid)
classpath (Plugins.kotlinGradlePlugin)
classpath (Plugins.safeArgs)
classpath (Plugins.crashlyticsPlugin)
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
plugins {
id("org.jlleitschuh.gradle.ktlint") version ("9.3.0")
}
allprojects {
repositories {
google()
jcenter()
maven (url = "https://jitpack.io")
}
apply(plugin = "org.jlleitschuh.gradle.ktlint")
}
tasks.register("clean").configure {
delete("build")
}

View File

@ -0,0 +1,7 @@
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/AndroidTest$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/AndroidTest.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/AndroidX$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/AndroidX.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Config.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Dagger$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Dagger.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Database$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Database.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Firebase$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Firebase.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Google$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Google.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Kotlin$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Kotlin.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Libraries.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Navigation$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Navigation.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Network$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Network.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Plugins$Version.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Plugins.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/UnitTest$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/UnitTest.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Utils$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/Utils.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/View$Versions.class:/Users/mayokunadeniyi/Documents/Instant-Weather/buildSrc/build/classes/kotlin/main/View.class

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More