Gradle Kotlin DSL (#2634)

* Ease migration to Gradle Kotlin DSL by changing quotes, function calls and plugin definitions

* Migrate build scripts to Gradle Kotlin DSL
This commit is contained in:
Daniel Bälz
2020-05-18 23:14:01 +02:00
committed by GitHub
parent c9e63b3e00
commit 47d7e8ef09
17 changed files with 587 additions and 527 deletions

View File

@ -1,186 +0,0 @@
android {
buildToolsVersion "29.0.2"
compileSdkVersion 29
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
androidTest.setRoot('tests')
}
packagingOptions {
exclude 'META-INF/robovm/ios/robovm.xml'
}
defaultConfig {
applicationId "com.unciv.app"
minSdkVersion 14
targetSdkVersion 29
versionCode appCodeNumber
versionName appVersion
archivesBaseName = "Unciv"
}
// necessary for Android Work lib
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
// Had to add this crap for Travis to build, it wanted to sign the app
// but couldn't create the debug keystore for some reason
signingConfigs {
debug {
storeFile rootProject.file('debug.keystore')
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
}
}
buildTypes {
release {
// Don't add local save files and fonts to release, obviously
aaptOptions {
ignoreAssetsPattern "!SaveFiles:!fonts:!maps:!music:!mods"
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
// Don't add local save files and fonts to release, obviously
aaptOptions {
ignoreAssetsPattern "!SaveFiles:!fonts:!maps:!music"
}
}
}
lintOptions {
disable 'MissingTranslation'
}
}
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task copyAndroidNatives() {
doFirst {
file("libs/armeabi/").mkdirs()
file("libs/armeabi-v7a/").mkdirs()
file("libs/arm64-v8a/").mkdirs()
file("libs/x86_64/").mkdirs()
file("libs/x86/").mkdirs()
configurations.natives.files.each { jar ->
def outputDir = null
if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
if(jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
if(jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi")
if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64")
if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
if(outputDir != null) {
copy {
from zipTree(jar)
into outputDir
include "*.so"
}
}
}
}
}
tasks.whenTaskAdded { packageTask ->
if (packageTask.name.contains("package")) {
packageTask.dependsOn 'copyAndroidNatives'
}
}
task run(type: Exec) {
def path
def localProperties = project.file("../local.properties")
if (localProperties.exists()) {
Properties properties = new Properties()
localProperties.withInputStream { instr ->
properties.load(instr)
}
def sdkDir = properties.getProperty('sdk.dir')
if (sdkDir) {
path = sdkDir
} else {
path = "$System.env.ANDROID_HOME"
}
} else {
path = "$System.env.ANDROID_HOME"
}
def adb = path + "/platform-tools/adb"
commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.unciv.app/AndroidLauncher'
}
dependencies {
implementation 'androidx.core:core:1.2.0'
implementation "androidx.work:work-runtime-ktx:2.3.2"
}
// sets up the Android Eclipse project, using the old Ant based build.
eclipse {
// need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin
// ignores any nodes added in classpath.file.withXml
sourceSets {
main {
java.srcDirs "src", 'gen'
}
}
jdt {
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
classpath {
plusConfigurations += [ project.configurations.compile ]
containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'
}
project {
name = appName + "-android"
natures 'com.android.ide.eclipse.adt.AndroidNature'
buildCommands.clear()
buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder"
buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder"
buildCommand "org.eclipse.jdt.core.javabuilder"
buildCommand "com.android.ide.eclipse.adt.ApkBuilder"
}
}
// sets up the Android Idea project, using the old Ant based build.
idea {
module {
sourceDirs += file("src")
scopes = [ COMPILE: [plus:[project.configurations.compile]]]
iml {
withXml {
def node = it.asNode()
def builder = NodeBuilder.newInstance()
builder.current = node
builder.component(name: "FacetManager") {
facet(type: "android", name: "Android") {
configuration {
option(name: "UPDATE_PROPERTY_FILES", value:"true")
}
}
}
}
}
}
}

162
android/build.gradle.kts Normal file
View File

@ -0,0 +1,162 @@
import com.unciv.build.BuildConfig
import java.util.*
plugins {
id("com.android.application")
id("kotlin-android")
id("kotlin-android-extensions")
}
android {
buildToolsVersion("29.0.2")
compileSdkVersion(29)
sourceSets {
getByName("main").apply {
manifest.srcFile("AndroidManifest.xml")
java.srcDirs("src")
aidl.srcDirs("src")
renderscript.srcDirs("src")
res.srcDirs("res")
assets.srcDirs("assets")
jniLibs.srcDirs("libs")
}
}
packagingOptions {
exclude("META-INF/robovm/ios/robovm.xml")
}
defaultConfig {
applicationId = "com.unciv.app"
minSdkVersion(14)
targetSdkVersion(29)
versionCode = BuildConfig.appCodeNumber
versionName = BuildConfig.appVersion
base.archivesBaseName = "Unciv"
}
// necessary for Android Work lib
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
// Had to add this crap for Travis to build, it wanted to sign the app
// but couldn't create the debug keystore for some reason
signingConfigs {
getByName("debug") {
storeFile = rootProject.file("debug.keystore")
keyAlias = "androiddebugkey"
keyPassword = "android"
storePassword = "android"
}
}
buildTypes {
getByName("release") {
// Don't add local save files and fonts to release, obviously
aaptOptions {
ignoreAssetsPattern = "!SaveFiles:!fonts:!maps:!music:!mods"
}
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
getByName("debug") {
// Don't add local save files and fonts to release, obviously
aaptOptions {
ignoreAssetsPattern = "!SaveFiles:!fonts:!maps:!music"
}
}
}
lintOptions {
disable("MissingTranslation")
}
}
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task("copyAndroidNatives") {
val natives: Configuration by configurations
doFirst {
file("libs/armeabi/").mkdirs()
file("libs/armeabi-v7a/").mkdirs()
file("libs/arm64-v8a/").mkdirs()
file("libs/x86_64/").mkdirs()
file("libs/x86/").mkdirs()
natives.forEach { jar ->
val outputDir: File? = when {
jar.name.endsWith("natives-arm64-v8a.jar") -> file("libs/arm64-v8a")
jar.name.endsWith("natives-armeabi-v7a.jar") -> file("libs/armeabi-v7a")
jar.name.endsWith("natives-armeabi.jar") -> file("libs/armeabi")
jar.name.endsWith("natives-x86_64.jar") -> file("libs/x86_64")
jar.name.endsWith("natives-x86.jar") -> file("libs/x86")
else -> null
}
outputDir?.let {
copy {
from(zipTree(jar))
into(outputDir)
include("*.so")
}
}
}
}
}
tasks.whenTaskAdded {
if ("package" in name) {
dependsOn("copyAndroidNatives")
}
}
tasks.register<JavaExec>("run") {
val localProperties = project.file("../local.properties")
val path = if (localProperties.exists()) {
val properties = Properties()
localProperties.inputStream().use { properties.load(it) }
properties.getProperty("sdk.dir") ?: System.getenv("ANDROID_HOME")
} else {
System.getenv("ANDROID_HOME")
}
val adb = "$path/platform-tools/adb"
doFirst {
project.exec {
commandLine(adb, "shell", "am", "start", "-n", "com.unciv.app/AndroidLauncher")
}
}
}
dependencies {
implementation("androidx.core:core:1.2.0")
implementation("androidx.work:work-runtime-ktx:2.3.2")
}
// sets up the Android Eclipse project, using the old Ant based build.
eclipse {
jdt {
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
}
classpath {
plusConfigurations = plusConfigurations.apply { add(project.configurations.compile.get()) }
containers("com.android.ide.eclipse.adt.ANDROID_FRAMEWORK", "com.android.ide.eclipse.adt.LIBRARIES")
}
project {
name = "${BuildConfig.appName}-android"
natures("com.android.ide.eclipse.adt.AndroidNature")
buildCommands.clear()
buildCommand("com.android.ide.eclipse.adt.ResourceManagerBuilder")
buildCommand("com.android.ide.eclipse.adt.PreCompilerBuilder")
buildCommand("org.eclipse.jdt.core.javabuilder")
buildCommand("com.android.ide.eclipse.adt.ApkBuilder")
}
}