Defold 1.5.0 BETA

Defold 1.5.0 BETA

The latest beta is now released, and we invite those interested in beta testing the new features in the editor and engine to join now.

The beta period will be 2 weeks and the next planned stable release is two weeks from now.

Please report any engine issues in this thread or in issues using Help → Report Issue

Disclaimer

This is a BETA release, and it might have issues that could potentially be disruptive for you and your teams workflow. Use with caution. Use of source control for your projects is strongly recommended.

Access to the beta

Download the editor or bob.jar from Releases · defold/defold · GitHub

Set your build server to https://build-stage.defold.com

Release notes

Summary

  • BREAKING CHANGE: (#7609) Add support for multiple liveupdate zip archives
  • NEW: (#7800) Add option to avoid copying or cloning buffer in resource.set_buffer
  • NEW: (#7780) Bob.jar support for Apple Silicon (M1/M2) chips using JDK for arm64
  • NEW: (#7803) Material constant array support for go.get/go.set
  • NEW: (#7788) Make sure that unloading of a gui component removes its dynamic textures
  • NEW: (#7798) Error about syncfs is now a warning message
  • NEW: (#7772) Update all cameras in the focus stack
  • NEW: (#7849) Get and set node materials from gui scripts
  • NEW: (#7876) Use asynchronous build on the extender by default.
  • NEW: (#7787) Add conditional breakpoints
  • FIX: (#7852) Set the correct previous state for xinput devices
  • FIX: (#7813) Sound stopped event
  • FIX: (#7812) Shader include with pragmas doesn’t translate to ES3 correctly
  • FIX: (#7821) Fix issue with long comments in shaders
  • FIX: (#7794) Fix profiler step blinking
  • FIX: (#35) Set extension version as user agent
  • FIX: (#7822) Fix issue when wasm-web arch can’t be built without js-web
  • FIX: (#7869) Make sure old LiveUpdate flow works fine
  • FIX: (#7793) Fix bug when debugger stops with an error if GUI text node contains newline
  • FIX: (#7791) Don’t replace all occurences of empty string
  • FIX: (#7825) Fix issue when CMD+H doesn’t hide the editor on MacOS

Engine

BREAKING CHANGE: (#7609) Add support for multiple liveupdate zip archives
It is now possible to load and mount multiple resource archives using liveupdate.add_mount(name, uri, priority, callback). A loaded mount can be removed using liveupdate.remove_mount(name) and a list of all mounted archives can be retrieved using liveupdate.get_mounts(). When the engine needs a resource it searches the list of mounted archives from the highest priority mount (priority is assigned when an archive is mounted) down to the base archive in search of the resource.

After mounting a .zip file, its resources are immediately available. There is no longer a need to reboot the game to access the new content. Resources in a mounted .zip file are no longer verified. It is up to the developer to verify the integrity of downloaded and mounted archives.

In order to facilitate this functionality the manifest and archive file format has been updated to version 5. This means that existing .zip files won’t load. The liveupdate.ref will be removed and as such the liveupdate workflow should trigger again.

A future improvement will be a way for developers to specify how liveupdate content is split into multiple archives when building. For now the excluded content is stored in a single archive and it is up to the developer to manually split the content into multiple archives.

NEW: (#7800) Add option to avoid copying or cloning buffer in resource.set_buffer
Added an argument table for resource.set_buffer with the optional flag transfer_ownership to set a buffer handle immediately on a resource instead of copying or cloning the incoming buffer to the destination buffer. This can be used to improve performance in some cases where heavy use of buffers will invoke lots of data copying. Similar to resource.create_buffer, to set the handle directly on a resource from an external lua buffer do this:

resource.set_buffer(path, buf, { transfer_ownership = true })

NEW: (#7780) Bob.jar support for Apple Silicon (M1/M2) chips using JDK for arm64
Now it is possible to use bob.jar with JDK for arm64 (Apple Silicon chips) on Mac.

NEW: (#7803) Material constant array support for go.get/go.set
Added support for setting constant array values from a table via go.set:

go.set("#sprite", "uniform_array", {
        vmath.vector4(1, 0, 0, 1),
        vmath.vector4(0, 1, 0, 1)
})

Calling go.get on the same target will return the entire array as a table as well:

go.get("#sprite", "uniform_array")
-- result: { vmath.vector4(1,0,0,1), vmath.vector4(0,1,0,1) }

NEW: (#7788) Make sure that unloading of a gui component removes its dynamic textures
Make sure that unloading a GUI component removes any dynamic textures associated with it to free up memory and prevent memory leaks.

Added GuiDynamicTexturesSizeMb counter to the profiler.

NEW: (#7798) Error about syncfs is now a warning message
This change will log a user friendly warning instead of an error in HTML5 builds if the mounted file system fails to sync.

NEW: (#7772) Update all cameras in the focus stack
Changed how the focus stack for cameras work. Instead of just updating the camera on the top of the stack, the engine now updates all cameras that have acquired focus via the message msg.post(id, "acquire_camera_focus"). This means that all cameras that have acquired focus will send set_view_projection messages to the render script. Each camera component can be identified in the render script by using the sender in the render script:

function on_message(self, message_id, message, sender)
    if message_id == hash("set_view_projection") then
        -- here, we use the sender.path to identify the camera, but you can combine path and fragment to create a more
        -- precise identifier for the camera
        self.my_cameras[sender.path] = { view = message.view, proj = message.proj }
    end
end

NEW: (#7849) Get and set node materials from gui scripts
GUI scripts have three new functions:

gui.get_material(node) - Gets the node material assigned in the editor (or an empty hash of “” if none assigned)
gui.gui.set_material(node, material) - Sets a material for a gui node from either material string or hash as specified in the list of materials in the GUI file
gui.reset_material(node) - Reset the material for a node to the default node specified in the GUI the node belongs to.

In addition to the GUI functions, you can also get and set materials in the gui via go.get and go.set:

go.get("#my_gui", "materials", { key = "my_custom_material_1" })
-- returns the hash of the resource, e.g hash("/path/to/material.materialc")
go.property("material_property", resource.material("/other_material.material"))
function init(self)
     -- this changes the material with key "my_custom_material1" to use a different material ("/other_material.material")
     go.set("#my_gui", "materials", self.material_property, { key = "my_custom_material_1" })
end

NEW: (#7876) Use asynchronous build on the extender by default.
Using of the asynchronous build process fixed an issue when some big extensions fail to build with Internal Server Error.

FIX: (#7852) Set the correct previous state for xinput devices
Fixed an issue where gamepads connected from the start doesn’t trigger any ‘connected’ actions to the input system.

FIX: (#7813) Sound stopped event
Added a new message id for the sound component when a sound instance has been stopped via sound.stop. The new sound message id is called sound_stopped and will be passed into the lua callback specified when playing a sound.

FIX: (#7812) Shader include with pragmas doesn’t translate to ES3 correctly
Fixed an issue where using header guards in shader includes produces the wrong output.

FIX: (#7821) Fix issue with long comments in shaders
Fixed issue when long comments in shaders can’t be processed.

FIX: (#7794) Fix profiler step blinking
Fix the issue where the profiler blinks when the property Update Frequency other than 0.

FIX: (#35) Set extension version as user agent
Fixes #32

FIX: (#7822) Fix issue when wasm-web arch can’t be built without js-web
Fixed an issue when Bob doesn’t build the project for wasm-web architecture if the platform specified as js-web.

FIX: (#7869) Make sure old LiveUpdate flow works fine

Editor

NEW: (#7787) Add conditional breakpoints
You can set a Lua condition that must evaluate to true for the breakpoint to be triggered. You can do it using new breakpoint popup that you can open by right-clicking on the breakpoint code editor area or pressing Alt F9.

FIX: (#7793) Fix bug when debugger stops with an error if GUI text node contains newline
Fix issue when debugger stops if a text node has a newline symbol and then debugger tries to get information about such a node on the breakpoint.

FIX: (#7791) Don’t replace all occurences of empty string
The problem: when running replace-all with an empty string find term, the editor got stuck in an infinite loop finding the next occurrences.

the editor no longer locks up executing the “Replace All” command in the code editor view when the search term is empty

FIX: (#7825) Fix issue when CMD+H doesn’t hide the editor on MacOS
Fixed issue when CMD+Hon MacOS shows Java About window instead of application hiding.

18 Likes

This is a massive and really important change. It would be appreciated if developers who use Live Updated in their projects test it while 1.5.0 in beta.

Last time a few bugs were found in the last day of beta, I hope this time we will be able to avoid such last minute fixes.

8 Likes

Pinging @aglitchman, @Lampogolovii, @BunBunBun. Perhaps @totebo as well?

6 Likes

Having problems with certain combinations of commands to Bob when building for Android.
e.g. with extension-facebook, this works:
java -jar ../bob/1.5.0beta/bob.jar --platform armv7-android build --build-server https://build-stage.defold.com --use-async-build-server --variant=debug resolve build
This does not:
java -jar ../bob/1.5.0beta/bob.jar --platform armv7-android build --build-server https://build-stage.defold.com --use-async-build-server --variant=debug distclean resolve build
log.txt (199.6 KB)

Bundling from editor:

Summary
org.gradle.api.GradleScriptException: A problem occurred evaluating script.
	at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:135)
	at org.gradle.configuration.DefaultScriptTarget.addConfiguration(DefaultScriptTarget.java:74)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:138)
	at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
	at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:156)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:43)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:76)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:190)
	at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
	at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:37)
	at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
	at build_9ug2780aml86p2q27imf7avp9.run(/tmp/job2249051816373359296/build.gradle:35)
	at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:135)
	at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:79)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:138)
	at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
	at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:388)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:406)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:387)
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
	at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:109)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:388)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$fromMutableState$1(DefaultProjectStateRegistry.java:411)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withReplacedLocks(DefaultWorkerLeaseService.java:345)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:411)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:387)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:100)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:72)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:792)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:156)
	at org.gradle.api.internal.project.ProjectLifecycleController.lambda$ensureSelfConfigured$2(ProjectLifecycleController.java:84)
	at org.gradle.internal.model.StateTransitionController.lambda$doTransition$13(StateTransitionController.java:247)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:246)
	at org.gradle.internal.model.StateTransitionController.lambda$maybeTransitionIfNotCurrentlyTransitioning$10(StateTransitionController.java:207)
	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
	at org.gradle.internal.model.StateTransitionController.maybeTransitionIfNotCurrentlyTransitioning(StateTransitionController.java:203)
	at org.gradle.api.internal.project.ProjectLifecycleController.ensureSelfConfigured(ProjectLifecycleController.java:84)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.ensureConfigured(DefaultProjectStateRegistry.java:362)
	at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:33)
	at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
	at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:42)
	at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:64)
	at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
	at org.gradle.initialization.VintageBuildModelController.lambda$prepareProjects$2(VintageBuildModelController.java:84)
	at org.gradle.internal.model.StateTransitionController.lambda$doTransition$13(StateTransitionController.java:247)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:246)
	at org.gradle.internal.model.StateTransitionController.lambda$transitionIfNotPreviously$11(StateTransitionController.java:221)
	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
	at org.gradle.internal.model.StateTransitionController.transitionIfNotPreviously(StateTransitionController.java:217)
	at org.gradle.initialization.VintageBuildModelController.prepareProjects(VintageBuildModelController.java:84)
	at org.gradle.initialization.VintageBuildModelController.prepareToScheduleTasks(VintageBuildModelController.java:71)
	at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$prepareToScheduleTasks$3(DefaultBuildLifecycleController.java:134)
	at org.gradle.internal.model.StateTransitionController.lambda$doTransition$13(StateTransitionController.java:247)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:246)
	at org.gradle.internal.model.StateTransitionController.lambda$maybeTransition$9(StateTransitionController.java:198)
	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
	at org.gradle.internal.model.StateTransitionController.maybeTransition(StateTransitionController.java:194)
	at org.gradle.internal.build.DefaultBuildLifecycleController.prepareToScheduleTasks(DefaultBuildLifecycleController.java:132)
	at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:36)
	at org.gradle.configurationcache.VintageBuildTreeWorkController$scheduleAndRunRequestedTasks$1.apply(VintageBuildTreeWorkController.kt:36)
	at org.gradle.configurationcache.VintageBuildTreeWorkController$scheduleAndRunRequestedTasks$1.apply(VintageBuildTreeWorkController.kt:35)
	at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewWorkGraph(DefaultIncludedBuildTaskGraph.java:109)
	at org.gradle.configurationcache.VintageBuildTreeWorkController.scheduleAndRunRequestedTasks(VintageBuildTreeWorkController.kt:35)
	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$scheduleAndRunTasks$1(DefaultBuildTreeLifecycleController.java:68)
	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:98)
	at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:177)
	at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
	at org.gradle.internal.model.StateTransitionController.lambda$transition$7(StateTransitionController.java:177)
	at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
	at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:177)
	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:95)
	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:68)
	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:63)
	at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
	at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:65)
	at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:140)
	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
	at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:122)
	at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
	at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
	at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
	at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
	at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
	at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249)
	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109)
	at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
	at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
	at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
	at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:50)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:38)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
	at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:64)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method compile() for arguments [com.facebook.android:facebook-core:14.1.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
	at org.gradle.internal.metaobject.AbstractDynamicObject$CustomMissingMethodExecutionFailed.<init>(AbstractDynamicObject.java:190)
	at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:184)
	at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:80)
	at build_9w3lwyxzr0dqh9hvbpajyfhx1$_run_closure1.doCall(/tmp/job2249051816373359296/upload/facebook/manifests/android/build.gradle:3)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.util.internal.ClosureBackedAction.execute(ClosureBackedAction.java:73)
	at org.gradle.util.internal.ConfigureUtil.configureTarget(ConfigureUtil.java:155)
	at org.gradle.util.internal.ConfigureUtil.configure(ConfigureUtil.java:106)
	at org.gradle.api.internal.project.DefaultProject.dependencies(DefaultProject.java:1301)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:489)
	at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:196)
	at org.gradle.internal.metaobject.CompositeDynamicObject.tryInvokeMethod(CompositeDynamicObject.java:98)
	at org.gradle.internal.extensibility.MixInClosurePropertiesAsMethodsDynamicObject.tryInvokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:36)
	at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.tryInvokeMethod(BasicScript.java:138)
	at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
	at org.gradle.api.internal.project.DefaultDynamicLookupRoutine.invokeMethod(DefaultDynamicLookupRoutine.java:58)
	at org.gradle.groovy.scripts.BasicScript.invokeMethod(BasicScript.java:87)
	at build_9w3lwyxzr0dqh9hvbpajyfhx1.run(/tmp/job2249051816373359296/upload/facebook/manifests/android/build.gradle:1)
	at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
	... 186 more

The only difference here is the “distclean”.
And this suggests that your first command had a locally cached engine, which was then removed by “distclean”. Then it needs to rebuild on the server again and that’s when you get the build error.

I see no error in your log.txt.

Regarding the editor log “CustomMessageMissingMethodException: Could not find method compile() for arguments [com.facebook.android:facebook-core:14.1.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
at org.gradle.internal.metaobject.AbstractDynamicObject$CustomMissingMethodExecutionFailed.(AbstractDynamicObject.java:190)” , only thing I can think of is that there is perhaps some version number mismatch? @agulev @britzl, any ideas ?

@AarrrBee
Could not find method compile() means that your extension uses compile in Gradle file, which isn’t compatible with the new version of Gradle plugin.

The fix is pretty simple, here is an example: Update build.gradle · defold/extension-facebook@d57d0c8 · GitHub

I agree with @Mathias_Westerdahl that it was fine before distclean because you had cached version of the engine.

So, make sure you use the latest version of the Facebook extension or if you use your own, update it with the fix above.

That’s exactly what’s being built:

% java -jar ../bob/1.5.0beta/bob.jar --version
bob.jar version: 1.5.0  sha1: 96f6ace13b43c1dcda243cd1e698a17211399e31  built: 2023-08-01 21:33:33

% cat facebook/manifests/android/build.gradle
repositories {
  mavenCentral()
}

dependencies {
  // https://developers.facebook.com/docs/android/getting-started/
  implementation 'com.facebook.android:facebook-core:14.1.1'
  implementation 'com.facebook.android:facebook-login:14.1.1'
  implementation 'com.facebook.android:facebook-share:14.1.1'
  implementation 'com.facebook.android:facebook-messenger:14.1.1'
  implementation 'com.facebook.android:facebook-applinks:14.1.1'
}

I tried in the editor and in bob (1.5.0) using facebook-extension project, and it works fine for me.

The only fix I made for your command line is removing of the first build

Before:

java -jar …/bob/1.5.0beta/bob.jar --platform armv7-android build --build-server https://build-stage.defold.com --use-async-build-server --variant=debug distclean resolve build

After:

java -jar …/bob/1.5.0beta/bob.jar --platform armv7-android --build-server https://build-stage.defold.com --use-async-build-server --variant=debug distclean resolve build

Please, try this one.

If it doesn’t build, please show all your project dependencies or try to create a small repo case (an empty project + dependencies) where you can reproduce the problem.

1 Like

Great update! I tried to test with a quick build using 1.5.0, but I am getting a missing header file error for extension-resource-encryption

/resourceencryption/src/plugin.cpp
Line 3: ‘dmsdk/resource/resource_archive.h’ file not found
#include <dmsdk/resource/resource_archive.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1 Like

Ah, thanks, I’ve forgotten to update the resource encryption. I’ll make sure to update it soon.

3 Likes

I was just testing a new project with this beta. The console shows this error:

ERROR:LIVEUPDATE: Could not find base .arci/.arcd. Liveupdate disabled

Not sure if it’s intended or not. I’m simply ignoring it as I’m not using liveupdate on the project.

2 Likes

Yes, it could probably be an ”info” instead.

I’ve changed it to an info message.

2 Likes

Right. This is why I confidently use the beta version for development.

When I show it to my Unity friends they are all terrorized eheh. Apparently they need to be several version behind to have something remotely reliable.

6 Likes

I’ve updated the extension to Defold 1.5.0: Updated to Defold 1.5.0 · defold/extension-resource-encryption@94d46f7 · GitHub

7 Likes

@jhonny.goransson
I try #7800
It worked but i have crash when close game.

1 Like

Thanks for the new liveupdate functionality, I’ve been waiting for it :slightly_smiling_face:

Start testing and find out that collectionproxy.missing_resources() and collectionproxy.get_resources() always return a table with a single resource when there should be more than one.

I tried to make my first issue, I hope I got it right:
https://github.com/defold/defold/issues/7864

4 Likes

Thanks for testing!
Yes we’ve noticed that as well, and are looking into it!

4 Likes