You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Both the `app` and `lib` modules had custom source sets configuration originating from the early days of the project. This updates the configuration to match the default Android Studio configuration which will simplify the addition of unit tests and instrumented tests to the project. Note that for backcompat reasons, some folders (such as the `res` folder in the `app` module) are left as is.
193 lines
6.1 KiB
Groovy
193 lines
6.1 KiB
Groovy
plugins {
|
|
id 'com.android.library'
|
|
id 'org.jetbrains.kotlin.android'
|
|
}
|
|
|
|
ext {
|
|
DEBUG_PUBLISH_ARTIFACT_ID = 'godot-debug'
|
|
PUBLISH_ARTIFACT_ID = 'godot'
|
|
TOOLS_PUBLISH_ARTIFACT_ID = 'godot-tools'
|
|
}
|
|
|
|
apply from: "../scripts/publish-module.gradle"
|
|
|
|
dependencies {
|
|
implementation "androidx.fragment:fragment:$versions.fragmentVersion"
|
|
|
|
testImplementation "junit:junit:4.13.2"
|
|
}
|
|
|
|
def pathToRootDir = "../../../../"
|
|
|
|
android {
|
|
compileSdkVersion versions.compileSdk
|
|
buildToolsVersion versions.buildTools
|
|
ndkVersion versions.ndkVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion versions.minSdk
|
|
targetSdkVersion versions.targetSdk
|
|
|
|
manifestPlaceholders = [godotLibraryVersion: getGodotLibraryVersionName()]
|
|
}
|
|
|
|
namespace = "org.godotengine.godot"
|
|
|
|
compileOptions {
|
|
sourceCompatibility versions.javaVersion
|
|
targetCompatibility versions.javaVersion
|
|
}
|
|
|
|
kotlinOptions {
|
|
jvmTarget = versions.javaVersion
|
|
}
|
|
|
|
buildFeatures {
|
|
aidl = true
|
|
buildConfig = true
|
|
}
|
|
|
|
buildTypes {
|
|
dev {
|
|
initWith debug
|
|
}
|
|
}
|
|
|
|
flavorDimensions = ["products"]
|
|
productFlavors {
|
|
editor {}
|
|
template {}
|
|
}
|
|
|
|
lintOptions {
|
|
abortOnError false
|
|
disable 'MissingTranslation', 'UnusedResources'
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'META-INF/LICENSE'
|
|
exclude 'META-INF/NOTICE'
|
|
|
|
// Debug symbols are kept for development within Android Studio.
|
|
if (shouldNotStrip()) {
|
|
jniLibs {
|
|
keepDebugSymbols += '**/*.so'
|
|
}
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
debug.jniLibs.srcDirs += ['libs/debug']
|
|
dev.jniLibs.srcDirs += ['libs/dev']
|
|
release.jniLibs.srcDirs += ['libs/release']
|
|
|
|
// Editor jni library
|
|
editorRelease.jniLibs.srcDirs += ['libs/tools/release']
|
|
editorDebug.jniLibs.srcDirs += ['libs/tools/debug']
|
|
editorDev.jniLibs.srcDirs += ['libs/tools/dev']
|
|
}
|
|
|
|
libraryVariants.all { variant ->
|
|
def flavorName = variant.getFlavorName()
|
|
if (flavorName == null || flavorName == "") {
|
|
throw new GradleException("Invalid product flavor: $flavorName")
|
|
}
|
|
|
|
def buildType = variant.buildType.name
|
|
if (buildType == null || buildType == "" || !supportedFlavorsBuildTypes[flavorName].contains(buildType)) {
|
|
throw new GradleException("Invalid build type: $buildType")
|
|
}
|
|
|
|
boolean devBuild = buildType == "dev"
|
|
boolean debugSymbols = devBuild
|
|
boolean runTests = devBuild
|
|
boolean storeRelease = buildType == "release"
|
|
boolean productionBuild = storeRelease
|
|
|
|
def sconsTarget = flavorName
|
|
if (sconsTarget == "template") {
|
|
// Tests are not supported on template builds
|
|
runTests = false
|
|
switch (buildType) {
|
|
case "release":
|
|
sconsTarget += "_release"
|
|
break
|
|
case "debug":
|
|
case "dev":
|
|
default:
|
|
sconsTarget += "_debug"
|
|
break
|
|
}
|
|
}
|
|
|
|
// Update the name of the generated library
|
|
def outputSuffix = "${sconsTarget}"
|
|
if (devBuild) {
|
|
outputSuffix = "${outputSuffix}.dev"
|
|
}
|
|
variant.outputs.all { output ->
|
|
output.outputFileName = "godot-lib.${outputSuffix}.aar"
|
|
}
|
|
|
|
// Find scons' executable path
|
|
File sconsExecutableFile = null
|
|
def sconsName = "scons"
|
|
def sconsExts = (org.gradle.internal.os.OperatingSystem.current().isWindows()
|
|
? [".bat", ".cmd", ".ps1", ".exe"]
|
|
: [""])
|
|
logger.debug("Looking for $sconsName executable path")
|
|
for (ext in sconsExts) {
|
|
String sconsNameExt = sconsName + ext
|
|
logger.debug("Checking $sconsNameExt")
|
|
sconsExecutableFile = org.gradle.internal.os.OperatingSystem.current().findInPath(sconsNameExt)
|
|
if (sconsExecutableFile != null) {
|
|
// We're done!
|
|
break
|
|
}
|
|
// Check all the options in path
|
|
List<File> allOptions = org.gradle.internal.os.OperatingSystem.current().findAllInPath(sconsNameExt)
|
|
if (!allOptions.isEmpty()) {
|
|
// Pick the first option and we're done!
|
|
sconsExecutableFile = allOptions.get(0)
|
|
break
|
|
}
|
|
}
|
|
if (sconsExecutableFile == null) {
|
|
throw new GradleException("Unable to find executable path for the '$sconsName' command.")
|
|
} else {
|
|
logger.debug("Found executable path for $sconsName: ${sconsExecutableFile.absolutePath}")
|
|
}
|
|
|
|
for (String selectedAbi : selectedAbis) {
|
|
if (!supportedAbis.contains(selectedAbi)) {
|
|
throw new GradleException("Invalid selected abi: $selectedAbi")
|
|
}
|
|
|
|
// Creating gradle task to generate the native libraries for the selected abi.
|
|
def taskName = getSconsTaskName(flavorName, buildType, selectedAbi)
|
|
tasks.create(name: taskName, type: Exec) {
|
|
executable sconsExecutableFile.absolutePath
|
|
args "--directory=${pathToRootDir}", "platform=android", "store_release=${storeRelease}", "production=${productionBuild}", "dev_mode=${devBuild}", "dev_build=${devBuild}", "debug_symbols=${debugSymbols}", "tests=${runTests}", "target=${sconsTarget}", "arch=${selectedAbi}", "-j" + Runtime.runtime.availableProcessors()
|
|
}
|
|
|
|
// Schedule the tasks so the generated libs are present before the aar file is packaged.
|
|
tasks["merge${flavorName.capitalize()}${buildType.capitalize()}JniLibFolders"].dependsOn taskName
|
|
}
|
|
}
|
|
|
|
publishing {
|
|
singleVariant("templateDebug") {
|
|
withSourcesJar()
|
|
withJavadocJar()
|
|
}
|
|
singleVariant("templateRelease") {
|
|
withSourcesJar()
|
|
withJavadocJar()
|
|
}
|
|
singleVariant("editorRelease") {
|
|
withSourcesJar()
|
|
withJavadocJar()
|
|
}
|
|
}
|
|
}
|