Unciv/android/build.gradle.kts
2024-08-04 22:05:06 +03:00

152 lines
4.5 KiB
Plaintext

import com.unciv.build.AndroidImagePacker
import com.unciv.build.BuildConfig
import java.util.Properties
plugins {
id("com.android.application")
id("kotlin-android")
}
android {
compileSdk = 34
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")
}
}
packaging {
resources.excludes += "META-INF/robovm/ios/robovm.xml"
// part of kotlinx-coroutines-android, should not go into the apk
resources.excludes += "DebugProbesKt.bin"
}
defaultConfig {
namespace = BuildConfig.identifier
applicationId = BuildConfig.identifier
minSdk = 21
targetSdk = 34 // See #5044
versionCode = BuildConfig.appCodeNumber
versionName = BuildConfig.appVersion
base.archivesName.set("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("android/debug.keystore")
keyAlias = "androiddebugkey"
keyPassword = "android"
storePassword = "android"
}
}
buildTypes {
debug {
isDebuggable = true
}
release {
// If you make this true you get a version of the game that just flat-out doesn't run
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
isDebuggable = false
}
}
lint {
disable += "MissingTranslation" // see res/values/strings.xml
}
compileOptions {
targetCompatibility = JavaVersion.VERSION_1_8
isCoreLibraryDesugaringEnabled = true
}
androidResources {
// Don't add local save files and fonts to release, obviously
ignoreAssetsPattern = "!SaveFiles:!fonts:!maps:!music:!mods"
}
buildFeatures {
renderScript = true
aidl = true
}
}
task("texturePacker") {
doFirst {
logger.info("Calling TexturePacker")
AndroidImagePacker.packImages(projectDir.path)
}
}
// 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 {
val rx = Regex(""".*natives-([^.]+)\.jar$""")
natives.forEach { jar ->
if (rx.matches(jar.name)) {
val outputDir = file(rx.replace(jar.name) { "libs/" + it.groups[1]!!.value })
outputDir.mkdirs()
copy {
from(zipTree(jar))
into(outputDir)
include("*.so")
}
}
}
}
dependsOn("texturePacker")
}
tasks.whenTaskAdded {
// See https://github.com/yairm210/Unciv/issues/4842
if ("package" in name || "assemble" in name || "bundleRelease" 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-ktx:1.10.1")
implementation("androidx.work:work-runtime-ktx:2.8.1")
// Needed to convert e.g. Android 26 API calls to Android 21
// If you remove this run `./gradlew :android:lintDebug` to ensure everything's okay.
// If you want to upgrade this, check it's working by building an apk,
// or by running `./gradlew :android:assembleRelease` which does that
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
}