Skip to content

Instantly share code, notes, and snippets.

@alwarren
Last active February 6, 2019 01:43
Show Gist options
  • Save alwarren/26c3052a6b5239c693152d945bdf5e0f to your computer and use it in GitHub Desktop.
Save alwarren/26c3052a6b5239c693152d945bdf5e0f to your computer and use it in GitHub Desktop.
Kotlin Build System
import java.text.DateFormat
import java.text.SimpleDateFormat
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
apply from: 'buildsystem/dependencies.gradle'
addRepos(repositories)
dependencies {
classpath deps.android_gradle_plugin
classpath deps.kotlin.kotlin_gradle_plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
addRepos(repositories)
}
task clean(type: Delete) {
delete rootProject.buildDir
}
static def getDateTime() {
DateFormat df = new SimpleDateFormat("YYYYMMDDHHmm")
return df.format(new Date())
}
task _projectZip(type:Zip) {
description = 'Makes a single zip file suitable for import.'
from projectDir
baseName = "project-files-" + getDateTime()
include 'build.gradle'
include 'gradle.properties'
include 'gradlew'
include 'gradlew.bat'
include 'settings.gradle'
include 'gradle/**'
exclude 'build'
exclude '.gradle'
exclude '*.iml'
exclude 'local.properties'
include 'app/**'
exclude 'app/*.iml'
exclude 'app/build'
include '.idea/**'
exclude '.idea/workspace.xml'
exclude '.idea/libraries'
include 'documents/**'
destinationDir file('zip')
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion build_versions.target_sdk
defaultConfig {
applicationId "com.project.example"
minSdkVersion build_versions.min_sdk
targetSdkVersion build_versions.target_sdk
versionCode 1
versionName "1.0"
testInstrumentationRunner deps.test.instrumentation
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation deps.kotlin.stdlib
implementation deps.android.appcompat
implementation deps.kotlin.core
implementation deps.android.material
implementation deps.android.constraint_layout
implementation deps.android.legacy_support
implementation deps.android.vector_drawable
testImplementation deps.test.junit4
androidTestImplementation deps.test.runner
androidTestImplementation deps.test.espresso
// coroutines
implementation deps.kotlin.coroutines
implementation deps.kotlin.coroutines_android
// timber
implementation deps.timber.base
// kodein
implementation deps.kodein.base
implementation deps.kodein.android
}
ext.deps = [:]
def versions = [:]
versions.gradle = '3.3.0'
versions.android_gradle_plugin = '3.3.0'
versions.appcompat = '1.1.0-alpha01'
versions.constraint_layout = '2.0.0-alpha3'
versions.kotlin = '1.3.11'
versions.kotlin_core = '1.1.0-alpha04'
versions.coroutines = '1.1.0'
versions.room = '2.1.0-alpha03'
versions.navigation = '1.0.0-alpha08'
versions.kodein = '5.3.0'
versions.lifecycle = '2.0.0'
versions.retrofit = '2.5.0'
versions.retrofit_coroutines = '0.9.2'
versions.gson = '2.8.5'
versions.junit4 = '4.12'
versions.junit5 = '5.3.0'
versions.test_runner = '1.1.1'
versions.espresso = '3.1.1'
versions.okhttp = '3.12.1'
versions.kodein = '5.3.0'
versions.timber = '4.7.1'
versions.threeten = '1.1.0'
versions.material = '1.1.0-alpha03'
versions.kluent = '1.46'
versions.mockito = '2.23.4'
versions.androidx_test = '1.1.0'
versions.legacy_support = '1.0.0'
def deps = [:]
def android = [:]
android.appcompat = "androidx.appcompat:appcompat:$versions.appcompat"
android.constraint_layout = "androidx.constraintlayout:constraintlayout:$versions.constraint_layout"
android.lifecycle_extensions = "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle"
android.lifecycle_compiler = "androidx.lifecycle:lifecycle-compiler:$versions.lifecycle"
android.viewmodel = "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.lifecycle"
android.material = "com.google.android.material:material:$versions.material"
android.legacy_support = "androidx.legacy:legacy-support-v4:$versions.legacy_support"
android.vector_drawable = "androidx.vectordrawable:vectordrawable:$versions.appcompat"
deps.android = android
def kotlin = [:]
kotlin.stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlin"
kotlin.core = "androidx.core:core-ktx:$versions.kotlin_core"
kotlin.coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$versions.coroutines"
kotlin.coroutines_android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.coroutines"
kotlin.kotlin_gradle_plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin"
deps.kotlin = kotlin
def gson = [:]
gson.base = "com.google.code.gson:gson:$versions.gson"
deps.gson = gson
def timber = [:]
timber.base = "com.jakewharton.timber:timber:$versions.timber"
deps.timber = timber
def threeten = [:]
threeten.base = "com.jakewharton.threetenabp:threetenabp:$versions.threeten"
deps.threeten = threeten
def retrofit = [:]
retrofit.base = "com.squareup.retrofit2:retrofit:$versions.retrofit"
retrofit.gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit"
retrofit.coroutines = "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$versions.retrofit_coroutines"
retrofit.moshi = "com.squareup.retrofit2:converter-moshi:$versions.retrofit"
deps.retrofit = retrofit
def okhttp = [:]
okhttp.mockwebserver = "com.squareup.okhttp3:mockwebserver:$versions.okhttp"
deps.okhttp = okhttp
def kodein = [:]
kodein.base = "org.kodein.di:kodein-di-generic-jvm:$versions.kodein"
kodein.android = "org.kodein.di:kodein-di-framework-android-x:$versions.kodein"
deps.kodein = kodein
def test = [:]
test.junit4 = "junit:junit:$versions.junit4"
test.junit5 = "org.junit.jupiter:junit-jupiter-api:$versions.junit5"
test.runner = "androidx.test:runner:$versions.test_runner"
test.espresso = "androidx.test.espresso:espresso-core:$versions.espresso"
test.kluent = "org.amshove.kluent:kluent:$versions.kluent"
test.mockito = "org.mockito:mockito-core:$versions.mockito"
test.androidx_test = "androidx.test:core:$versions.androidx_test"
test.androidx_test_lifecycle = "androidx.arch.core:core-testing:$versions.lifecycle"
test.instrumentation = "androidx.test.runner.AndroidJUnitRunner"
deps.test = test
def build_versions = [:]
build_versions.min_sdk = 19
build_versions.target_sdk = 28
ext.build_versions = build_versions
deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin"
ext.deps = deps
static def addRepos(RepositoryHandler handler) {
handler.jcenter()
handler.google()
}
ext.addRepos = this.&addRepos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment