dolphin/Source/Android/app/build.gradle.kts
JosJuice 14a802b58b Android: Add 16 KiB page size support
So far, Dolphin hasn't been able to run on Android devices that use a
16 KiB page size. 16 KiB page sizes are a very new Android feature that
no phones have shipped with so far, so we're still compatible with the
phones that exist out there, but let's get this fixed before phones
start shipping with 16 KiB page sizes.

Because I couldn't get Android Studio's emulator to work, I haven't been
able to confirm that this change actually makes Dolphin fully compatible
with devices that use a 16 KiB page size. But I have confirmed that this
doesn't break anything on a regular 4 KiB page size device.
2024-09-28 13:43:49 +02:00

230 lines
7.4 KiB
Plaintext

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
kotlin("plugin.serialization") version "1.8.21"
id("androidx.baselineprofile")
}
@Suppress("UnstableApiUsage")
android {
compileSdkVersion = "android-34"
ndkVersion = "27.0.12077973"
buildFeatures {
viewBinding = true
buildConfig = true
}
compileOptions {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
lint {
// This is important as it will run lint but not abort on error
// Lint has some overly obnoxious "errors" that should really be warnings
abortOnError = false
//Uncomment disable lines for test builds...
//disable "MissingTranslation"
//disable "ExtraTranslation"
}
defaultConfig {
applicationId = "org.dolphinemu.dolphinemu"
minSdk = 21
targetSdk = 34
versionCode = getBuildVersionCode()
versionName = getGitVersion()
buildConfigField("String", "GIT_HASH", "\"${getGitHash()}\"")
buildConfigField("String", "BRANCH", "\"${getBranch()}\"")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
create("release") {
if (project.hasProperty("keystore")) {
storeFile = file(project.property("keystore")!!)
storePassword = project.property("storepass").toString()
keyAlias = project.property("keyalias").toString()
keyPassword = project.property("keypass").toString()
}
}
}
// Define build types, which are orthogonal to product flavors.
buildTypes {
// Signed by release key, allowing for upload to Play Store.
release {
if (project.hasProperty("keystore")) {
signingConfig = signingConfigs.getByName("release")
}
resValue("string", "app_name_suffixed", "Dolphin Emulator")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
)
}
// Signed by debug key disallowing distribution on Play Store.
// Attaches "debug" suffix to version and package name, allowing installation alongside the release build.
debug {
resValue("string", "app_name_suffixed", "Dolphin Debug")
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
isJniDebuggable = true
}
}
externalNativeBuild {
cmake {
path = file("../../../CMakeLists.txt")
version = "3.22.1+"
}
}
namespace = "org.dolphinemu.dolphinemu"
defaultConfig {
externalNativeBuild {
cmake {
arguments(
"-DANDROID_STL=c++_static",
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
// , "-DENABLE_GENERIC=ON"
)
abiFilters("arm64-v8a", "x86_64") //, "armeabi-v7a", "x86"
// Uncomment the line below if you don't want to build the C++ unit tests
//targets("main", "hook_impl", "main_hook", "gsl_alloc_hook", "file_redirect_hook")
}
}
}
packaging {
jniLibs.useLegacyPackaging = true
}
}
dependencies {
baselineProfile(project(":benchmark"))
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
implementation("androidx.core:core-ktx:1.13.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.cardview:cardview:1.0.0")
implementation("androidx.recyclerview:recyclerview:1.3.2")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.fragment:fragment-ktx:1.6.2")
implementation("androidx.slidingpanelayout:slidingpanelayout:1.2.0")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.preference:preference-ktx:1.2.1")
implementation("androidx.profileinstaller:profileinstaller:1.3.1")
// Kotlin extensions for lifecycle components
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
// Android TV UI libraries.
implementation("androidx.leanback:leanback:1.0.0")
implementation("androidx.tvprovider:tvprovider:1.0.0")
// For REST calls
implementation("com.android.volley:volley:1.2.1")
// For loading game covers from disk and GameTDB
implementation("io.coil-kt:coil:2.6.0")
// For loading custom GPU drivers
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
implementation("com.nononsenseapps:filepicker:4.2.1")
}
fun getGitVersion(): String {
try {
return ProcessBuilder("git", "describe", "--always", "--long")
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start().inputStream.bufferedReader().use { it.readText() }
.trim()
.replace(Regex("(-0)?-[^-]+$"), "")
} catch (e: Exception) {
logger.error("Cannot find git, defaulting to dummy version number")
}
return "0.0"
}
fun getBuildVersionCode(): Int {
try {
val commitCount = Integer.valueOf(
ProcessBuilder("git", "rev-list", "--first-parent", "--count", "HEAD")
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start().inputStream.bufferedReader().use { it.readText() }
.trim()
)
val isRelease = ProcessBuilder("git", "describe", "--exact-match", "HEAD")
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start()
.waitFor() == 0
return commitCount * 2 + (if (isRelease) 0 else 1)
} catch (e: Exception) {
logger.error("Cannot find git, defaulting to dummy version code")
}
return 1
}
fun getGitHash(): String {
try {
return ProcessBuilder("git", "rev-parse", "HEAD")
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start().inputStream.bufferedReader().use { it.readText() }
.trim()
} catch (e: Exception) {
logger.error("Cannot find git, defaulting to dummy git hash")
}
return "0"
}
fun getBranch(): String {
try {
return ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD")
.directory(project.rootDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start().inputStream.bufferedReader().use { it.readText() }
.trim()
} catch (e: Exception) {
logger.error("Cannot find git, defaulting to dummy git hash")
}
return "master"
}