Вопрос или проблема
Я застрял на этом этапе слишком долго, буду очень признателен за помощь.
Я использую Unity 2022.3.47f1 на Android. Ошибка возникает только в том случае, если я использую “Пользовательский основной шаблон Gradle” и пытаюсь решить это с помощью EDM4U (также с последней и более ранней версиями)
Она появилась, когда я установил пакет “Advertisement Legacy”, имея SDK GooglePlayGames
Вот ошибка:
NullReferenceException: Ссылка на объект не установлена в экземпляр объекта
Google.JarResolver.Dependency.IsGreater (System.String version1, System.String version2) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/JarResolverLib/src/Google.JarResolver/Dependency.cs:196)
Google.JarResolver.Dependency+VersionComparer.Compare (System.String x, System.String y) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/JarResolverLib/src/Google.JarResolver/Dependency.cs:238)
GooglePlayServices.PlayServicesResolver.CheckGradleVersionForJetifier (System.Boolean useJetifier, System.String titlePrefix, System.Action`1[T] complete) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2621)
GooglePlayServices.PlayServicesResolver.CanEnableJetifierOrPromptUser (System.String titlePrefix, System.Action`1[T] complete) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2746)
GooglePlayServices.PlayServicesResolver.ResolveUnsafeAfterJetifierCheck (System.Action`1[T] resolutionComplete, System.Boolean forceResolution, System.Boolean isAutoResolveJob, System.Boolean closeWindowOnCompletion) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1752)
GooglePlayServices.PlayServicesResolver+<ScheduleResolve>c__AnonStorey21.<>m__44 () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1719)
GooglePlayServices.PlayServicesResolver.ExecuteNextResolveJob () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1576)
GooglePlayServices.PlayServicesResolver.ScheduleResolve (System.Boolean forceResolution, System.Boolean closeWindowOnCompletion, System.Action`1[T] resolutionCompleteWithResult, System.Boolean isAutoResolveJob) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1732)
GooglePlayServices.PlayServicesResolver.ExecuteMenuResolve (System.Boolean forceResolution) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2032)
GooglePlayServices.PlayServicesResolver.MenuForceResolve () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2056)
А вот мой пользовательский mainTemplate.gradle. (Это стандартный шаблон)
apply plugin: 'com.android.library'
**APPLY_PLUGINS**
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
namespace "com.unity3d.player"
ndkPath "**NDKPATH**"
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
}
lintOptions {
abortOnError false
}
aaptOptions {
noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}**PACKAGING_OPTIONS**
}
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**
Спасибо за ваше время
Ответ или решение
Конечно, давайте разберемся с вашей проблемой, связанной с ошибкой EDM4U и NullReferenceException
, возникающей при использовании "Custom main Gradle Template" в Unity 2022.3.47f1 на платформе Android.
Шаг 1: Понимание ошибки
Ошибка NullReferenceException: Object reference not set to an instance of an object
может возникнуть по нескольким причинам. В данном случае проблема заключается в функции IsGreater
внутри класса Dependency
, что указывает на то, что один из переданных аргументов (возможно, версия) оказывается равным null
. Это происходит в связи с попыткой проверить версию Gradle.
Шаг 2: Проверка файлов конфигурации
- Проверьте ваш
mainTemplate.gradle
:
Убедитесь, что все плейсхолдеры, такие как**APIVERSION**
,**BUILDTOOLS**
,**MINSDKVERSION**
, и другие, заменены на корректные значения. Отсутствие некоторых необходимых значений может вызывать подобные ошибки.
android {
namespace "com.unity3d.player"
compileSdkVersion 33 // Например, если вы используете API 33
buildToolsVersion '33.0.0' // Убедитесь, что версия соответствует вашей установке
defaultConfig {
minSdkVersion 21 // Укажите минимальную версию
targetSdkVersion 33 // Укажите актуальную целевую версию
...
}
...
}
- Проверьте зависимости:
Убедитесь, что ваши пользовательские зависимости, указанные вDEPS
, корректны и не содержат недопустимых или конфликтаующих библиотек.
Шаг 3: Обновление пакетов
- Обновите Google Play Services и другие пакеты:
Убедитесь, что вы используете актуальные версии Google Play Games SDK и других связанных библиотек. Проверьте их черезWindow -> Package Manager
и обновите, если необходимо.
Шаг 4: Удаление кэша и повторная сборка
- Очистите кэш:
После выполнения изменений рекомендуется очистить кэш. Вы можете сделать это, удалив папкиLibrary
иTemp
вашего проекта, а затем перезапустив Unity. Это гарантирует, что код и зависимости будут собраны с нуля.
Шаг 5: Изолирование ошибки
- Тестируйте поэтапно:
Если ошибка продолжается, попробуйте отключить некоторые пакеты или функции по одному, чтобы увидеть, какая библиотека вызывает проблему. Это поможет в диагностике.
Шаг 6: Рассмотрение использования стандартного Gradle Template
- Вернитесь к стандартному шаблону Gradle:
Если ни одно из предложенных решений не помогло, временно отключите "Custom main Gradle Template", чтобы установить, связано ли это с вашими изменениями в шаблоне.
Заключение
Если все вышеперечисленные методы не решают вашу проблему, возможно, стоит обратиться к сообществу Unity на форумах или создать вопрос на Stack Overflow с полным описанием проблемы и кодом, чтобы другие разработчики могли помочь вам конкретно с этой ситуацией.
Надеюсь, эти шаги помогут вам решить ваше затруднение с ошибкой EDM4U. Если возникнут дополнительные вопросы или будут необходимы уточнения, не стесняйтесь спрашивать. Удачи в разработке!