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