123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- plugins {
- id 'com.android.library'
- id 'org.jetbrains.kotlin.android'
- }
- ext {
- PUBLISH_VERSION = getGodotPublishVersion()
- 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")
- }
- boolean toolsFlag = flavorName == "editor"
- def buildType = variant.buildType.name
- if (buildType == null || buildType == "" || !supportedTargetsMap.containsKey(buildType)) {
- throw new GradleException("Invalid build type: $buildType")
- }
- def sconsTarget = supportedTargetsMap[buildType]
- if (sconsTarget == null || sconsTarget == "") {
- throw new GradleException("Invalid scons target: $sconsTarget")
- }
- // Update the name of the generated library
- def outputSuffix = "${buildType}.aar"
- if (toolsFlag) {
- outputSuffix = "tools.$outputSuffix"
- }
- variant.outputs.all { output ->
- output.outputFileName = "godot-lib.${outputSuffix}"
- }
- // 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", "tools=${toolsFlag}", "target=${sconsTarget}", "android_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()
- }
- }
- }
|