mirror of
https://github.com/godotengine/godot.git
synced 2024-12-15 10:12:40 +08:00
a5fdc95515
A snapshot version is a version that has not yet been released which allows us to deploy the same transient version incrementally, without requiring projects to upgrade the artifact version they're consuming. Those projects can use the same version to get an updated snapshot version.
185 lines
5.7 KiB
Groovy
185 lines
5.7 KiB
Groovy
plugins {
|
|
id 'com.android.library'
|
|
id 'org.jetbrains.kotlin.android'
|
|
}
|
|
|
|
ext {
|
|
PUBLISH_ARTIFACT_ID = 'godot'
|
|
}
|
|
|
|
apply from: "../scripts/publish-module.gradle"
|
|
|
|
dependencies {
|
|
implementation libraries.kotlinStdLib
|
|
implementation libraries.androidxFragment
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
buildTypes {
|
|
dev {
|
|
initWith debug
|
|
}
|
|
}
|
|
|
|
flavorDimensions "products"
|
|
productFlavors {
|
|
editor {}
|
|
template {}
|
|
}
|
|
|
|
lintOptions {
|
|
abortOnError false
|
|
disable 'MissingTranslation', 'UnusedResources'
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'META-INF/LICENSE'
|
|
exclude 'META-INF/NOTICE'
|
|
|
|
// 'doNotStrip' is enabled for development within Android Studio
|
|
if (shouldNotStrip()) {
|
|
doNotStrip '**/*.so'
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
manifest.srcFile 'AndroidManifest.xml'
|
|
java.srcDirs = ['src']
|
|
res.srcDirs = ['res']
|
|
aidl.srcDirs = ['aidl']
|
|
assets.srcDirs = ['assets']
|
|
}
|
|
|
|
debug.jniLibs.srcDirs = ['libs/debug']
|
|
dev.jniLibs.srcDirs = ['libs/dev']
|
|
release.jniLibs.srcDirs = ['libs/release']
|
|
|
|
// Editor jni library
|
|
editorDebug.jniLibs.srcDirs = ['libs/tools/debug']
|
|
editorDev.jniLibs.srcDirs = ['libs/tools/dev']
|
|
}
|
|
|
|
// Disable 'editorRelease'.
|
|
// The editor can't be used with target=release as debugging tools are then not
|
|
// included, and it would crash on errors instead of reporting them.
|
|
variantFilter { variant ->
|
|
if (variant.name == "editorRelease") {
|
|
setIgnore(true)
|
|
}
|
|
}
|
|
|
|
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"
|
|
|
|
def sconsTarget = flavorName
|
|
if (sconsTarget == "template") {
|
|
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.lifecycle("Looking for $sconsName executable path")
|
|
for (ext in sconsExts) {
|
|
String sconsNameExt = sconsName + ext
|
|
logger.lifecycle("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.lifecycle("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", "dev_mode=${devBuild}", "dev_build=${devBuild}", "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("templateRelease") {
|
|
withSourcesJar()
|
|
withJavadocJar()
|
|
}
|
|
}
|
|
}
|