Мобильная разработка

Как исправить ошибку сборки Gradle в Xcode: WARNING и BUILD FAILED

Решение ошибки сборки Gradle в Xcode с сообщением WARNING: A restricted method in java.lang.System. Настройка совместимости Kotlin 2.3.10, Gradle и AGP 8.13.2.

2 ответа 1 просмотр

Как решить ошибку сборки Gradle в Xcode с сообщением WARNING: A restricted method in java.lang.System has been called? При генерации архива в Xcode возникает ошибка BUILD FAILED, даже при выполнении команды gradle clean. Как настроить совместимость между Kotlin версии 2.3.10, Gradle wrapper и Android Gradle Plugin (AGP) версии 8.13.2 для успешной сборки проекта с использованием Kotlin Multiplatform?

Ошибка сборки Gradle в Xcode с сообщением “WARNING: A restricted method in java.lang.System has been called” возникает из-за несоответствия версий компонентов в системе сборки. Для решения этой проблемы необходимо обеспечить совместимость между Kotlin 2.3.10, Android Gradle Plugin 8.13.2 и Gradle wrapper, а также выполнить миграцию на новые конфигурационные блоки.


Содержание


Понимание ошибки сборки Gradle в Xcode

Ошибка сборки Gradle в Xcode с сообщением “WARNING: A restricted method in java.lang.System has been called” является распространенной проблемой при разработке мобильных приложений с использованием Kotlin Multiplatform. Эта ошибка возникает при попытке сгенерировать архив приложения (archive) и приводит к сообщению “BUILD FAILED”, даже при выполнении команды gradle clean.

Причиной этой ошибки является несоответствие версий компонентов в системе сборки. В частности, проблема возникает при взаимодействии между Kotlin версии 2.3.10, Android Gradle Plugin (AGP) версии 8.13.2 и Gradle wrapper. Ошибка указывает на попытку вызова ограниченного метода в java.lang.System, что обычно происходит при несоответствии требований к Java среде выполнения между различными компонентами проекта.

Ключевой аспект здесь заключается в том, что эта проблема специфична для сборки в Xcode, в то время как сборка в Android Studio может проходить успешно. Это связано с тем, что Xcode использует собственную среду выполнения Java, которая может конфликтовать с ожиданиями Gradle и Kotlin плагинов.


Совместимость Kotlin 2.3.10 с Android Gradle Plugin

Согласно официальной документации Kotlin, для версии Kotlin 2.3.10 поддерживаются версии Android Gradle Plugin (AGP) в диапазоне 8.2.2–9.0.0, что включает AGP 8.13.2, который вы используете. Однако совместимость между этими компонентами зависит не только от версий, но и от правильной конфигурации.

Важно отметить, что для работы с Kotlin Multiplatform в новых версиях требуется использование специального плагина. Вместо традиционного блока androidTarget необходимо использовать блок android из плагина Google. Эта миграция является обязательным шагом для устранения ошибок сборки.

Для AGP 8.13.2 рекомендуется использовать Gradle версии 9.4.0, который полностью совместим с Kotlin 2.3.10. Важно убедиться, что все компоненты проекта используют совместимые версии, так как даже небольшие несоответствия могут приводить к ошибкам типа “WARNING: A restricted method in java.lang.System has been called”.


Требования к версиям Gradle и JDK

Согласно матрице совместимости Gradle, версия 9.4.0 требует Java версии 17–26 для выполнения, с поддержкой toolchain для более новых версий. Для Kotlin 2.3.10 требуется Gradle версии 9.4.0, что создает четкую структуру требований к вашей среде разработки.

Android Gradle Plugin 8.13.2 протестирован с Gradle 9.4.0 и совместим с Kotlin 2.3.0+. Эта совместимость является основой для успешной сборки вашего проекта. Важно понимать, что Gradle также поддерживает Groovy 1.5.8 через 5.0.2, а плагины, написанные на Groovy, должны использовать Groovy 4.x для совместимости с Gradle и Groovy DSL build scripts.

При возникновении ошибки “WARNING: A restricted method in java.lang.System” убедитесь, что ваша среда разработки настроена правильно:

  1. Убедитесь, что используется правильная версия JDK (17-21 рекомендуется)
  2. Проверьте, что Gradle wrapper указывает на версию 9.4.0
  3. Убедитесь, что AGP 8.13.2 совместима с вашей версией Kotlin
  4. Проверьте, что все плагины в проекте используют совместимые версии

Миграция с androidTarget на android блоки

Одной из ключевых причин ошибки сборки Gradle в Xcode является использование устаревшего блока androidTarget вместо нового блока android из плагина Google. Эта миграция является обязательным шагом для успешной работы с Kotlin Multiplatform в новых версиях AGP.

Для миграции выполните следующие шаги:

  1. Откройте файл build.gradle.kts или build.gradle вашего модуля
  2. Замените все вхождения блока androidTarget на android
  3. Убедитесь, что используете правильный плагин: com.android.kotlin.multiplatform.library

Пример миграции:

kotlin
// Старый подход (устаревший)
androidTarget {
 compilations.all {
 kotlinOptions {
 jvmTarget = "17"
 }
 }
}

// Новый подход
android {
 namespace = "com.yourcompany.yourmodule"
 compileSdk = 34

 defaultConfig {
 minSdk = 21
 }

 compileOptions {
 sourceCompatibility = JavaVersion.VERSION_17
 targetCompatibility = JavaVersion.VERSION_17
 }
}

Эта миграция важна, потому что новый подход обеспечивает лучшую интеграцию с Android Gradle Plugin и решает многие проблемы совместимости, включая ошибку “WARNING: A restricted method in java.lang.System has been called”.


Решение проблем с Xcode и Bitcode

При сборке в Xcode могут возникнуть специфические проблемы, связанные с Bitcode и настройками сборки. Ошибка “WARNING: A restricted method in java.lang.System has been called” может усугубляться особенностями работы Xcode с Gradle.

Для решения проблем с Xcode выполните следующие действия:

  1. Очистите build directories через Product | Clean Build Folder в Xcode
  2. Убедитесь, что в настройках сборки Xcode отключен Bitcode для вашего проекта
  3. Проверьте, что версия Xcode совместима с используемыми версиями Android Gradle Plugin

Также важно отметить, что Xcode использует собственную среду выполнения Java, которая может конфликтовать с ожиданиями Gradle. Для решения этой проблемы можно попробовать:

  1. Указать явный путь к JDK в настройках Gradle
  2. Использовать JDK, поставляемый с Android Studio
  3. Настроить Gradle wrapper для использования правильной Java версии

Пример настройки JDK в Gradle:

kotlin
org.gradle.java.home = "/path/to/your/jdk"

Полный процесс устранения ошибок сборки

Для полного устранения ошибки сборки Gradle в Xcode с сообщением “WARNING: A restricted method in java.lang.System has been called” выполните следующие шаги:

  1. Проверка версий компонентов:
  • Убедитесь, что используется Kotlin 2.3.10
  • Проверьте, что AGP версия 8.13.2
  • Убедитесь, что Gradle wrapper указывает на версию 9.4.0
  • Проверьте, что JDK версия 17-21
  1. Миграция на новый плагин:
  • Замените блоки androidTarget на android
  • Используйте плагин com.android.kotlin.multiplatform.library
  • Обновите все конфигурации сборки
  1. Очистка проекта:
  • Выполните команду ./gradlew clean в терминале
  • Очистите build directories через Product | Clean Build Folder в Xcode
  • Удалите папки .gradle, build и .idea
  1. Настройка среды выполнения Java:
  • Укажите явный путь к JDK в настройках Gradle
  • Используйте JDK, поставляемый с Android Studio
  • Проверьте совместимость версий Java
  1. Проверка конфигурации Xcode:
  • Отключите Bitcode в настройках сборки
  • Убедитесь, что все пути к SDK правильные
  • Проверьте настройки signing
  1. Повторная сборка:
  • Выполните команду ./gradlew build
  • Попробуйте собрать архив в Xcode
  • Если ошибка сохраняется, проверьте логи сборки на дополнительные подсказки

Источники

  1. Kotlin Multiplatform Compatibility Guide — Официальная документация по совместимости Kotlin Multiplatform: https://kotlinlang.org/docs/multiplatform/multiplatform-compatibility-guide.html
  2. Gradle Compatibility Documentation — Матрица совместимости Gradle с требованиями к версиям Java: https://docs.gradle.org/current/userguide/compatibility.html
  3. Android Gradle Plugin Release Notes — Информация о совместимости AGP 8.13.2 с Kotlin: https://developer.android.com/build/releases/gradle-plugin
  4. Gradle Wrapper Documentation — Руководство по настройке Gradle wrapper: https://docs.gradle.org/current/userguide/gradle_wrapper.html
  5. Kotlin Multiplatform Migration Guide — Инструкция по миграции с androidTarget на android блоки: https://kotlinlang.org/docs/multiplatform/android-target-migration.html
  6. Xcode Build System Guide — Информация о сборке в Xcode и решении проблем: https://developer.apple.com/documentation/xcode/build-settings
  7. Java Compatibility Guide — Руководство по совместимости версий Java: https://www.java.com/en/download/supported.html
  8. Gradle Java Toolchains — Документация по настройке Java toolchains в Gradle: https://docs.gradle.org/current/userguide/toolchains.html

Заключение

Ошибка сборки Gradle в Xcode с сообщением “WARNING: A restricted method in java.lang.System has been called” является результатом несоответствия версий компонентов в системе сборки. Для решения этой проблемы необходимо обеспечить совместимость между Kotlin 2.3.10, Android Gradle Plugin 8.13.2 и Gradle wrapper версии 9.4.0.

Ключевыми шагами для устранения ошибки являются: миграция с androidTarget блоков на android блоки, очистка build directories, настройка правильной версии JDK и проверка конфигурации Xcode. Важно понимать, что проблема специфична для сборки в Xcode и связана с особенностями работы его системы сборки с Gradle.

Следуя рекомендациям из официальной документации Kotlin и Gradle, вы сможете настроить совместимость всех компонентов и добиться успешной сборки вашего проекта с использованием Kotlin Multiplatform. Регулярная проверка версий и своевременное обновление компонентов помогут избежать подобных проблем в будущем.

Alex Smith / Разработчик Kotlin Multiplatform

Ошибка сборки Gradle в Xcode с предупреждением WARNING: A restricted method in java.lang.System has been called возникает из-за несовместимости версий Kotlin, Gradle и Android Gradle Plugin (AGP). Для Kotlin Multiplatform проекта с версией 2.3.10 необходимо использовать Gradle 8.10+ и AGP 8.13.2.

В файле gradle-wrapper.properties укажите:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip

В settings.gradle.kts добавьте:

pluginManagement {
 repositories {
 gradlePluginPortal()
 google()
 mavenCentral()
 }
 resolutionStrategy {
 eachPlugin {
 if (requested.id.id == "com.android.application") {
 useVersion("8.13.2")
 }
 }
 }
}

Убедитесь, что в build.gradle.kts для Kotlin Multiplatform применен плагин kotlin-multiplatform и версия Kotlin соответствует 2.3.10. Проблема часто возникает из-за использования старого Gradle wrapper, который не поддерживает новые методы Java 17+.

Авторы
Alex Smith / Разработчик Kotlin Multiplatform
Разработчик Kotlin Multiplatform
Проверено модерацией
НейроОтветы
Модерация
Как исправить ошибку сборки Gradle в Xcode: WARNING и BUILD FAILED