2019-09-03 02:31:51 +02:00
// Gradle build config for Godot Engine's Android port.
//
// Do not remove/modify comments ending with BEGIN/END, they are used to inject
// addon-specific configuration.
buildscript {
apply from: 'config.gradle'
repositories {
google ( )
2021-06-24 08:49:18 +02:00
mavenCentral ( )
2024-01-25 18:20:33 +01:00
gradlePluginPortal ( )
maven { url "https://plugins.gradle.org/m2/" }
2019-09-03 02:31:51 +02:00
//CHUNK_BUILDSCRIPT_REPOSITORIES_BEGIN
//CHUNK_BUILDSCRIPT_REPOSITORIES_END
}
dependencies {
2024-01-25 18:20:33 +01:00
classpath "com.android.tools.build:gradle:$versions.androidGradlePlugin"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlinVersion"
2019-09-03 02:31:51 +02:00
//CHUNK_BUILDSCRIPT_DEPENDENCIES_BEGIN
//CHUNK_BUILDSCRIPT_DEPENDENCIES_END
}
}
2022-05-31 20:10:15 +02:00
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
apply from: 'config.gradle'
2019-09-03 02:31:51 +02:00
allprojects {
repositories {
google ( )
2021-06-24 08:49:18 +02:00
mavenCentral ( )
2024-01-25 18:20:33 +01:00
gradlePluginPortal ( )
maven { url "https://plugins.gradle.org/m2/" }
2019-09-03 02:31:51 +02:00
//CHUNK_ALLPROJECTS_REPOSITORIES_BEGIN
//CHUNK_ALLPROJECTS_REPOSITORIES_END
2020-04-24 09:45:14 +02:00
// Godot user plugins custom maven repos
String [ ] mavenRepos = getGodotPluginsMavenRepos ( )
if ( mavenRepos ! = null & & mavenRepos . size ( ) > 0 ) {
for ( String repoUrl : mavenRepos ) {
maven {
url repoUrl
}
}
}
2019-09-03 02:31:51 +02:00
}
}
2022-02-17 02:30:33 +01:00
configurations {
// Initializes a placeholder for the devImplementation dependency configuration.
devImplementation { }
}
2019-09-03 02:31:51 +02:00
dependencies {
2024-01-25 18:20:33 +01:00
implementation "androidx.fragment:fragment:$versions.fragmentVersion"
2020-01-27 18:56:27 +01:00
2019-09-03 02:31:51 +02:00
if ( rootProject . findProject ( ":lib" ) ) {
implementation project ( ":lib" )
2019-10-18 18:59:04 +02:00
} else if ( rootProject . findProject ( ":godot:lib" ) ) {
implementation project ( ":godot:lib" )
2019-09-03 02:31:51 +02:00
} else {
// Custom build mode. In this scenario this project is the only one around and the Godot
// library is available through the pre-generated godot-lib.*.aar android archive files.
debugImplementation fileTree ( dir: 'libs/debug' , include: [ '*.jar' , '*.aar' ] )
2022-02-17 02:30:33 +01:00
devImplementation fileTree ( dir: 'libs/dev' , include: [ '*.jar' , '*.aar' ] )
2019-09-03 02:31:51 +02:00
releaseImplementation fileTree ( dir: 'libs/release' , include: [ '*.jar' , '*.aar' ] )
}
2019-10-18 18:59:04 +02:00
2020-04-24 09:45:14 +02:00
// Godot user plugins remote dependencies
String [ ] remoteDeps = getGodotPluginsRemoteBinaries ( )
if ( remoteDeps ! = null & & remoteDeps . size ( ) > 0 ) {
for ( String dep : remoteDeps ) {
implementation dep
}
}
2019-10-18 18:59:04 +02:00
2020-04-24 09:45:14 +02:00
// Godot user plugins local dependencies
String [ ] pluginsBinaries = getGodotPluginsLocalBinaries ( )
if ( pluginsBinaries ! = null & & pluginsBinaries . size ( ) > 0 ) {
implementation files ( pluginsBinaries )
2019-10-18 18:59:04 +02:00
}
2019-09-03 02:31:51 +02:00
//CHUNK_DEPENDENCIES_BEGIN
//CHUNK_DEPENDENCIES_END
}
android {
compileSdkVersion versions . compileSdk
buildToolsVersion versions . buildTools
2021-06-25 15:45:16 +02:00
ndkVersion versions . ndkVersion
2019-09-03 02:31:51 +02:00
2020-03-23 17:41:16 +01:00
compileOptions {
2020-10-29 00:32:45 +01:00
sourceCompatibility versions . javaVersion
targetCompatibility versions . javaVersion
2020-03-23 17:41:16 +01:00
}
2022-05-31 20:10:15 +02:00
kotlinOptions {
jvmTarget = versions . javaVersion
}
2021-09-10 04:55:42 +02:00
assetPacks = [ ":assetPacks:installTime" ]
2024-01-25 18:20:33 +01:00
namespace = 'com.godot.game'
2019-09-03 02:31:51 +02:00
defaultConfig {
2020-05-25 21:03:35 +02:00
// The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
aaptOptions {
2021-03-10 09:14:57 +01:00
ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
2020-05-25 21:03:35 +02:00
}
2020-07-23 18:17:02 +02:00
ndk {
String [ ] export_abi_list = getExportEnabledABIs ( )
abiFilters export_abi_list
}
2021-02-24 12:49:00 +01:00
manifestPlaceholders = [ godotEditorVersion: getGodotEditorVersion ( ) ]
2019-09-03 02:31:51 +02:00
// Feel free to modify the application id to your own.
2019-12-13 01:52:57 +01:00
applicationId getExportPackageName ( )
2020-07-23 18:17:02 +02:00
versionCode getExportVersionCode ( )
versionName getExportVersionName ( )
2021-12-07 23:38:33 +01:00
minSdkVersion getExportMinSdkVersion ( )
targetSdkVersion getExportTargetSdkVersion ( )
2021-06-25 15:45:16 +02:00
2022-02-17 02:30:33 +01:00
missingDimensionStrategy 'products' , 'template'
2019-09-03 02:31:51 +02:00
//CHUNK_ANDROID_DEFAULTCONFIG_BEGIN
//CHUNK_ANDROID_DEFAULTCONFIG_END
}
lintOptions {
abortOnError false
disable 'MissingTranslation' , 'UnusedResources'
}
2021-01-05 22:40:42 +01:00
ndkVersion versions . ndkVersion
2019-09-03 02:31:51 +02:00
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
2020-04-23 09:21:39 +02:00
2021-03-10 09:14:57 +01:00
// 'doNotStrip' is enabled for development within Android Studio
if ( shouldNotStrip ( ) ) {
doNotStrip '**/*.so'
}
2019-09-03 02:31:51 +02:00
}
2020-11-21 23:09:33 +01:00
signingConfigs {
2021-06-07 18:19:18 +02:00
debug {
if ( hasCustomDebugKeystore ( ) ) {
storeFile new File ( getDebugKeystoreFile ( ) )
storePassword getDebugKeystorePassword ( )
keyAlias getDebugKeyAlias ( )
keyPassword getDebugKeystorePassword ( )
}
}
2020-11-21 23:09:33 +01:00
release {
File keystoreFile = new File ( getReleaseKeystoreFile ( ) )
if ( keystoreFile . isFile ( ) ) {
storeFile keystoreFile
storePassword getReleaseKeystorePassword ( )
keyAlias getReleaseKeyAlias ( )
keyPassword getReleaseKeystorePassword ( )
}
}
}
buildTypes {
debug {
// Signing and zip-aligning are skipped for prebuilt builds, but
// performed for custom builds.
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . debug
} else {
signingConfig null
}
}
2022-02-17 02:30:33 +01:00
dev {
initWith debug
// Signing and zip-aligning are skipped for prebuilt builds, but
// performed for custom builds.
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . debug
} else {
signingConfig null
}
}
2020-11-21 23:09:33 +01:00
release {
// Signing and zip-aligning are skipped for prebuilt builds, but
// performed for custom builds.
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . release
} else {
signingConfig null
}
}
2019-09-03 02:31:51 +02:00
}
sourceSets {
main {
manifest . srcFile 'AndroidManifest.xml'
java . srcDirs = [
2020-03-25 17:00:37 +01:00
'src'
2019-09-03 02:31:51 +02:00
//DIR_SRC_BEGIN
//DIR_SRC_END
]
res . srcDirs = [
2020-03-25 17:00:37 +01:00
'res'
2019-09-03 02:31:51 +02:00
//DIR_RES_BEGIN
//DIR_RES_END
]
aidl . srcDirs = [
2020-03-25 17:00:37 +01:00
'aidl'
2019-09-03 02:31:51 +02:00
//DIR_AIDL_BEGIN
//DIR_AIDL_END
]
assets . srcDirs = [
2020-03-25 17:00:37 +01:00
'assets'
2019-09-03 02:31:51 +02:00
//DIR_ASSETS_BEGIN
//DIR_ASSETS_END
]
}
debug . jniLibs . srcDirs = [
2020-03-25 17:00:37 +01:00
'libs/debug'
2019-09-03 02:31:51 +02:00
//DIR_JNI_DEBUG_BEGIN
//DIR_JNI_DEBUG_END
2022-02-17 02:30:33 +01:00
]
dev . jniLibs . srcDirs = [
'libs/dev'
//DIR_JNI_DEV_BEGIN
//DIR_JNI_DEV_END
2019-09-03 02:31:51 +02:00
]
release . jniLibs . srcDirs = [
2020-03-25 17:00:37 +01:00
'libs/release'
2019-09-03 02:31:51 +02:00
//DIR_JNI_RELEASE_BEGIN
//DIR_JNI_RELEASE_END
]
}
applicationVariants . all { variant - >
variant . outputs . all { output - >
output . outputFileName = "android_${variant.name}.apk"
}
}
}
2020-07-23 18:17:02 +02:00
task copyAndRenameDebugApk ( type: Copy ) {
from "$buildDir/outputs/apk/debug/android_debug.apk"
into getExportPath ( )
rename "android_debug.apk" , getExportFilename ( )
}
2022-02-17 02:30:33 +01:00
task copyAndRenameDevApk ( type: Copy ) {
from "$buildDir/outputs/apk/dev/android_dev.apk"
into getExportPath ( )
rename "android_dev.apk" , getExportFilename ( )
}
2020-07-23 18:17:02 +02:00
task copyAndRenameReleaseApk ( type: Copy ) {
from "$buildDir/outputs/apk/release/android_release.apk"
into getExportPath ( )
rename "android_release.apk" , getExportFilename ( )
}
task copyAndRenameDebugAab ( type: Copy ) {
from "$buildDir/outputs/bundle/debug/build-debug.aab"
into getExportPath ( )
rename "build-debug.aab" , getExportFilename ( )
}
2022-02-17 02:30:33 +01:00
task copyAndRenameDevAab ( type: Copy ) {
from "$buildDir/outputs/bundle/dev/build-dev.aab"
into getExportPath ( )
rename "build-dev.aab" , getExportFilename ( )
}
2020-07-23 18:17:02 +02:00
task copyAndRenameReleaseAab ( type: Copy ) {
from "$buildDir/outputs/bundle/release/build-release.aab"
into getExportPath ( )
rename "build-release.aab" , getExportFilename ( )
}
2024-01-25 18:20:33 +01:00
/ * *
* Used to validate the version of the Java SDK used for the Godot gradle builds .
* /
task validateJavaVersion {
if ( JavaVersion . current ( ) ! = versions . javaVersion ) {
throw new GradleException ( "Invalid Java version ${JavaVersion.current()}. Version ${versions.javaVersion} is the required Java version for Godot gradle builds." )
}
}
/ *
When they 're scheduled to run, the copy*AARToAppModule tasks generate dependencies for the ' app '
module , so we 're ensuring the ' : app: preBuild ' task is set to run after those tasks .
* /
if ( rootProject . tasks . findByPath ( "copyDebugAARToAppModule" ) ! = null ) {
preBuild . mustRunAfter ( rootProject . tasks . named ( "copyDebugAARToAppModule" ) )
}
if ( rootProject . tasks . findByPath ( "copyDevAARToAppModule" ) ! = null ) {
preBuild . mustRunAfter ( rootProject . tasks . named ( "copyDevAARToAppModule" ) )
}
if ( rootProject . tasks . findByPath ( "copyReleaseAARToAppModule" ) ! = null ) {
preBuild . mustRunAfter ( rootProject . tasks . named ( "copyReleaseAARToAppModule" ) )
}
2019-09-03 02:31:51 +02:00
//CHUNK_GLOBAL_BEGIN
//CHUNK_GLOBAL_END