pineapple-src/src/android/app/build.gradle.kts

283 lines
9.0 KiB
Plaintext
Raw Normal View History

2023-05-31 06:37:04 +00:00
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
2023-06-04 07:49:04 +00:00
import android.annotation.SuppressLint
2023-06-16 05:32:46 +00:00
import kotlin.collections.setOf
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
2024-02-07 22:41:59 +00:00
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
2023-06-04 07:49:04 +00:00
2023-05-31 06:37:04 +00:00
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-parcelize")
2024-01-01 22:05:00 +00:00
kotlin("plugin.serialization") version "1.9.20"
2023-06-14 21:27:30 +00:00
id("androidx.navigation.safeargs.kotlin")
2023-06-16 05:32:46 +00:00
id("org.jlleitschuh.gradle.ktlint") version "11.4.0"
2024-02-07 22:41:59 +00:00
id("com.github.triplet.play") version "3.8.6"
2023-05-31 06:37:04 +00:00
}
/**
* Use the number of seconds/10 since Jan 1 2016 as the versionCode.
* This lets us upload a new build at most every 10 seconds for the
* next 680 years.
*/
val autoVersion = (((System.currentTimeMillis() / 1000) - 1451606400) / 10).toInt()
@Suppress("UnstableApiUsage")
android {
namespace = "org.yuzu.yuzu_emu"
2023-06-29 01:27:51 +00:00
compileSdkVersion = "android-34"
2023-10-13 21:14:14 +00:00
ndkVersion = "26.1.10909125"
2023-05-31 06:37:04 +00:00
buildFeatures {
viewBinding = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
2023-06-04 07:49:04 +00:00
packaging {
2023-05-31 06:37:04 +00:00
// This is necessary for libadrenotools custom driver loading
jniLibs.useLegacyPackaging = true
}
2023-11-01 04:59:26 +00:00
androidResources {
generateLocaleConfig = true
}
2023-05-31 06:37:04 +00:00
defaultConfig {
// TODO If this is ever modified, change application_id in strings.xml
applicationId = "org.yuzu.yuzu_emu"
minSdk = 30
2023-06-29 01:27:51 +00:00
targetSdk = 34
2023-05-31 06:37:04 +00:00
versionName = getGitVersion()
2024-02-07 22:41:59 +00:00
versionCode = if (System.getenv("AUTO_VERSIONED") == "true") {
2023-06-13 04:23:21 +00:00
autoVersion
} else {
1
}
2023-05-31 06:37:04 +00:00
ndk {
2023-06-04 07:49:04 +00:00
@SuppressLint("ChromeOsAbiSupport")
2023-05-31 06:37:04 +00:00
abiFilters += listOf("arm64-v8a")
}
buildConfigField("String", "GIT_HASH", "\"${getGitHash()}\"")
buildConfigField("String", "BRANCH", "\"${getBranch()}\"")
}
2023-09-17 16:47:05 +00:00
val keystoreFile = System.getenv("ANDROID_KEYSTORE_FILE")
2024-01-22 15:35:41 +00:00
signingConfigs {
if (keystoreFile != null) {
2023-09-17 16:47:05 +00:00
create("release") {
storeFile = file(keystoreFile)
storePassword = System.getenv("ANDROID_KEYSTORE_PASS")
keyAlias = System.getenv("ANDROID_KEY_ALIAS")
keyPassword = System.getenv("ANDROID_KEYSTORE_PASS")
}
}
2024-01-22 15:35:41 +00:00
create("default") {
storeFile = file("$projectDir/debug.keystore")
storePassword = "android"
keyAlias = "androiddebugkey"
keyPassword = "android"
}
2023-09-17 16:47:05 +00:00
}
2023-05-31 06:37:04 +00:00
// Define build types, which are orthogonal to product flavors.
buildTypes {
// Signed by release key, allowing for upload to Play Store.
release {
2023-09-17 16:47:05 +00:00
signingConfig = if (keystoreFile != null) {
signingConfigs.getByName("release")
} else {
2024-01-22 15:35:41 +00:00
signingConfigs.getByName("default")
2023-09-17 16:47:05 +00:00
}
2023-06-11 21:50:23 +00:00
resValue("string", "app_name_suffixed", "yuzu")
2023-05-31 06:37:04 +00:00
isMinifyEnabled = true
isDebuggable = false
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
)
}
// builds a release build that doesn't need signing
// Attaches 'debug' suffix to version and package name, allowing installation alongside the release build.
register("relWithDebInfo") {
2023-08-24 16:22:48 +00:00
isDefault = true
2023-06-11 21:50:23 +00:00
resValue("string", "app_name_suffixed", "yuzu Debug Release")
2024-01-22 15:35:41 +00:00
signingConfig = signingConfigs.getByName("default")
2023-05-31 06:37:04 +00:00
isMinifyEnabled = true
isDebuggable = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
)
2023-06-11 21:50:23 +00:00
versionNameSuffix = "-relWithDebInfo"
applicationIdSuffix = ".relWithDebInfo"
2023-05-31 06:37:04 +00:00
isJniDebuggable = true
}
// Signed by debug key disallowing distribution on Play Store.
// Attaches 'debug' suffix to version and package name, allowing installation alongside the release build.
debug {
2024-01-22 15:35:41 +00:00
signingConfig = signingConfigs.getByName("default")
2023-06-11 21:50:23 +00:00
resValue("string", "app_name_suffixed", "yuzu Debug")
2023-05-31 06:37:04 +00:00
isDebuggable = true
isJniDebuggable = true
versionNameSuffix = "-debug"
2023-06-11 21:50:23 +00:00
applicationIdSuffix = ".debug"
2023-05-31 06:37:04 +00:00
}
}
flavorDimensions.add("version")
productFlavors {
create("mainline") {
2023-08-24 16:22:48 +00:00
isDefault = true
2023-05-31 06:37:04 +00:00
dimension = "version"
buildConfigField("Boolean", "PREMIUM", "false")
}
create("ea") {
dimension = "version"
buildConfigField("Boolean", "PREMIUM", "true")
applicationIdSuffix = ".ea"
}
}
externalNativeBuild {
cmake {
version = "3.22.1"
path = file("../../../CMakeLists.txt")
}
}
defaultConfig {
externalNativeBuild {
cmake {
arguments(
"-DENABLE_QT=0", // Don't use QT
"-DENABLE_SDL2=0", // Don't use SDL
"-DENABLE_WEB_SERVICE=0", // Don't use telemetry
"-DBUNDLE_SPEEX=ON",
"-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
"-DYUZU_USE_BUNDLED_VCPKG=ON",
"-DYUZU_USE_BUNDLED_FFMPEG=ON",
2023-12-16 18:57:01 +00:00
"-DYUZU_ENABLE_LTO=ON",
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
2023-05-31 06:37:04 +00:00
)
abiFilters("arm64-v8a", "x86_64")
}
}
}
}
2023-08-22 17:22:27 +00:00
tasks.create<Delete>("ktlintReset") {
delete(File(buildDir.path + File.separator + "intermediates/ktLint"))
}
2024-01-14 03:36:00 +00:00
val showFormatHelp = {
logger.lifecycle(
"If this check fails, please try running \"gradlew ktlintFormat\" for automatic " +
"codestyle fixes"
)
}
tasks.getByPath("ktlintKotlinScriptCheck").doFirst { showFormatHelp.invoke() }
tasks.getByPath("ktlintMainSourceSetCheck").doFirst { showFormatHelp.invoke() }
2023-08-22 17:22:27 +00:00
tasks.getByPath("loadKtlintReporters").dependsOn("ktlintReset")
2023-06-16 05:32:46 +00:00
ktlint {
2023-06-17 03:49:22 +00:00
version.set("0.47.1")
2023-06-16 05:32:46 +00:00
android.set(true)
ignoreFailures.set(false)
disabledRules.set(
setOf(
"no-wildcard-imports",
2023-06-17 03:49:22 +00:00
"package-name",
"import-ordering"
2023-06-16 05:32:46 +00:00
)
)
reporters {
reporter(ReporterType.CHECKSTYLE)
}
}
2024-02-07 22:41:59 +00:00
play {
val keyPath = System.getenv("SERVICE_ACCOUNT_KEY_PATH")
if (keyPath != null) {
serviceAccountCredentials.set(File(keyPath))
}
track.set(System.getenv("STORE_TRACK") ?: "internal")
releaseStatus.set(ReleaseStatus.COMPLETED)
}
2023-05-31 06:37:04 +00:00
dependencies {
2023-10-13 21:14:14 +00:00
implementation("androidx.core:core-ktx:1.12.0")
2023-05-31 06:37:04 +00:00
implementation("androidx.appcompat:appcompat:1.6.1")
2023-10-13 21:14:14 +00:00
implementation("androidx.recyclerview:recyclerview:1.3.1")
2023-05-31 06:37:04 +00:00
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
2023-10-13 21:14:14 +00:00
implementation("androidx.fragment:fragment-ktx:1.6.1")
2023-05-31 06:37:04 +00:00
implementation("androidx.documentfile:documentfile:1.0.1")
implementation("com.google.android.material:material:1.9.0")
2023-10-13 21:14:14 +00:00
implementation("androidx.preference:preference-ktx:1.2.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
2023-05-31 06:37:04 +00:00
implementation("io.coil-kt:coil:2.2.2")
implementation("androidx.core:core-splashscreen:1.0.1")
2023-09-22 02:05:25 +00:00
implementation("androidx.window:window:1.2.0-beta03")
2023-05-31 06:37:04 +00:00
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
2023-10-13 21:14:14 +00:00
implementation("androidx.navigation:navigation-fragment-ktx:2.7.4")
implementation("androidx.navigation:navigation-ui-ktx:2.7.4")
2023-05-31 06:37:04 +00:00
implementation("info.debatty:java-string-similarity:2.0.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
}
2024-01-14 03:36:00 +00:00
fun runGitCommand(command: List<String>): String {
return try {
ProcessBuilder(command)
2023-05-31 06:37:04 +00:00
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start().inputStream.bufferedReader().use { it.readText() }
.trim()
} catch (e: Exception) {
2024-01-14 03:36:00 +00:00
logger.error("Cannot find git")
""
2023-05-31 06:37:04 +00:00
}
}
2024-01-14 03:36:00 +00:00
fun getGitVersion(): String {
2024-02-09 04:47:18 +00:00
val gitVersion = runGitCommand(
listOf(
"git",
"describe",
"--always",
"--long"
)
).replace(Regex("(-0)?-[^-]+$"), "")
2024-01-14 03:36:00 +00:00
val versionName = if (System.getenv("GITHUB_ACTIONS") != null) {
2024-02-07 22:41:59 +00:00
System.getenv("GIT_TAG_NAME") ?: gitVersion
2024-01-14 03:36:00 +00:00
} else {
2024-02-07 22:41:59 +00:00
gitVersion
2023-05-31 06:37:04 +00:00
}
2024-02-09 04:47:18 +00:00
return versionName.ifEmpty { "0.0" }
2023-05-31 06:37:04 +00:00
}
2024-01-14 03:36:00 +00:00
fun getGitHash(): String =
runGitCommand(listOf("git", "rev-parse", "--short", "HEAD")).ifEmpty { "dummy-hash" }
fun getBranch(): String =
runGitCommand(listOf("git", "rev-parse", "--abbrev-ref", "HEAD")).ifEmpty { "dummy-hash" }