Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build for Android fails after Updating Unity version and Target API to 34 #519

Open
SMahdiFaghih opened this issue Sep 15, 2024 · 11 comments
Labels
bug Something isn't working investigating We are investigating the current problem new

Comments

@SMahdiFaghih
Copy link

Describe the bug & problem
After updating my Target API to 34 (Android 14) and also updating Unity version to 2021.3.42f1, now i have problem building the game for Android. Before doint so, the build worked correctly on version 2.3.8 but after that it raised the following error. Also updating to 2.3.9 did not help.

After these updates the dependencies inside mainTemplate.gradle should be moved to settingsTemplate.gradle and the error occurs on hmsBaseProjectTemplate.gradle line 7 as follows:

What went wrong:
A problem occurred evaluating script.

Cannot change dependencies of dependency configuration ':classpath' after it has been resolved.

Since this file is generated on build, modifing it won't help. Moving this classpath depencency to mainTemplate.gradle also did not help. The dependency does nto resolve by External Dependency Manager on Force Resolve.

At this point, i don't know what the solution might be and i need your help yo fix this problem.

Environment (please complete the following information):

  • Unity Version 2021.3.42f1
  • HMS Unity Plugin Version 2.3.8 and 2.3.9
Copy link

Thank you for reporting this issue/advice.

We will get back to you as soon as possible.
Would you like to star our plugin to support us? ✨

@github-actions github-actions bot added the new label Sep 15, 2024
@PromanSEW
Copy link

I also affected this problem

@Aziz-T
Copy link
Collaborator

Aziz-T commented Oct 17, 2024

Hi @SMahdiFaghih @PromanSEW

After upgrading the Target API to 34 (Android 14) and updating Unity to version 2021.3.42f1, you encountered an issue during the build process. The error appears on line 7 of hmsBaseProjectTemplate.gradle, with the following message:

"Cannot change dependencies of dependency configuration '
' after it has been resolved."

This error arises because, as of this update, dependencies that were previously placed in mainTemplate.gradle now need to be moved to settingsTemplate.gradle. Despite trying to resolve the issue by updating to HMS Unity Plugin versions 2.3.8 and 2.3.9, the problem persists. Manual changes to the generated hmsBaseProjectTemplate.gradle file have not helped, and neither has forcing the resolution through the External Dependency Manager.

Possible Cause: The issue seems to stem from a mismatch between the way dependency configurations are handled in Unity 2021.3.x versions and the latest Android API requirements. Specifically, modifications to dependency configurations after their resolution can lead to this build error. This may occur due to changes in how Unity generates and processes Gradle files in the context of Android builds, especially for newer Android API levels.

Recommendation: We suggest upgrading to a newer version of Unity beyond 2021.3.42f1, as this version may not fully support the latest Android build system requirements for API 34 (Android 14). Unity versions closer to 2022.x or beyond may offer better compatibility with updated Android APIs and resolve the dependency handling issue. Ensure that your HMS Unity Plugin is also updated accordingly to maintain compatibility.

Steps to Try:

Upgrade Unity to the latest Long Term Support (LTS) version beyond 2021.3.42f1, as newer versions may have addressed this dependency resolution issue.
Ensure all templates (mainTemplate, settingsTemplate) are properly configured after the Unity update.

Please let us know if upgrading Unity resolves the issue, or if further assistance is required.

@PromanSEW
Copy link

@Aziz-T I tried to build in 2021.3.44f1 (latest), and error is still here

@Aziz-T Aziz-T added bug Something isn't working investigating We are investigating the current problem labels Oct 18, 2024
@PromanSEW
Copy link

2021.3.45f1 - the same error

@Remstam
Copy link

Remstam commented Oct 25, 2024

It looks like the issue has the same roots as EDMU has when Unity jumped to Gradle 7.x in 2021.3.41
(googlesamples/unity-jar-resolver#699)

Unity has the same tooling for 2022.2+, and maybe it is a hint how to deal with this: as far as HMS plugin has proper setup for it's gradle templates for 2022.2+, we might want to find UNITY_2022_X defines (this is how HMS branches gradle files generation for Gradle 7.x and earlier versions) and add UNITY_2021_3_OR_NEWER (or UNITY_2021_3_42 alike, depends on Unity version) - by doing this we will turn on behaviour for gradle files generation as if we are in Unity 2022.2+

There are just 3 instances of UNITY_2022_3_OR_NEWER and UNITY_2022_2_OR_NEWER in HMS Editor assembly (1 in HMSGradleWorker and 2 in HMSGradleFixer), replacing them with, for example, UNITY_2022_3_OR_NEWER || UNITY_2021_3_OR_NEWER should do the trick.

I was able to build succesfully with this, but can't yet confirm whether it fails in runtime or not. I hope there will be others to try this and write here the result ahead.

@PromanSEW
Copy link

Tried to export project to Android Studio - got the same error;

Caused by: org.gradle.api.InvalidUserDataException: Cannot change dependencies of dependency configuration ':classpath' after it has been resolved.

@PromanSEW
Copy link

PromanSEW commented Oct 30, 2024

@Remstam I tried to replace UNITY_2022_X defines to UNITY_2021_3_OR_NEWER but no luck, the same error.
Also, I found this, but cannot write needed code myself, here is maybe the solution:

/* TODO:
#elif UNITY_2022_1_OR_NEWER
//Gradle 7+ and classpath 'com.huawei.agconnect:agcp:1.9.1.301'
*/
}

@Remstam
Copy link

Remstam commented Oct 30, 2024

EmptyProjectHuawei.zip
Here is an empty project to compare (2021.3.42) with Huawei plugin 2.3.9 installed and UNITY_2022_X defines updates.
(Also I had to change package name to default in agconnect.json, otherwise the build fails with the appropriate message)
Just switch to Android platorm and build, no additional manifest/gradle shenanigans needed (all the checkboxes in Project Settings -> Publishing Settings are empty).

@PromanSEW you could test this and maybe provide your minimal reprocase so it would be possible to track down the difference

@PromanSEW
Copy link

PromanSEW commented Oct 31, 2024

@Remstam Thanks, your project is able to build. But I use EDM4U and Firebase Crashlytics.
I tried to build with them, but no luck. I got many errors, and fixed them all, except the last:

--E- get manifestOutputDirectory error
get manifestOutputDirectory error: Could not get unknown property 'manifestOutputDirectory' for task ':launcher:processReleaseManifest' of type com.android.build.gradle.tasks.ProcessMultiApkApplicationManifest.
ERROR:D8: com.android.tools.r8.kotlin.H
ERROR:D8: com.android.tools.r8.kotlin.H
....

Finally I decided just uninstall Crashlytics before build for AppGallery. I am tired for this shit.

@PromanSEW
Copy link

@Remstam
Strange... I was able to build my project (not yours), with last Firebase. WTF is going on, why? I just replace defines as in your comment below

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working investigating We are investigating the current problem new
Projects
None yet
Development

No branches or pull requests

4 participants