diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 50dab0db1c7..107dc502fcc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ exclude: | .*thirdparty/.*| .*-(dll|dylib|so)_wrap\.[ch]| platform/android/java/editor/src/main/java/com/android/.*| - platform/android/java/lib/src/com/google/.* + platform/android/java/lib/src/main/java/com/google/.* )$ repos: @@ -148,9 +148,9 @@ repos: (?x)^( core/math/bvh_.*\.inc| platform/(?!android|ios|linuxbsd|macos|web|windows)\w+/.*| - platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView\.java| - platform/android/java/lib/src/org/godotengine/godot/gl/EGLLogWrapper\.java| - platform/android/java/lib/src/org/godotengine/godot/utils/ProcessPhoenix\.java + platform/android/java/lib/src/main/java/org/godotengine/godot/gl/GLSurfaceView\.java| + platform/android/java/lib/src/main/java/org/godotengine/godot/gl/EGLLogWrapper\.java| + platform/android/java/lib/src/main/java/org/godotengine/godot/utils/ProcessPhoenix\.java )$ - id: header-guards diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index c77aa15c6c0..41f10df1f1e 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -123,17 +123,17 @@ Copyright: 2020, Manuel Prandini License: Expat Files: platform/android/java/editor/src/main/java/com/android/* - platform/android/java/lib/aidl/com/android/* - platform/android/java/lib/res/layout/status_bar_ongoing_event_progress_bar.xml - platform/android/java/lib/src/com/google/android/* - platform/android/java/lib/src/org/godotengine/godot/input/InputManagerCompat.java - platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java + platform/android/java/lib/src/main/aidl/com/android/* + platform/android/java/lib/src/main/res/layout/status_bar_ongoing_event_progress_bar.xml + platform/android/java/lib/src/main/java/com/google/android/* + platform/android/java/lib/src/main/java/org/godotengine/godot/input/InputManagerCompat.java + platform/android/java/lib/src/main/java/org/godotengine/godot/input/InputManagerV16.java Comment: The Android Open Source Project Copyright: 2008-2016, The Android Open Source Project 2002, Google, Inc. License: Apache-2.0 -Files: platform/android/java/lib/src/org/godotengine/godot/utils/ProcessPhoenix.java +Files: platform/android/java/lib/src/main/java/org/godotengine/godot/utils/ProcessPhoenix.java Comment: ProcessPhoenix Copyright: 2015, Jake Wharton License: Apache-2.0 diff --git a/core/error/error_list.h b/core/error/error_list.h index cdc31ecd586..002e80cb723 100644 --- a/core/error/error_list.h +++ b/core/error/error_list.h @@ -40,7 +40,7 @@ * - Are added to the Error enum in core/error/error_list.h * - Have a description added to error_names in core/error/error_list.cpp * - Are bound with BIND_CORE_ENUM_CONSTANT() in core/core_constants.cpp - * - Have a matching Android version in platform/android/java/lib/src/org/godotengine/godot/error/Error.kt + * - Have a matching Android version in platform/android/java/lib/src/main/java/org/godotengine/godot/error/Error.kt */ enum Error { diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index ed88064708d..14f5ef6f0fa 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -221,7 +221,7 @@ static const char *MISMATCHED_VERSIONS_MESSAGE = "Android build version mismatch static const char *GDEXTENSION_LIBS_PATH = "libs/gdextensionlibs.json"; -// This template string must be in sync with the content of 'platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml'. +// This template string must be in sync with the content of 'platform/android/java/lib/src/main/java/res/mipmap-anydpi-v26/icon.xml'. static const String ICON_XML_TEMPLATE = "\n" "\n" @@ -278,7 +278,7 @@ static const LauncherIcon LAUNCHER_ADAPTIVE_ICON_MONOCHROMES[ICON_DENSITIES_COUN static const int EXPORT_FORMAT_APK = 0; static const int EXPORT_FORMAT_AAB = 1; -static const char *APK_ASSETS_DIRECTORY = "assets"; +static const char *APK_ASSETS_DIRECTORY = "src/main/assets"; static const char *AAB_ASSETS_DIRECTORY = "assetPackInstallTime/src/main/assets"; static const int DEFAULT_MIN_SDK_VERSION = 24; // Should match the value in 'platform/android/java/app/config.gradle#minSdk' diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h index 8ba70102c19..ea5aabfb92f 100644 --- a/platform/android/export/gradle_export_util.h +++ b/platform/android/export/gradle_export_util.h @@ -59,7 +59,7 @@ static const int APP_CATEGORY_VIDEO = 8; static const int APP_CATEGORY_UNDEFINED = 9; // Supported XR modes. -// This should match the entries in 'platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java' +// This should match the entries in 'platform/android/java/lib/src/main/java/org/godotengine/godot/xr/XRMode.java' static const int XR_MODE_REGULAR = 0; static const int XR_MODE_OPENXR = 1; diff --git a/platform/android/java/app/build.gradle b/platform/android/java/app/build.gradle index b0155879e2d..d75a63f101a 100644 --- a/platform/android/java/app/build.gradle +++ b/platform/android/java/app/build.gradle @@ -34,6 +34,11 @@ configurations { } dependencies { + // Android instrumented test dependencies + androidTestImplementation "androidx.test.ext:junit:1.3.0" + androidTestImplementation "androidx.test.espresso:espresso-core:3.7.0" + androidTestImplementation "org.jetbrains.kotlin:kotlin-test:1.3.11" + implementation "androidx.fragment:fragment:$versions.fragmentVersion" implementation "androidx.core:core-splashscreen:$versions.splashscreenVersion" @@ -114,6 +119,8 @@ android { targetSdkVersion getExportTargetSdkVersion() missingDimensionStrategy 'products', 'template' + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { @@ -214,23 +221,26 @@ android { flavorDimensions 'edition' productFlavors { + // Product flavor for the standard (no .net support) builds. standard { getIsDefault().set(true) } + + // Product flavor for the Mono (.net) builds. mono {} + + // Product flavor used for running instrumented tests. + instrumented { + applicationIdSuffix ".instrumented" + versionNameSuffix "-instrumented" + } } sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - res.srcDirs = ['res'] - aidl.srcDirs = ['aidl'] - assets.srcDirs = ['assets'] - } - debug.jniLibs.srcDirs = ['libs/debug', 'libs/debug/vulkan_validation_layers'] - dev.jniLibs.srcDirs = ['libs/dev'] - release.jniLibs.srcDirs = ['libs/release'] + main.res.srcDirs += ['res'] + debug.jniLibs.srcDirs += ['libs/debug', 'libs/debug/vulkan_validation_layers'] + dev.jniLibs.srcDirs += ['libs/dev'] + release.jniLibs.srcDirs += ['libs/release'] } applicationVariants.all { variant -> diff --git a/platform/android/java/app/src/androidTestInstrumented/java/com/godot/game/GodotAppTest.kt b/platform/android/java/app/src/androidTestInstrumented/java/com/godot/game/GodotAppTest.kt new file mode 100644 index 00000000000..f55954fe59b --- /dev/null +++ b/platform/android/java/app/src/androidTestInstrumented/java/com/godot/game/GodotAppTest.kt @@ -0,0 +1,76 @@ +/**************************************************************************/ +/* GodotAppTest.kt */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +package com.godot.game + +import android.util.Log +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.godot.game.test.GodotAppInstrumentedTestPlugin +import org.godotengine.godot.plugin.GodotPluginRegistry +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import kotlin.test.assertNotNull +import kotlin.test.assertTrue + +/** + * This instrumented test will launch the `instrumented` version of GodotApp and run a set of tests against it. + */ +@RunWith(AndroidJUnit4::class) +class GodotAppTest { + + companion object { + private val TAG = GodotAppTest::class.java.simpleName + } + + @get:Rule + val godotAppRule = ActivityScenarioRule(GodotApp::class.java) + + /** + * Runs the JavaClassWrapper tests via the GodotAppInstrumentedTestPlugin. + */ + @Test + fun runJavaClassWrapperTests() { + val testPlugin = GodotPluginRegistry.getPluginRegistry() + .getPlugin("GodotAppInstrumentedTestPlugin") as GodotAppInstrumentedTestPlugin? + assertNotNull(testPlugin) + + Log.d(TAG, "Waiting for the Godot main loop to start...") + testPlugin.waitForGodotMainLoopStarted() + + Log.d(TAG, "Running JavaClassWrapper tests...") + val result = testPlugin.runJavaClassWrapperTests() + assertNotNull(result) + result.exceptionOrNull()?.let { throw it } + assertTrue(result.isSuccess) + Log.d(TAG, "Passed ${result.getOrNull()} tests") + } +} diff --git a/platform/android/java/app/src/instrumented/AndroidManifest.xml b/platform/android/java/app/src/instrumented/AndroidManifest.xml new file mode 100644 index 00000000000..863ec4c09fa --- /dev/null +++ b/platform/android/java/app/src/instrumented/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/platform/android/java/app/src/instrumented/assets/.gitattributes b/platform/android/java/app/src/instrumented/assets/.gitattributes new file mode 100644 index 00000000000..8ad74f78d9c --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/platform/android/java/app/src/instrumented/assets/.gitignore b/platform/android/java/app/src/instrumented/assets/.gitignore new file mode 100644 index 00000000000..a9e5f7dcd00 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +/android/ +/.godot/editor diff --git a/platform/android/java/app/src/instrumented/assets/.godot/.gdignore b/platform/android/java/app/src/instrumented/assets/.godot/.gdignore new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/.godot/.gdignore @@ -0,0 +1 @@ + diff --git a/platform/android/java/app/src/instrumented/assets/.godot/global_script_class_cache.cfg b/platform/android/java/app/src/instrumented/assets/.godot/global_script_class_cache.cfg new file mode 100644 index 00000000000..07389a50ae3 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/.godot/global_script_class_cache.cfg @@ -0,0 +1,17 @@ +list=[{ +"base": &"RefCounted", +"class": &"BaseTest", +"icon": "", +"is_abstract": true, +"is_tool": false, +"language": &"GDScript", +"path": "res://test/base_test.gd" +}, { +"base": &"BaseTest", +"class": &"JavaClassWrapperTests", +"icon": "", +"is_abstract": false, +"is_tool": false, +"language": &"GDScript", +"path": "res://test/javaclasswrapper/java_class_wrapper_tests.gd" +}] diff --git a/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex b/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex new file mode 100644 index 00000000000..4650606ff35 Binary files /dev/null and b/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex differ diff --git a/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 b/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 new file mode 100644 index 00000000000..9346d82667c --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 @@ -0,0 +1,2 @@ +source_md5="4cdc64b13a9af63279c486903c9b54cc" +dest_md5="ddbdfc47e6405ad8d8e9e6a88a32824e" diff --git a/platform/android/java/app/src/instrumented/assets/.godot/scene_groups_cache.cfg b/platform/android/java/app/src/instrumented/assets/.godot/scene_groups_cache.cfg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/platform/android/java/app/src/instrumented/assets/.godot/uid_cache.bin b/platform/android/java/app/src/instrumented/assets/.godot/uid_cache.bin new file mode 100644 index 00000000000..08174116434 Binary files /dev/null and b/platform/android/java/app/src/instrumented/assets/.godot/uid_cache.bin differ diff --git a/platform/android/java/app/src/instrumented/assets/icon.svg b/platform/android/java/app/src/instrumented/assets/icon.svg new file mode 100644 index 00000000000..1640be71db9 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/icon.svg @@ -0,0 +1 @@ + diff --git a/platform/android/java/app/src/instrumented/assets/icon.svg.import b/platform/android/java/app/src/instrumented/assets/icon.svg.import new file mode 100644 index 00000000000..2b8ba2993c8 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://srnrli5m8won" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/platform/android/java/app/src/instrumented/assets/main.gd b/platform/android/java/app/src/instrumented/assets/main.gd new file mode 100644 index 00000000000..a18811ba100 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/main.gd @@ -0,0 +1,60 @@ +extends Node2D + +var _plugin_name = "GodotAppInstrumentedTestPlugin" +var _android_plugin + +func _ready(): + if Engine.has_singleton(_plugin_name): + _android_plugin = Engine.get_singleton(_plugin_name) + _android_plugin.connect("launch_tests", _launch_tests) + else: + printerr("Couldn't find plugin " + _plugin_name) + get_tree().quit() + +func _launch_tests(test_label: String) -> void: + var test_instance: BaseTest = null + match test_label: + "javaclasswrapper_tests": + test_instance = JavaClassWrapperTests.new() + + if test_instance: + test_instance.__reset_tests() + test_instance.run_tests() + var incomplete_tests = test_instance._test_started - test_instance._test_completed + _android_plugin.onTestsCompleted(test_label, test_instance._test_completed, test_instance._test_assert_failures + incomplete_tests) + else: + _android_plugin.onTestsFailed(test_label, "Unable to launch tests") + + +func _on_plugin_toast_button_pressed() -> void: + if _android_plugin: + _android_plugin.helloWorld() + +func _on_vibration_button_pressed() -> void: + var android_runtime = Engine.get_singleton("AndroidRuntime") + if android_runtime: + print("Checking if the device supports vibration") + var vibrator_service = android_runtime.getApplicationContext().getSystemService("vibrator") + if vibrator_service: + if vibrator_service.hasVibrator(): + print("Vibration is supported on device! Vibrating now...") + var VibrationEffect = JavaClassWrapper.wrap("android.os.VibrationEffect") + var effect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE) + vibrator_service.vibrate(effect) + else: + printerr("Vibration is not supported on device") + else: + printerr("Unable to retrieve the vibrator service") + else: + printerr("Couldn't find AndroidRuntime singleton") + +func _on_gd_script_toast_button_pressed() -> void: + var android_runtime = Engine.get_singleton("AndroidRuntime") + if android_runtime: + var activity = android_runtime.getActivity() + + var toastCallable = func (): + var ToastClass = JavaClassWrapper.wrap("android.widget.Toast") + ToastClass.makeText(activity, "Toast from GDScript", ToastClass.LENGTH_LONG).show() + + activity.runOnUiThread(android_runtime.createRunnableFromGodotCallable(toastCallable)) diff --git a/platform/android/java/app/src/instrumented/assets/main.gd.uid b/platform/android/java/app/src/instrumented/assets/main.gd.uid new file mode 100644 index 00000000000..396335dbdce --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/main.gd.uid @@ -0,0 +1 @@ +uid://bv6y7in6otgcm diff --git a/platform/android/java/app/src/instrumented/assets/main.tscn b/platform/android/java/app/src/instrumented/assets/main.tscn new file mode 100644 index 00000000000..848845bab62 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/main.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=2 format=3 uid="uid://cg3hylang5fxn"] + +[ext_resource type="Script" uid="uid://bv6y7in6otgcm" path="res://main.gd" id="1_j0gfq"] + +[node name="Main" type="Node2D"] +script = ExtResource("1_j0gfq") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +offset_left = 68.0 +offset_top = 102.0 +offset_right = 506.0 +offset_bottom = 408.0 +theme_override_constants/separation = 25 + +[node name="PluginToastButton" type="Button" parent="VBoxContainer"] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +text = "Plugin Toast +" + +[node name="VibrationButton" type="Button" parent="VBoxContainer"] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +text = "Vibration" + +[node name="GDScriptToastButton" type="Button" parent="VBoxContainer"] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +text = "GDScript Toast +" + +[connection signal="pressed" from="VBoxContainer/PluginToastButton" to="." method="_on_plugin_toast_button_pressed"] +[connection signal="pressed" from="VBoxContainer/VibrationButton" to="." method="_on_vibration_button_pressed"] +[connection signal="pressed" from="VBoxContainer/GDScriptToastButton" to="." method="_on_gd_script_toast_button_pressed"] diff --git a/platform/android/java/app/src/instrumented/assets/project.godot b/platform/android/java/app/src/instrumented/assets/project.godot new file mode 100644 index 00000000000..f4ec2997925 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/project.godot @@ -0,0 +1,26 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Godot App Instrumentation Tests" +run/main_scene="res://main.tscn" +config/features=PackedStringArray("4.5", "GL Compatibility") +config/icon="res://icon.svg" + +[debug] + +settings/stdout/verbose_stdout=true + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +textures/vram_compression/import_etc2_astc=true diff --git a/platform/android/java/app/src/instrumented/assets/test/base_test.gd b/platform/android/java/app/src/instrumented/assets/test/base_test.gd new file mode 100644 index 00000000000..17a253ec974 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/test/base_test.gd @@ -0,0 +1,44 @@ +@abstract class_name BaseTest + +var _test_started := 0 +var _test_completed := 0 +var _test_assert_passes := 0 +var _test_assert_failures := 0 + +@abstract func run_tests() + +func __exec_test(test_func: Callable): + _test_started += 1 + test_func.call() + _test_completed += 1 + +func __reset_tests(): + _test_started = 0 + _test_completed = 0 + _test_assert_passes = 0 + _test_assert_failures = 0 + +func __get_stack_frame(): + for s in get_stack(): + if not s.function.begins_with('__') and s.function != "assert_equal": + return s + return null + +func __assert_pass(): + _test_assert_passes += 1 + pass + +func __assert_fail(): + _test_assert_failures += 1 + var s = __get_stack_frame() + if s != null: + print_rich ("[color=red] == FAILURE: In function %s() from '%s' on line %s[/color]" % [s.function, s.source, s.line]) + else: + print_rich ("[color=red] == FAILURE (run with --debug to get more information!) ==[/color]") + +func assert_equal(actual, expected): + if actual == expected: + __assert_pass() + else: + __assert_fail() + print (" |-> Expected '%s' but got '%s'" % [expected, actual]) diff --git a/platform/android/java/app/src/instrumented/assets/test/base_test.gd.uid b/platform/android/java/app/src/instrumented/assets/test/base_test.gd.uid new file mode 100644 index 00000000000..e073901130e --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/test/base_test.gd.uid @@ -0,0 +1 @@ +uid://mofa8j0d801f diff --git a/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd b/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd new file mode 100644 index 00000000000..e43cda069a9 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd @@ -0,0 +1,136 @@ +class_name JavaClassWrapperTests +extends BaseTest + +func run_tests(): + print("JavaClassWrapper tests starting..") + + __exec_test(test_exceptions) + + __exec_test(test_multiple_signatures) + __exec_test(test_array_arguments) + __exec_test(test_array_return) + + __exec_test(test_dictionary) + + __exec_test(test_object_overload) + + __exec_test(test_variant_conversion_safe_from_stack_overflow) + + print("JavaClassWrapper tests finished.") + print("Tests started: " + str(_test_started)) + print("Tests completed: " + str(_test_completed)) + + +func test_exceptions() -> void: + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + #print(TestClass.get_java_method_list()) + + assert_equal(JavaClassWrapper.get_exception(), null) + + assert_equal(TestClass.testExc(27), 0) + assert_equal(str(JavaClassWrapper.get_exception()), '') + + assert_equal(JavaClassWrapper.get_exception(), null) + +func test_multiple_signatures() -> void: + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + + var ai := [1, 2] + assert_equal(TestClass.testMethod(1, ai), "IntArray: [1, 2]") + + var astr := ["abc"] + assert_equal(TestClass.testMethod(2, astr), "IntArray: [0]") + + var atstr: Array[String] = ["abc"] + assert_equal(TestClass.testMethod(3, atstr), "StringArray: [abc]") + + var TestClass2: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass2') + var aobjl: Array[Object] = [ + TestClass2.TestClass2(27), + TestClass2.TestClass2(135), + ] + assert_equal(TestClass.testMethod(3, aobjl), "testObjects: 27 135") + +func test_array_arguments() -> void: + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + + assert_equal(TestClass.testArgBoolArray([true, false, true]), "[true, false, true]") + assert_equal(TestClass.testArgByteArray(PackedByteArray([1, 2, 3])), "[1, 2, 3]") + assert_equal(TestClass.testArgCharArray("abc".to_utf16_buffer()), "abc"); + assert_equal(TestClass.testArgShortArray(PackedInt32Array([27, 28, 29])), "[27, 28, 29]") + assert_equal(TestClass.testArgShortArray([27, 28, 29]), "[27, 28, 29]") + assert_equal(TestClass.testArgIntArray(PackedInt32Array([7, 8, 9])), "[7, 8, 9]") + assert_equal(TestClass.testArgIntArray([7, 8, 9]), "[7, 8, 9]") + assert_equal(TestClass.testArgLongArray(PackedInt64Array([17, 18, 19])), "[17, 18, 19]") + assert_equal(TestClass.testArgLongArray([17, 18, 19]), "[17, 18, 19]") + assert_equal(TestClass.testArgFloatArray(PackedFloat32Array([17.1, 18.2, 19.3])), "[17.1, 18.2, 19.3]") + assert_equal(TestClass.testArgFloatArray([17.1, 18.2, 19.3]), "[17.1, 18.2, 19.3]") + assert_equal(TestClass.testArgDoubleArray(PackedFloat64Array([37.1, 38.2, 39.3])), "[37.1, 38.2, 39.3]") + assert_equal(TestClass.testArgDoubleArray([37.1, 38.2, 39.3]), "[37.1, 38.2, 39.3]") + +func test_array_return() -> void: + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + #print(TestClass.get_java_method_list()) + + assert_equal(TestClass.testRetBoolArray(), [true, false, true]) + assert_equal(TestClass.testRetWrappedBoolArray(), [true, false, true]) + + assert_equal(TestClass.testRetByteArray(), PackedByteArray([1, 2, 3])) + assert_equal(TestClass.testRetWrappedByteArray(), PackedByteArray([1, 2, 3])) + + assert_equal(TestClass.testRetCharArray().get_string_from_utf16(), "abc") + assert_equal(TestClass.testRetWrappedCharArray().get_string_from_utf16(), "abc") + + assert_equal(TestClass.testRetShortArray(), PackedInt32Array([11, 12, 13])) + assert_equal(TestClass.testRetWrappedShortArray(), PackedInt32Array([11, 12, 13])) + + assert_equal(TestClass.testRetIntArray(), PackedInt32Array([21, 22, 23])) + assert_equal(TestClass.testRetWrappedIntArray(), PackedInt32Array([21, 22, 23])) + + assert_equal(TestClass.testRetLongArray(), PackedInt64Array([41, 42, 43])) + assert_equal(TestClass.testRetWrappedLongArray(), PackedInt64Array([41, 42, 43])) + + assert_equal(TestClass.testRetFloatArray(), PackedFloat32Array([31.1, 32.2, 33.3])) + assert_equal(TestClass.testRetWrappedFloatArray(), PackedFloat32Array([31.1, 32.2, 33.3])) + + assert_equal(TestClass.testRetDoubleArray(), PackedFloat64Array([41.1, 42.2, 43.3])) + assert_equal(TestClass.testRetWrappedDoubleArray(), PackedFloat64Array([41.1, 42.2, 43.3])) + + var obj_array = TestClass.testRetObjectArray() + assert_equal(str(obj_array[0]), '') + assert_equal(str(obj_array[1]), '') + + assert_equal(TestClass.testRetStringArray(), PackedStringArray(["I", "am", "String"])) + assert_equal(TestClass.testRetCharSequenceArray(), PackedStringArray(["I", "am", "CharSequence"])) + +func test_dictionary(): + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + assert_equal(TestClass.testDictionary({a = 1, b = 2}), "{a=1, b=2}") + assert_equal(TestClass.testRetDictionary(), {a = 1, b = 2}) + assert_equal(TestClass.testRetDictionaryArray(), [{a = 1, b = 2}]) + assert_equal(TestClass.testDictionaryNested({a = 1, b = [2, 3], c = 4}), "{a: 1, b: [2, 3], c: 4}") + +func test_object_overload(): + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + var TestClass2: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass2') + var TestClass3: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass3') + + var t2 = TestClass2.TestClass2(33) + var t3 = TestClass3.TestClass3("thirty three") + + assert_equal(TestClass.testObjectOverload(t2), "TestClass2: 33") + assert_equal(TestClass.testObjectOverload(t3), "TestClass3: thirty three") + + var arr_of_t2 = [t2, TestClass2.TestClass2(34)] + var arr_of_t3 = [t3, TestClass3.TestClass3("thirty four")] + + assert_equal(TestClass.testObjectOverloadArray(arr_of_t2), "TestClass2: [33, 34]") + assert_equal(TestClass.testObjectOverloadArray(arr_of_t3), "TestClass3: [thirty three, thirty four]") + +func test_variant_conversion_safe_from_stack_overflow(): + var TestClass: JavaClass = JavaClassWrapper.wrap('com.godot.game.test.javaclasswrapper.TestClass') + var arr: Array = [42] + var dict: Dictionary = {"arr": arr} + arr.append(dict) + # The following line will crash with stack overflow if not handled property: + TestClass.testDictionary(dict) diff --git a/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd.uid b/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd.uid new file mode 100644 index 00000000000..93a2abe0e43 --- /dev/null +++ b/platform/android/java/app/src/instrumented/assets/test/javaclasswrapper/java_class_wrapper_tests.gd.uid @@ -0,0 +1 @@ +uid://3ql82ggk41xc diff --git a/platform/android/java/app/src/instrumented/java/com/godot/game/test/GodotAppInstrumentedTestPlugin.kt b/platform/android/java/app/src/instrumented/java/com/godot/game/test/GodotAppInstrumentedTestPlugin.kt new file mode 100644 index 00000000000..2fc9eecfe65 --- /dev/null +++ b/platform/android/java/app/src/instrumented/java/com/godot/game/test/GodotAppInstrumentedTestPlugin.kt @@ -0,0 +1,144 @@ +/**************************************************************************/ +/* GodotAppInstrumentedTestPlugin.kt */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +package com.godot.game.test + +import android.util.Log +import android.widget.Toast +import org.godotengine.godot.Godot +import org.godotengine.godot.plugin.GodotPlugin +import org.godotengine.godot.plugin.UsedByGodot +import org.godotengine.godot.plugin.SignalInfo +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.CountDownLatch + +/** + * [GodotPlugin] used to drive instrumented tests. + */ +class GodotAppInstrumentedTestPlugin(godot: Godot) : GodotPlugin(godot) { + + companion object { + private val TAG = GodotAppInstrumentedTestPlugin::class.java.simpleName + private const val MAIN_LOOP_STARTED_LATCH_KEY = "main_loop_started_latch" + + private const val JAVACLASSWRAPPER_TESTS = "javaclasswrapper_tests" + + private val LAUNCH_TESTS_SIGNAL = SignalInfo("launch_tests", String::class.java) + + private val SIGNALS = setOf( + LAUNCH_TESTS_SIGNAL + ) + } + + private val testResults = ConcurrentHashMap>() + private val latches = ConcurrentHashMap() + + init { + // Add a countdown latch that is triggered when `onGodotMainLoopStarted` is fired. + // This will be used by tests to wait until the engine is ready. + latches[MAIN_LOOP_STARTED_LATCH_KEY] = CountDownLatch(1) + } + + override fun getPluginName() = "GodotAppInstrumentedTestPlugin" + + override fun getPluginSignals() = SIGNALS + + override fun onGodotMainLoopStarted() { + super.onGodotMainLoopStarted() + latches.remove(MAIN_LOOP_STARTED_LATCH_KEY)?.countDown() + } + + /** + * Used by the instrumented test to wait until the Godot main loop is up and running. + */ + internal fun waitForGodotMainLoopStarted() { + // Wait on the CountDownLatch for `onGodotMainLoopStarted` + try { + latches[MAIN_LOOP_STARTED_LATCH_KEY]?.await() + } catch (e: InterruptedException) { + Log.e(TAG, "Unable to wait for Godot main loop started event.", e) + } + } + + /** + * This launches the JavaClassWrapper tests, and wait until the tests are complete before returning. + */ + internal fun runJavaClassWrapperTests(): Result? { + return launchTests(JAVACLASSWRAPPER_TESTS) + } + + private fun launchTests(testLabel: String): Result? { + val latch = latches.getOrPut(testLabel) { CountDownLatch(1) } + emitSignal(LAUNCH_TESTS_SIGNAL.name, testLabel) + return try { + latch.await() + val result = testResults.remove(testLabel) + result + } catch (e: InterruptedException) { + Log.e(TAG, "Unable to wait for completion for $testLabel", e) + null + } + } + + /** + * Callback invoked from gdscript when the tests are completed. + */ + @UsedByGodot + fun onTestsCompleted(testLabel: String, passes: Int, failures: Int) { + Log.d(TAG, "$testLabel tests completed") + val result = if (failures == 0) { + Result.success(passes) + } else { + Result.failure(AssertionError("$failures tests failed!")) + } + + completeTest(testLabel, result) + } + + @UsedByGodot + fun onTestsFailed(testLabel: String, failureMessage: String) { + Log.d(TAG, "$testLabel tests failed") + val result: Result = Result.failure(AssertionError(failureMessage)) + completeTest(testLabel, result) + } + + private fun completeTest(testKey: String, result: Result) { + testResults[testKey] = result + latches.remove(testKey)?.countDown() + } + + @UsedByGodot + fun helloWorld() { + runOnHostThread { + Toast.makeText(activity, "Toast from Android plugin", Toast.LENGTH_LONG).show() + Log.v(pluginName, "Hello World") + } + } +} diff --git a/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass.kt b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass.kt new file mode 100644 index 00000000000..8bb677939a9 --- /dev/null +++ b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass.kt @@ -0,0 +1,261 @@ +/**************************************************************************/ +/* TestClass.kt */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +package com.godot.game.test.javaclasswrapper + +import org.godotengine.godot.Dictionary +import kotlin.collections.contentToString +import kotlin.collections.joinToString + +class TestClass { + companion object { + @JvmStatic + fun stringify(value: Any?): String { + return when (value) { + null -> "null" + is Map<*, *> -> { + val entries = value.entries.joinToString(", ") { (k, v) -> "${stringify(k)}: ${stringify(v)}" } + "{$entries}" + } + + is List<*> -> value.joinToString(prefix = "[", postfix = "]") { stringify(it) } + is Array<*> -> value.joinToString(prefix = "[", postfix = "]") { stringify(it) } + is IntArray -> value.joinToString(prefix = "[", postfix = "]") + is LongArray -> value.joinToString(prefix = "[", postfix = "]") + is FloatArray -> value.joinToString(prefix = "[", postfix = "]") + is DoubleArray -> value.joinToString(prefix = "[", postfix = "]") + is BooleanArray -> value.joinToString(prefix = "[", postfix = "]") + is CharArray -> value.joinToString(prefix = "[", postfix = "]") + else -> value.toString() + } + } + + @JvmStatic + fun testDictionary(d: Dictionary): String { + return d.toString() + } + + @JvmStatic + fun testDictionaryNested(d: Dictionary): String { + return stringify(d) + } + + @JvmStatic + fun testRetDictionary(): Dictionary { + var d = Dictionary() + d.putAll(mapOf("a" to 1, "b" to 2)) + return d + } + + @JvmStatic + fun testRetDictionaryArray(): Array { + var d = Dictionary() + d.putAll(mapOf("a" to 1, "b" to 2)) + return arrayOf(d) + } + + @JvmStatic + fun testMethod(int: Int, array: IntArray): String { + return "IntArray: " + array.contentToString() + } + + @JvmStatic + fun testMethod(int: Int, vararg args: String): String { + return "StringArray: " + args.contentToString() + } + + @JvmStatic + fun testMethod(int: Int, objects: Array): String { + return "testObjects: " + objects.joinToString(separator = " ") { it.getValue().toString() } + } + + @JvmStatic + fun testExc(i: Int): Int { + val s: String? = null + s!!.length + return i + } + + @JvmStatic + fun testArgBoolArray(a: BooleanArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgByteArray(a: ByteArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgCharArray(a: CharArray): String { + return a.joinToString("") + } + + @JvmStatic + fun testArgShortArray(a: ShortArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgIntArray(a: IntArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgLongArray(a: LongArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgFloatArray(a: FloatArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testArgDoubleArray(a: DoubleArray): String { + return a.contentToString(); + } + + @JvmStatic + fun testRetBoolArray(): BooleanArray { + return booleanArrayOf(true, false, true) + } + + @JvmStatic + fun testRetByteArray(): ByteArray { + return byteArrayOf(1, 2, 3) + } + + @JvmStatic + fun testRetCharArray(): CharArray { + return "abc".toCharArray() + } + + @JvmStatic + fun testRetShortArray(): ShortArray { + return shortArrayOf(11, 12, 13) + } + + @JvmStatic + fun testRetIntArray(): IntArray { + return intArrayOf(21, 22, 23) + } + + @JvmStatic + fun testRetLongArray(): LongArray { + return longArrayOf(41, 42, 43) + } + + @JvmStatic + fun testRetFloatArray(): FloatArray { + return floatArrayOf(31.1f, 32.2f, 33.3f) + } + + @JvmStatic + fun testRetDoubleArray(): DoubleArray { + return doubleArrayOf(41.1, 42.2, 43.3) + } + + @JvmStatic + fun testRetWrappedBoolArray(): Array { + return arrayOf(true, false, true) + } + + @JvmStatic + fun testRetWrappedByteArray(): Array { + return arrayOf(1, 2, 3) + } + + @JvmStatic + fun testRetWrappedCharArray(): Array { + return arrayOf('a', 'b', 'c') + } + + @JvmStatic + fun testRetWrappedShortArray(): Array { + return arrayOf(11, 12, 13) + } + + @JvmStatic + fun testRetWrappedIntArray(): Array { + return arrayOf(21, 22, 23) + } + + @JvmStatic + fun testRetWrappedLongArray(): Array { + return arrayOf(41, 42, 43) + } + + @JvmStatic + fun testRetWrappedFloatArray(): Array { + return arrayOf(31.1f, 32.2f, 33.3f) + } + + @JvmStatic + fun testRetWrappedDoubleArray(): Array { + return arrayOf(41.1, 42.2, 43.3) + } + + @JvmStatic + fun testRetObjectArray(): Array { + return arrayOf(TestClass2(51), TestClass2(52)); + } + + @JvmStatic + fun testRetStringArray(): Array { + return arrayOf("I", "am", "String") + } + + @JvmStatic + fun testRetCharSequenceArray(): Array { + return arrayOf("I", "am", "CharSequence") + } + + @JvmStatic + fun testObjectOverload(a: TestClass2): String { + return "TestClass2: $a" + } + + @JvmStatic + fun testObjectOverload(a: TestClass3): String { + return "TestClass3: $a" + } + + @JvmStatic + fun testObjectOverloadArray(a: Array): String { + return "TestClass2: " + a.contentToString() + } + + @JvmStatic + fun testObjectOverloadArray(a: Array): String { + return "TestClass3: " + a.contentToString() + } + } +} diff --git a/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass2.kt b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass2.kt new file mode 100644 index 00000000000..a44a3e4e302 --- /dev/null +++ b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass2.kt @@ -0,0 +1,40 @@ +/**************************************************************************/ +/* TestClass2.kt */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +package com.godot.game.test.javaclasswrapper + +class TestClass2(private val value: Int) { + fun getValue(): Int { + return value + } + override fun toString(): String { + return value.toString() + } +} diff --git a/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass3.kt b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass3.kt new file mode 100644 index 00000000000..b7ea77bfd84 --- /dev/null +++ b/platform/android/java/app/src/instrumented/java/com/godot/game/test/javaclasswrapper/TestClass3.kt @@ -0,0 +1,40 @@ +/**************************************************************************/ +/* TestClass3.kt */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +package com.godot.game.test.javaclasswrapper + +class TestClass3(private val value: String) { + fun getValue(): String { + return value + } + override fun toString(): String { + return value + } +} diff --git a/platform/android/java/app/src/instrumented/res/values/strings.xml b/platform/android/java/app/src/instrumented/res/values/strings.xml new file mode 100644 index 00000000000..326dc5dc64b --- /dev/null +++ b/platform/android/java/app/src/instrumented/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Godot App Instrumented Tests + diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/src/main/AndroidManifest.xml similarity index 100% rename from platform/android/java/app/AndroidManifest.xml rename to platform/android/java/app/src/main/AndroidManifest.xml diff --git a/platform/android/java/app/assets/.gitignore b/platform/android/java/app/src/main/assets/.gitignore similarity index 100% rename from platform/android/java/app/assets/.gitignore rename to platform/android/java/app/src/main/assets/.gitignore diff --git a/platform/android/java/app/src/com/godot/game/GodotApp.java b/platform/android/java/app/src/main/java/com/godot/game/GodotApp.java similarity index 91% rename from platform/android/java/app/src/com/godot/game/GodotApp.java rename to platform/android/java/app/src/main/java/com/godot/game/GodotApp.java index dac80282726..4bd7359b8a8 100644 --- a/platform/android/java/app/src/com/godot/game/GodotApp.java +++ b/platform/android/java/app/src/main/java/com/godot/game/GodotApp.java @@ -83,4 +83,13 @@ public class GodotApp extends GodotActivity { super.onGodotMainLoopStarted(); runOnUiThread(updateWindowAppearance); } + + @Override + public void onGodotForceQuit(Godot instance) { + if (!BuildConfig.FLAVOR.equals("instrumented")) { + // For instrumented builds, we disable force-quitting to allow the instrumented tests to complete + // successfully, otherwise they fail when the process crashes. + super.onGodotForceQuit(instance); + } + } } diff --git a/platform/android/java/lib/build.gradle b/platform/android/java/lib/build.gradle index 472a9296086..950cfccaece 100644 --- a/platform/android/java/lib/build.gradle +++ b/platform/android/java/lib/build.gradle @@ -77,23 +77,14 @@ android { } sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - test.java.srcDirs = ['srcTest/java'] - res.srcDirs = ['res'] - aidl.srcDirs = ['aidl'] - assets.srcDirs = ['assets'] - } - - debug.jniLibs.srcDirs = ['libs/debug'] - dev.jniLibs.srcDirs = ['libs/dev'] - release.jniLibs.srcDirs = ['libs/release'] + debug.jniLibs.srcDirs += ['libs/debug'] + dev.jniLibs.srcDirs += ['libs/dev'] + release.jniLibs.srcDirs += ['libs/release'] // Editor jni library - editorRelease.jniLibs.srcDirs = ['libs/tools/release'] - editorDebug.jniLibs.srcDirs = ['libs/tools/debug'] - editorDev.jniLibs.srcDirs = ['libs/tools/dev'] + editorRelease.jniLibs.srcDirs += ['libs/tools/release'] + editorDebug.jniLibs.srcDirs += ['libs/tools/debug'] + editorDev.jniLibs.srcDirs += ['libs/tools/dev'] } libraryVariants.all { variant -> diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/src/main/AndroidManifest.xml similarity index 100% rename from platform/android/java/lib/AndroidManifest.xml rename to platform/android/java/lib/src/main/AndroidManifest.xml diff --git a/platform/android/java/lib/aidl/com/android/vending/licensing/ILicenseResultListener.aidl b/platform/android/java/lib/src/main/aidl/com/android/vending/licensing/ILicenseResultListener.aidl similarity index 100% rename from platform/android/java/lib/aidl/com/android/vending/licensing/ILicenseResultListener.aidl rename to platform/android/java/lib/src/main/aidl/com/android/vending/licensing/ILicenseResultListener.aidl diff --git a/platform/android/java/lib/aidl/com/android/vending/licensing/ILicensingService.aidl b/platform/android/java/lib/src/main/aidl/com/android/vending/licensing/ILicensingService.aidl similarity index 100% rename from platform/android/java/lib/aidl/com/android/vending/licensing/ILicensingService.aidl rename to platform/android/java/lib/src/main/aidl/com/android/vending/licensing/ILicensingService.aidl diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Constants.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/Constants.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Constants.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/Constants.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Helpers.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/Helpers.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Helpers.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/Helpers.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IDownloaderClient.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IDownloaderClient.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderService.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IDownloaderService.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderService.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IDownloaderService.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IStub.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IStub.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IStub.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/IStub.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/SystemFacade.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/SystemFacade.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/SystemFacade.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/SystemFacade.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadThread.java similarity index 99% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadThread.java index c114b8a64a5..d11d1585d45 100644 --- a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java +++ b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadThread.java @@ -110,7 +110,7 @@ public class DownloadThread { * headers, or destination filename. */ private class StopRequest extends Throwable { - + private static final long serialVersionUID = 6338592678988347973L; public int mFinalStatus; diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloaderService.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloaderService.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java diff --git a/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java b/platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/AESObfuscator.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/AESObfuscator.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/AESObfuscator.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/AESObfuscator.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/APKExpansionPolicy.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/APKExpansionPolicy.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/APKExpansionPolicy.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/APKExpansionPolicy.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/DeviceLimiter.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/DeviceLimiter.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/DeviceLimiter.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/DeviceLimiter.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseChecker.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseChecker.java similarity index 99% rename from platform/android/java/lib/src/com/google/android/vending/licensing/LicenseChecker.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseChecker.java index 15017b34258..193fd41258f 100644 --- a/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseChecker.java +++ b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseChecker.java @@ -133,7 +133,7 @@ public class LicenseChecker implements ServiceConnection { *

* source string: "com.android.vending.licensing.ILicensingService" *

- * + * * @param callback */ public synchronized void checkAccess(LicenseCheckerCallback callback) { diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseCheckerCallback.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseCheckerCallback.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/LicenseCheckerCallback.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseCheckerCallback.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseValidator.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseValidator.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/LicenseValidator.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/LicenseValidator.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/NullDeviceLimiter.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/NullDeviceLimiter.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/NullDeviceLimiter.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/NullDeviceLimiter.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/Obfuscator.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/Obfuscator.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/Obfuscator.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/Obfuscator.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/Policy.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/Policy.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/Policy.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/Policy.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/PreferenceObfuscator.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/PreferenceObfuscator.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/PreferenceObfuscator.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/PreferenceObfuscator.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/ResponseData.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ResponseData.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/ResponseData.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ResponseData.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/ServerManagedPolicy.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ServerManagedPolicy.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/ServerManagedPolicy.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ServerManagedPolicy.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/StrictPolicy.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/StrictPolicy.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/StrictPolicy.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/StrictPolicy.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/ValidationException.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ValidationException.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/ValidationException.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/ValidationException.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/Base64.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/Base64.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64DecoderException.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/Base64DecoderException.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64DecoderException.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/Base64DecoderException.java diff --git a/platform/android/java/lib/src/com/google/android/vending/licensing/util/URIQueryDecoder.java b/platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/URIQueryDecoder.java similarity index 100% rename from platform/android/java/lib/src/com/google/android/vending/licensing/util/URIQueryDecoder.java rename to platform/android/java/lib/src/main/java/com/google/android/vending/licensing/util/URIQueryDecoder.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/Dictionary.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/Dictionary.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/Dictionary.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/Dictionary.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/FullScreenGodotApp.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/FullScreenGodotApp.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/FullScreenGodotApp.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/FullScreenGodotApp.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/Godot.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/Godot.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/Godot.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotActivity.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotActivity.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotActivity.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotActivity.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotDownloaderAlarmReceiver.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotDownloaderAlarmReceiver.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotDownloaderService.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotDownloaderService.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotFragment.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotFragment.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotGLRenderView.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotGLRenderView.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotHost.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotHost.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotHost.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotHost.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotIO.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotIO.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotIO.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotLib.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotLib.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotLib.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotRenderView.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotRenderView.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotRenderView.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotRenderView.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/GodotVulkanRenderView.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/GodotVulkanRenderView.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/editor/utils/EditorUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/editor/utils/EditorUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/editor/utils/EditorUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/editor/utils/EditorUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/editor/utils/GameMenuUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/editor/utils/GameMenuUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/editor/utils/GameMenuUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/editor/utils/GameMenuUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/error/Error.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/error/Error.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/error/Error.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/error/Error.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/gl/EGLLogWrapper.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/gl/EGLLogWrapper.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/gl/EGLLogWrapper.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/gl/EGLLogWrapper.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/gl/GLSurfaceView.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/gl/GLSurfaceView.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/gl/GodotRenderer.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/gl/GodotRenderer.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/gl/GodotRenderer.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/gl/GodotRenderer.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotEditText.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotEditText.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotGestureHandler.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotGestureHandler.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotInputHandler.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotInputHandler.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotTextInputWrapper.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/GodotTextInputWrapper.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/InputEventRunnable.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/InputEventRunnable.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/InputEventRunnable.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/InputEventRunnable.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/input/Joystick.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/input/Joystick.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/FilePicker.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/FilePicker.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/StorageScope.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/StorageScope.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/AssetData.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/AssetData.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/AssetData.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/AssetData.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/DataAccess.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/DataAccess.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessFlags.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileAccessFlags.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessFlags.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileAccessFlags.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileAccessHandler.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileAccessHandler.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileData.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileData.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/FileData.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/FileData.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/MediaStoreData.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/MediaStoreData.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/io/file/MediaStoreData.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/io/file/MediaStoreData.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/AndroidRuntimePlugin.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/AndroidRuntimePlugin.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/plugin/AndroidRuntimePlugin.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/AndroidRuntimePlugin.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/GodotPlugin.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/GodotPlugin.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/GodotPluginRegistry.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/GodotPluginRegistry.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/SignalInfo.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/SignalInfo.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/UsedByGodot.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/UsedByGodot.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/plugin/UsedByGodot.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/plugin/UsedByGodot.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/service/GodotService.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/service/GodotService.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/service/GodotService.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/service/GodotService.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/service/RemoteGodotFragment.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/service/RemoteGodotFragment.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/service/RemoteGodotFragment.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/service/RemoteGodotFragment.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/tts/GodotTTS.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/tts/GodotTTS.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/tts/GodotUtterance.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/tts/GodotUtterance.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/tts/GodotUtterance.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/tts/GodotUtterance.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/BenchmarkUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/BenchmarkUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/CommandLineFileParser.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/CommandLineFileParser.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/CommandLineFileParser.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/CommandLineFileParser.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/Crypt.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/Crypt.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/Crypt.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/Crypt.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/DeviceUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/DeviceUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/DeviceUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/DeviceUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/DialogUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/DialogUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/DialogUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/DialogUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/GLUtils.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/GLUtils.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/GodotNetUtils.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/GodotNetUtils.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/PermissionsUtil.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/PermissionsUtil.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/ProcessPhoenix.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/utils/ProcessPhoenix.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/utils/ProcessPhoenix.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/utils/ProcessPhoenix.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/variant/Callable.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/variant/Callable.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/variant/Callable.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/variant/Callable.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkRenderer.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkRenderer.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkSurfaceView.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkSurfaceView.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkThread.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/vulkan/VkThread.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/HybridAppUtils.kt b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/HybridAppUtils.kt similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/HybridAppUtils.kt rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/HybridAppUtils.kt diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/XRMode.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/XRMode.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrConfigChooser.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrConfigChooser.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrContextFactory.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrContextFactory.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularConfigChooser.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularConfigChooser.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularContextFactory.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularContextFactory.java diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java b/platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java similarity index 100% rename from platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java rename to platform/android/java/lib/src/main/java/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java diff --git a/platform/android/java/lib/res/layout/downloading_expansion.xml b/platform/android/java/lib/src/main/res/layout/downloading_expansion.xml similarity index 100% rename from platform/android/java/lib/res/layout/downloading_expansion.xml rename to platform/android/java/lib/src/main/res/layout/downloading_expansion.xml diff --git a/platform/android/java/lib/res/layout/godot_app_layout.xml b/platform/android/java/lib/src/main/res/layout/godot_app_layout.xml similarity index 100% rename from platform/android/java/lib/res/layout/godot_app_layout.xml rename to platform/android/java/lib/src/main/res/layout/godot_app_layout.xml diff --git a/platform/android/java/lib/res/layout/remote_godot_fragment_layout.xml b/platform/android/java/lib/src/main/res/layout/remote_godot_fragment_layout.xml similarity index 100% rename from platform/android/java/lib/res/layout/remote_godot_fragment_layout.xml rename to platform/android/java/lib/src/main/res/layout/remote_godot_fragment_layout.xml diff --git a/platform/android/java/lib/res/layout/snackbar.xml b/platform/android/java/lib/src/main/res/layout/snackbar.xml similarity index 100% rename from platform/android/java/lib/res/layout/snackbar.xml rename to platform/android/java/lib/src/main/res/layout/snackbar.xml diff --git a/platform/android/java/lib/res/layout/status_bar_ongoing_event_progress_bar.xml b/platform/android/java/lib/src/main/res/layout/status_bar_ongoing_event_progress_bar.xml similarity index 100% rename from platform/android/java/lib/res/layout/status_bar_ongoing_event_progress_bar.xml rename to platform/android/java/lib/src/main/res/layout/status_bar_ongoing_event_progress_bar.xml diff --git a/platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml b/platform/android/java/lib/src/main/res/mipmap-anydpi-v26/icon.xml similarity index 100% rename from platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml rename to platform/android/java/lib/src/main/res/mipmap-anydpi-v26/icon.xml diff --git a/platform/android/java/lib/res/mipmap-anydpi-v26/themed_icon.xml b/platform/android/java/lib/src/main/res/mipmap-anydpi-v26/themed_icon.xml similarity index 100% rename from platform/android/java/lib/res/mipmap-anydpi-v26/themed_icon.xml rename to platform/android/java/lib/src/main/res/mipmap-anydpi-v26/themed_icon.xml diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon.webp b/platform/android/java/lib/src/main/res/mipmap-hdpi/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-hdpi/icon.webp rename to platform/android/java/lib/src/main/res/mipmap-hdpi/icon.webp diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap-hdpi/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-hdpi/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap-hdpi/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap-hdpi/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-hdpi/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap-hdpi/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap-hdpi/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-hdpi/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap-hdpi/icon_monochrome.webp diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon.webp b/platform/android/java/lib/src/main/res/mipmap-mdpi/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-mdpi/icon.webp rename to platform/android/java/lib/src/main/res/mipmap-mdpi/icon.webp diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap-mdpi/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-mdpi/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap-mdpi/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap-mdpi/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-mdpi/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap-mdpi/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap-mdpi/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-mdpi/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap-mdpi/icon_monochrome.webp diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon.webp b/platform/android/java/lib/src/main/res/mipmap-xhdpi/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xhdpi/icon.webp rename to platform/android/java/lib/src/main/res/mipmap-xhdpi/icon.webp diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xhdpi/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xhdpi/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap-xhdpi/icon_monochrome.webp diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon.webp b/platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxhdpi/icon.webp rename to platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon.webp diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxhdpi/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxhdpi/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap-xxhdpi/icon_monochrome.webp diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon.webp b/platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxxhdpi/icon.webp rename to platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon.webp diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap-xxxhdpi/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap-xxxhdpi/icon_monochrome.webp diff --git a/platform/android/java/lib/res/mipmap/icon.webp b/platform/android/java/lib/src/main/res/mipmap/icon.webp similarity index 100% rename from platform/android/java/lib/res/mipmap/icon.webp rename to platform/android/java/lib/src/main/res/mipmap/icon.webp diff --git a/platform/android/java/lib/res/mipmap/icon_background.webp b/platform/android/java/lib/src/main/res/mipmap/icon_background.webp similarity index 100% rename from platform/android/java/lib/res/mipmap/icon_background.webp rename to platform/android/java/lib/src/main/res/mipmap/icon_background.webp diff --git a/platform/android/java/lib/res/mipmap/icon_foreground.webp b/platform/android/java/lib/src/main/res/mipmap/icon_foreground.webp similarity index 100% rename from platform/android/java/lib/res/mipmap/icon_foreground.webp rename to platform/android/java/lib/src/main/res/mipmap/icon_foreground.webp diff --git a/platform/android/java/lib/res/mipmap/icon_monochrome.webp b/platform/android/java/lib/src/main/res/mipmap/icon_monochrome.webp similarity index 100% rename from platform/android/java/lib/res/mipmap/icon_monochrome.webp rename to platform/android/java/lib/src/main/res/mipmap/icon_monochrome.webp diff --git a/platform/android/java/lib/res/values-fa/strings.xml b/platform/android/java/lib/src/main/res/values-fa/strings.xml similarity index 100% rename from platform/android/java/lib/res/values-fa/strings.xml rename to platform/android/java/lib/src/main/res/values-fa/strings.xml diff --git a/platform/android/java/lib/res/values-ko/strings.xml b/platform/android/java/lib/src/main/res/values-ko/strings.xml similarity index 100% rename from platform/android/java/lib/res/values-ko/strings.xml rename to platform/android/java/lib/src/main/res/values-ko/strings.xml diff --git a/platform/android/java/lib/res/values/dimens.xml b/platform/android/java/lib/src/main/res/values/dimens.xml similarity index 100% rename from platform/android/java/lib/res/values/dimens.xml rename to platform/android/java/lib/src/main/res/values/dimens.xml diff --git a/platform/android/java/lib/res/values/strings.xml b/platform/android/java/lib/src/main/res/values/strings.xml similarity index 100% rename from platform/android/java/lib/res/values/strings.xml rename to platform/android/java/lib/src/main/res/values/strings.xml diff --git a/platform/android/java/lib/res/values/styles.xml b/platform/android/java/lib/src/main/res/values/styles.xml similarity index 100% rename from platform/android/java/lib/res/values/styles.xml rename to platform/android/java/lib/src/main/res/values/styles.xml diff --git a/platform/android/java/lib/res/xml/godot_provider_paths.xml b/platform/android/java/lib/src/main/res/xml/godot_provider_paths.xml similarity index 100% rename from platform/android/java/lib/res/xml/godot_provider_paths.xml rename to platform/android/java/lib/src/main/res/xml/godot_provider_paths.xml diff --git a/platform/android/java/lib/srcTest/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt b/platform/android/java/lib/src/test/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt similarity index 97% rename from platform/android/java/lib/srcTest/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt rename to platform/android/java/lib/src/test/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt index 8b0466848a7..119578e1740 100644 --- a/platform/android/java/lib/srcTest/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt +++ b/platform/android/java/lib/src/test/java/org/godotengine/godot/utils/CommandLineFileParserTest.kt @@ -56,8 +56,6 @@ class CommandLineFileParserTest( private val expectedResult: List, ) { - private val commandLineFileParser = CommandLineFileParser() - companion object { @JvmStatic @Parameterized.Parameters @@ -96,7 +94,7 @@ class CommandLineFileParserTest( val inputStream = inputStreamArg // when - val result = commandLineFileParser.parseCommandLine(inputStream) + val result = CommandLineFileParser.parseCommandLine(inputStream) // then assert(result == expectedResult) { "Expected: $expectedResult Actual: $result" } diff --git a/pyproject.toml b/pyproject.toml index 0eb22ed4f63..ff6f1c3bb3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ skip = [ "core/string/locales.h", "DONORS.md", "editor/project_converter_3_to_4.cpp", - "platform/android/java/lib/src/com/*", + "platform/android/java/lib/src/main/java/com/*", "platform/web/package-lock.json", ] ignore-words-list = [