diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp
index 1182a3df88b..6ebc9fef335 100644
--- a/platform/android/export/export_plugin.cpp
+++ b/platform/android/export/export_plugin.cpp
@@ -2106,11 +2106,6 @@ String EditorExportPlatformAndroid::get_export_option_warning(const EditorExport
if (!enabled_deprecated_plugins_names.is_empty() && !gradle_build_enabled) {
return TTR("\"Use Gradle Build\" must be enabled to use the plugins.");
}
-#ifdef ANDROID_ENABLED
- if (gradle_build_enabled) {
- return TTR("Support for \"Use Gradle Build\" on Android is currently experimental.");
- }
-#endif // ANDROID_ENABLED
} else if (p_name == "gradle_build/compress_native_libraries") {
bool gradle_build_enabled = p_preset->get("gradle_build/use_gradle_build");
if (bool(p_preset->get("gradle_build/compress_native_libraries")) && !gradle_build_enabled) {
diff --git a/platform/android/java/lib/src/main/java/org/godotengine/godot/nativeapi/GodotNativeBridge.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/nativeapi/GodotNativeBridge.kt
index ffdaecb1f0c..a1e56923336 100644
--- a/platform/android/java/lib/src/main/java/org/godotengine/godot/nativeapi/GodotNativeBridge.kt
+++ b/platform/android/java/lib/src/main/java/org/godotengine/godot/nativeapi/GodotNativeBridge.kt
@@ -31,7 +31,10 @@
package org.godotengine.godot.nativeapi
import android.annotation.SuppressLint
+import android.app.AlertDialog
import android.content.Context
+import android.content.DialogInterface
+import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.os.VibrationEffect
@@ -40,9 +43,10 @@ import android.util.Log
import android.util.Rational
import android.util.TypedValue
import androidx.annotation.Keep
+import androidx.core.net.toUri
import org.godotengine.godot.Godot
import org.godotengine.godot.GodotActivity
-import org.godotengine.godot.GodotLib
+import org.godotengine.godot.R
import org.godotengine.godot.error.Error
import org.godotengine.godot.feature.PictureInPictureProvider
import org.godotengine.godot.io.FilePicker
@@ -306,8 +310,29 @@ internal class GodotNativeBridge(private val godot: Godot) {
private fun nativeBuildEnvConnect(callback: GodotCallable): Boolean {
try {
- val buildProvider = godot.primaryHost?.getBuildProvider()
- return buildProvider?.buildEnvConnect(callback) ?: false
+ val buildProvider = godot.primaryHost?.buildProvider
+ val success = buildProvider?.buildEnvConnect(callback) ?: false
+ if (!success) {
+ val activity = godot.getActivity() ?: return false
+ godot.runOnHostThread {
+ val builder = AlertDialog.Builder(activity)
+ .setMessage(activity.getString(R.string.gabe_connection_error_message))
+ .setTitle(activity.getString(R.string.gabe_connection_error_title))
+ .setCancelable(false)
+ .setPositiveButton(activity.getString(R.string.dialog_download)) { dialog: DialogInterface, _: Int ->
+ val intent = Intent(Intent.ACTION_VIEW, "https://godotengine.org/download/android/".toUri())
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ activity.startActivity(intent)
+ dialog.cancel()
+ }
+ .setNegativeButton(activity.getString(R.string.dialog_cancel)) { dialog: DialogInterface, _: Int ->
+ dialog.dismiss()
+ }
+ val dialog = builder.create()
+ dialog.show()
+ }
+ }
+ return success
} catch (e: Exception) {
Log.e(TAG, "Unable to connect to build environment", e)
return false
@@ -316,7 +341,7 @@ internal class GodotNativeBridge(private val godot: Godot) {
private fun nativeBuildEnvDisconnect() {
try {
- val buildProvider = godot.primaryHost?.getBuildProvider()
+ val buildProvider = godot.primaryHost?.buildProvider
buildProvider?.buildEnvDisconnect()
} catch (e: Exception) {
Log.e(TAG, "Unable to disconnect from build environment", e)
@@ -332,7 +357,7 @@ internal class GodotNativeBridge(private val godot: Godot) {
resultCallback: GodotCallable
): Int {
try {
- val buildProvider = godot.primaryHost?.getBuildProvider()
+ val buildProvider = godot.primaryHost?.buildProvider
return buildProvider?.buildEnvExecute(
buildTool,
arguments,
@@ -349,7 +374,7 @@ internal class GodotNativeBridge(private val godot: Godot) {
private fun nativeBuildEnvCancel(jobId: Int) {
try {
- val buildProvider = godot.primaryHost?.getBuildProvider()
+ val buildProvider = godot.primaryHost?.buildProvider
buildProvider?.buildEnvCancel(jobId)
} catch (e: Exception) {
Log.e(TAG, "Unable to cancel command in build environment", e)
@@ -358,7 +383,7 @@ internal class GodotNativeBridge(private val godot: Godot) {
private fun nativeBuildEnvCleanProject(projectPath: String, buildDir: String, callback: GodotCallable) {
try {
- val buildProvider = godot.primaryHost?.getBuildProvider()
+ val buildProvider = godot.primaryHost?.buildProvider
buildProvider?.buildEnvCleanProject(projectPath, buildDir, callback)
} catch (e: Exception) {
Log.e(TAG, "Unable to clean project in build environment", e)
diff --git a/platform/android/java/lib/src/main/res/values/strings.xml b/platform/android/java/lib/src/main/res/values/strings.xml
index 75ecfcbda15..f3f70f3b719 100644
--- a/platform/android/java/lib/src/main/res/values/strings.xml
+++ b/platform/android/java/lib/src/main/res/values/strings.xml
@@ -7,4 +7,8 @@
OK
+ Cancel
+ Download
+ Unable to connect to the Godot Android Build Environment (GABE). Please make sure it\'s installed on your device.
+ Connection Failed!