2019-09-03 00:31:51 +00:00
// Gradle build config for Godot Engine's Android port.
2022-05-31 18:10:15 +00:00
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
apply from: 'config.gradle'
2019-09-03 00:31:51 +00:00
allprojects {
repositories {
google ( )
2021-06-24 06:49:18 +00:00
mavenCentral ( )
2024-01-17 21:44:11 +00:00
gradlePluginPortal ( )
maven { url "https://plugins.gradle.org/m2/" }
2020-04-24 07:45:14 +00: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 00:31:51 +00:00
}
}
2021-06-25 13:45:16 +00:00
configurations {
// Initializes a placeholder for the devImplementation dependency configuration.
devImplementation { }
}
2019-09-03 00:31:51 +00:00
dependencies {
2024-01-17 21:44:11 +00:00
implementation "androidx.fragment:fragment:$versions.fragmentVersion"
2024-06-10 00:02:03 +00:00
implementation "androidx.core:core-splashscreen:$versions.splashscreenVersion"
2020-01-27 17:56:27 +00:00
2019-09-03 00:31:51 +00:00
if ( rootProject . findProject ( ":lib" ) ) {
implementation project ( ":lib" )
2019-10-18 16:59:04 +00:00
} else if ( rootProject . findProject ( ":godot:lib" ) ) {
implementation project ( ":godot:lib" )
2019-09-03 00:31:51 +00:00
} else {
2023-02-01 23:17:06 +00:00
// Godot gradle build mode. In this scenario this project is the only one around and the Godot
2019-09-03 00:31:51 +00:00
// library is available through the pre-generated godot-lib.*.aar android archive files.
debugImplementation fileTree ( dir: 'libs/debug' , include: [ '*.jar' , '*.aar' ] )
2021-06-25 13:45:16 +00:00
devImplementation fileTree ( dir: 'libs/dev' , include: [ '*.jar' , '*.aar' ] )
2019-09-03 00:31:51 +00:00
releaseImplementation fileTree ( dir: 'libs/release' , include: [ '*.jar' , '*.aar' ] )
}
2019-10-18 16:59:04 +00:00
2020-04-24 07:45:14 +00:00
// Godot user plugins remote dependencies
String [ ] remoteDeps = getGodotPluginsRemoteBinaries ( )
if ( remoteDeps ! = null & & remoteDeps . size ( ) > 0 ) {
for ( String dep : remoteDeps ) {
implementation dep
}
}
2019-10-18 16:59:04 +00:00
2020-04-24 07:45:14 +00:00
// Godot user plugins local dependencies
String [ ] pluginsBinaries = getGodotPluginsLocalBinaries ( )
if ( pluginsBinaries ! = null & & pluginsBinaries . size ( ) > 0 ) {
implementation files ( pluginsBinaries )
2019-10-18 16:59:04 +00:00
}
2019-09-03 00:31:51 +00:00
}
android {
compileSdkVersion versions . compileSdk
buildToolsVersion versions . buildTools
2021-06-25 13:45:16 +00:00
ndkVersion versions . ndkVersion
2019-09-03 00:31:51 +00:00
2020-03-23 16:41:16 +00:00
compileOptions {
2020-10-28 23:32:45 +00:00
sourceCompatibility versions . javaVersion
targetCompatibility versions . javaVersion
2020-03-23 16:41:16 +00:00
}
2022-05-31 18:10:15 +00:00
kotlinOptions {
jvmTarget = versions . javaVersion
}
2021-09-10 02:55:42 +00:00
assetPacks = [ ":assetPacks:installTime" ]
2024-01-17 21:44:11 +00:00
namespace = 'com.godot.game'
2019-09-03 00:31:51 +00:00
defaultConfig {
2020-05-25 19:03:35 +00:00
// The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
aaptOptions {
2021-03-10 08:14:57 +00:00
ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
2020-05-25 19:03:35 +00:00
}
2020-07-31 20:48:08 +00:00
ndk {
String [ ] export_abi_list = getExportEnabledABIs ( )
abiFilters export_abi_list
}
2021-02-24 11:49:00 +00:00
manifestPlaceholders = [ godotEditorVersion: getGodotEditorVersion ( ) ]
2019-09-03 00:31:51 +00:00
// Feel free to modify the application id to your own.
2019-12-13 00:52:57 +00:00
applicationId getExportPackageName ( )
2020-07-23 16:16:03 +00:00
versionCode getExportVersionCode ( )
versionName getExportVersionName ( )
2021-12-07 22:38:33 +00:00
minSdkVersion getExportMinSdkVersion ( )
targetSdkVersion getExportTargetSdkVersion ( )
2021-06-25 13:45:16 +00:00
missingDimensionStrategy 'products' , 'template'
2019-09-03 00:31:51 +00:00
}
lintOptions {
abortOnError false
disable 'MissingTranslation' , 'UnusedResources'
}
2021-01-05 21:40:42 +00:00
ndkVersion versions . ndkVersion
2019-09-03 00:31:51 +00:00
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
2020-04-23 07:21:39 +00:00
2021-03-10 08:14:57 +00:00
// 'doNotStrip' is enabled for development within Android Studio
if ( shouldNotStrip ( ) ) {
doNotStrip '**/*.so'
}
2024-02-16 01:43:32 +00:00
jniLibs {
// Setting this to true causes AGP to package compressed native libraries when building the app
// For more background, see:
// - https://developer.android.com/build/releases/past-releases/agp-3-6-0-release-notes#extractNativeLibs
// - https://stackoverflow.com/a/44704840
useLegacyPackaging shouldUseLegacyPackaging ( )
}
2024-05-29 21:37:36 +00:00
// Always select Godot's version of libc++_shared.so in case deps have their own
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
2019-09-03 00:31:51 +00:00
}
2020-11-21 22:09:33 +00:00
signingConfigs {
2021-06-07 16:19:18 +00:00
debug {
if ( hasCustomDebugKeystore ( ) ) {
storeFile new File ( getDebugKeystoreFile ( ) )
storePassword getDebugKeystorePassword ( )
keyAlias getDebugKeyAlias ( )
keyPassword getDebugKeystorePassword ( )
}
}
2020-11-21 22:09:33 +00: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
2023-02-01 23:17:06 +00:00
// performed for Godot gradle builds.
2020-11-21 22:09:33 +00:00
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . debug
} else {
signingConfig null
}
}
2021-06-25 13:45:16 +00:00
dev {
initWith debug
// Signing and zip-aligning are skipped for prebuilt builds, but
2023-02-01 23:17:06 +00:00
// performed for Godot gradle builds.
2021-06-25 13:45:16 +00:00
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . debug
} else {
signingConfig null
}
}
2020-11-21 22:09:33 +00:00
release {
// Signing and zip-aligning are skipped for prebuilt builds, but
2023-02-01 23:17:06 +00:00
// performed for Godot gradle builds.
2020-11-21 22:09:33 +00:00
zipAlignEnabled shouldZipAlign ( )
if ( shouldSign ( ) ) {
signingConfig signingConfigs . release
} else {
signingConfig null
}
}
2019-09-03 00:31:51 +00:00
}
sourceSets {
main {
manifest . srcFile 'AndroidManifest.xml'
2019-10-18 16:59:04 +00:00
java . srcDirs = [ 'src' ]
res . srcDirs = [ 'res' ]
aidl . srcDirs = [ 'aidl' ]
assets . srcDirs = [ 'assets' ]
2019-09-03 00:31:51 +00:00
}
2021-03-22 17:38:25 +00:00
debug . jniLibs . srcDirs = [ 'libs/debug' , 'libs/debug/vulkan_validation_layers' ]
2021-06-25 13:45:16 +00:00
dev . jniLibs . srcDirs = [ 'libs/dev' ]
2019-10-18 16:59:04 +00:00
release . jniLibs . srcDirs = [ 'libs/release' ]
2019-09-03 00:31:51 +00:00
}
applicationVariants . all { variant - >
variant . outputs . all { output - >
output . outputFileName = "android_${variant.name}.apk"
}
}
}
2020-07-31 20:48:08 +00:00
task copyAndRenameDebugApk ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2020-07-31 20:48:08 +00:00
from "$buildDir/outputs/apk/debug/android_debug.apk"
into getExportPath ( )
rename "android_debug.apk" , getExportFilename ( )
}
2021-06-25 13:45:16 +00:00
task copyAndRenameDevApk ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2021-06-25 13:45:16 +00:00
from "$buildDir/outputs/apk/dev/android_dev.apk"
into getExportPath ( )
rename "android_dev.apk" , getExportFilename ( )
}
2020-07-31 20:48:08 +00:00
task copyAndRenameReleaseApk ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2020-07-31 20:48:08 +00:00
from "$buildDir/outputs/apk/release/android_release.apk"
into getExportPath ( )
rename "android_release.apk" , getExportFilename ( )
}
task copyAndRenameDebugAab ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2020-07-31 20:48:08 +00:00
from "$buildDir/outputs/bundle/debug/build-debug.aab"
into getExportPath ( )
rename "build-debug.aab" , getExportFilename ( )
}
2021-06-25 13:45:16 +00:00
task copyAndRenameDevAab ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2021-06-25 13:45:16 +00:00
from "$buildDir/outputs/bundle/dev/build-dev.aab"
into getExportPath ( )
rename "build-dev.aab" , getExportFilename ( )
}
2020-07-31 20:48:08 +00:00
task copyAndRenameReleaseAab ( type: Copy ) {
2024-04-17 14:43:21 +00:00
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
// and directories. Otherwise this check may cause permissions access failures on Windows
// machines.
doNotTrackState ( "No need for up-to-date checks for the copy-and-rename operation" )
2020-07-31 20:48:08 +00:00
from "$buildDir/outputs/bundle/release/build-release.aab"
into getExportPath ( )
rename "build-release.aab" , getExportFilename ( )
}
2023-12-21 08:13:16 +00: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." )
}
}
2024-01-17 21:44:11 +00:00
/ *
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" ) )
}