Когда я использую предоставленный метод addDependency(""), не удается создать новый проект в Android Studio.
Создание плагина в Intellij IDEA проходит нормально и не вызывает ошибок. Он собирается и устанавливается без проблем.
Это версия Intellij IDEA, которую я использую.
IntelliJ IDEA 2024.3 .1 (Community Edition)
Сборка № IC-243.22562.145, построенная 9 декабря 2024 г.
Версия для выполнения: 21.0.5+8-b631.28 amd64 (JCEF 122.1.9)
ВМ: 64-разрядная серверная виртуальная машина OpenJDK от JetBrains s.r.o.
Инструментарий: sun.awt.windows.WToolkit
Windows 10.0
GC: G1 Молодое поколение, G1 Параллельный сборщик мусора, G1 старого поколения
Память: 2048 МБ
Ядер: 12
Реестр:
ide.experimental.ui=true
i18n.locale=
llm .show.ai.promotion.window.on.start=false
Плагины, не входящие в комплект:
DevKit (243.22562.145)
org.jetbrains.android (243.22562.145)
Kotlin: 243.22562.145-IJ
Это это Android Studio
Android Studio Ladybug | 2024.2.1 Исправление 3
Сборка № AI-242.23339.11.2421.12700392, построенная 22 ноября 2024 г.
Версия времени выполнения: 21.0.3+-12282718-b509.11 amd64
ВМ: OpenJDK 64-битная серверная виртуальная машина от JetBrains s.r.o.
Инструментарий: sun.awt.windows.WToolkit
Windows 10.0
GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation
Память: 2048M
Ядра: 12
Реестр:
ide.experimental.ui=true
i18n.locale=
Плагины, не входящие в комплект:
com.template.r2creations24.demo (2.0.2)
Это рецепт моего проекта
Код: Выделить всё
import com.android.tools.idea.wizard.template.ModuleTemplateData
import com.android.tools.idea.wizard.template.PackageName
import com.android.tools.idea.wizard.template.RecipeExecutor
import com.android.tools.idea.wizard.template.impl.activities.common.addAllKotlinDependencies
import com.android.tools.idea.wizard.template.impl.activities.common.addLifecycleDependencies
import com.android.tools.idea.wizard.template.impl.activities.common.addMaterial3Dependency
import com.android.tools.idea.wizard.template.impl.activities.common.generateManifest
private const val COMPOSE_BOM_VERSION = "2024.12.01"
private const val COMPOSE_KOTLIN_COMPILER_VERSION = "1.5.1"
fun RecipeExecutor.projectRecipe(
moduleData: ModuleTemplateData,
activityName: String,
packageName: PackageName,
defaultPreview : String,
greeting : String,
isLauncher : Boolean,
canAddComposeDependencies: Boolean
) {
addAllKotlinDependencies(moduleData)
requireJavaVersion("1.8", true)
setBuildFeature("compose", true)
// Note: kotlinCompilerVersion default is declared in TaskManager.COMPOSE_KOTLIN_COMPILER_VERSION
setComposeOptions(kotlinCompilerExtensionVersion = COMPOSE_KOTLIN_COMPILER_VERSION)
addMaterial3Dependency()
addLifecycleDependencies(true)
generateManifest(
moduleData = moduleData,
activityClass = activityName,
activityThemeName = moduleData.themesData.main.name,
packageName = packageName,
isLauncher = isLauncher,
hasNoActionBar = true,
generateActivityTitle = true
)
applyPlugin("org.jetbrains.kotlin.plugin.compose", "2.0.0")
if (canAddComposeDependencies) {
addDependency(mavenCoordinate = "androidx.lifecycle:lifecycle-runtime-ktx:+")
addDependency(mavenCoordinate = "androidx.activity:activity-compose:+")
addPlatformDependency(mavenCoordinate = "androidx.compose:compose-bom:$COMPOSE_BOM_VERSION")
addPlatformDependency(mavenCoordinate = "androidx.compose:compose-bom:$COMPOSE_BOM_VERSION", configuration = "androidTestImplementation")
val composeUiFormattedVersion = moduleData.let { ":$it" } ?: ""
addDependency(mavenCoordinate = "androidx.compose.ui:ui$composeUiFormattedVersion")
addDependency(mavenCoordinate = "androidx.compose.ui:ui-graphics")
addDependency(mavenCoordinate = "androidx.compose.ui:ui-tooling", configuration = "debugImplementation")
addDependency(mavenCoordinate = "androidx.compose.ui:ui-tooling-preview")
addDependency(mavenCoordinate = "androidx.compose.ui:ui-test-manifest", configuration="debugImplementation")
addDependency(mavenCoordinate = "androidx.compose.ui:ui-test-junit4", configuration="androidTestImplementation")
addDependency(mavenCoordinate = "androidx.compose.material3:material3")
}
val themeName = "${moduleData.themesData.appName}Theme"
val emptyActivity = emptyActivity(packageName, activityName, defaultPreview, greeting, themeName)
val emptyActivityPath = moduleData.srcDir.resolve("$activityName.kt")
save(emptyActivity, emptyActivityPath)
open(emptyActivityPath)
}
Просто нужно вручную добавить новые зависимости для создания нового приложения. Выполнение этого вручную противоречит цели проекта. Если я перенесу какой-либо отдельный
addDependency()
из оператора if . Тогда новый проект не может быть собран.
Оглядываясь назад, можно заметить, что
addMaterial3Dependency()
Material3 тоже не добавляет, но это не выдает ошибку и не приводит к невозможности создания нового приложения из шаблона.
Вот трассировка стека
java.lang.NoSuchMethodError: 'void com.android.tools.idea.wizard.template.RecipeExecutor.addDependency$default(com.android.tools.idea.wizard.template.RecipeExecutor, java.lang.String , java.lang.String, java.lang.String, java.io.File, логическое значение, int, java.lang.Object)'
at com.template.r2creations24.demo.emptyActivity.ProjectRecipeKt.projectRecipe(ProjectRecipe.kt:42)
at com.template.r2creations24.demo.emptyActivity.ProjectTemplateKt$projectTemplate$1$2.invoke(ProjectTemplate.kt:76)
на com.template.r2creations24.demo.emptyActivity.ProjectTemplateKt$projectTemplate$1$2.invoke(ProjectTemplate.kt :75)
в com.android.tools.idea.npw.model.NewTemplateRendererKt$doRender$1.run(NewTemplateRenderer.kt:98)
на com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$1(WriteCommandAction.java :147)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction$lambda$4(AnyThreadWriteThreadingSupport.kt:318)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction(AnyThreadWriteThreadingSupport.kt:328)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction(AnyThreadWriteThreadingSupport.kt:318)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:890)
на com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$2(WriteCommandAction.java:145)
в com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:226)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:188)
at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.doRunWriteCommandAction(WriteCommandAction.java:154)
at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$run$0(WriteCommandAction.java:125)
в com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:27)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:229)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22)
at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:191)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runIntendedWriteActionOnCurrentThread$lambda$1(AnyThreadWriteThreadingSupport.kt:184)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction(AnyThreadWriteThreadingSupport.kt:84)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runIntendedWriteActionOnCurrentThread(AnyThreadWriteThreadingSupport.kt:183)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:836)
на com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:424)
в com.intellij.openapi.application.impl.LaterInvocator$1.run(LaterInvocator.java:101)
на com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWithImplicitRead(AnyThreadWriteThreadingSupport.kt:122)
в com.intellij.openapi.application.impl.ApplicationImpl.runWithImplicitRead(ApplicationImpl.java:1162)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:78)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:119)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:41)
at java.desktop/java.awt.event.InvocateEvent.dispatch(Неизвестно Источник)
в java.desktop/java.awt.EventQueue.dispatchEventImpl(неизвестный источник)
в java.desktop/java.awt.EventQueue$4.run(неизвестный источник)
в java. Desktop/java.awt.EventQueue$4.run(Неизвестный источник)
at java.base/java.security.AccessController.doPrivileged(неизвестный источник)
в java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(неизвестный источник)
в java.desktop/java.awt. EventQueue.dispatchEvent(Неизвестный источник)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:696)
at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$16(IdeEventQueue.kt:590)
at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWithoutImplicitRead(AnyThreadWriteThreadingSupport.kt:117)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:590)
at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:73)
на com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1$1.compute(IdeEventQueue.kt:357)
в com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1$1.compute(IdeEventQueue.kt:356)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:843)в com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.invoke(IdeEventQueue.kt:356)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.invoke(IdeEventQueue.kt:351 )
at com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke$lambda$0(IdeEventQueue.kt:1035)
at com.intellij.openapi.application.WriteIntentReadAction.lambda$run$0(WriteIntentReadAction.java :24)
в com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction(AnyThreadWriteThreadingSupport.kt:84)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteIntentReadAction(ApplicationImpl.java:910)
at com.intellij.openapi.application.WriteIntentReadAction.compute(WriteIntentReadAction.java:55)
at com.intellij.openapi.application.WriteIntentReadAction.run(WriteIntentReadAction.java:23)
at com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke(IdeEventQueue.kt:1035)
на com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke(IdeEventQueue.kt:1035)
в com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:1036)
на com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1036)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$10(IdeEventQueue.kt:351)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:397)
на java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
на java.desktop/java.awt.EventDispatchThread .pumpEventsForFilter(неизвестный источник)
в java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(неизвестный источник)
в java.desktop/java.awt.EventDispatchThread.pumpEvents(неизвестный источник)
в java.desktop/java.awt .EventDispatchThread.pumpEvents(неизвестный источник)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Я изменил различные вещи в своем коде, чтобы быть более близким к различным шаблонам, которые я видел разные посты, но безуспешно.
Я видел этот пост https://cs.android.com/android-studio/p ... /template/ impl/activities/common/kotlinMacros.kt, который показывает
addComposeDependities()
Я пробовал этот метод выше, но его не существует. Я не могу его импортировать. Поэтому я создал свою собственную функцию расширения. Код в нем теперь просто помещается внутри оператора if canComposeDependency. Трассировка стека продолжает идти к
addDependency()
сбою.
Буду признателен за любую помощь в том, как добавить больше зависимостей в новый шаблон приложения.
***********ОБНОВЛЕНИЕ< /p>
Я только что попробовал плагин в IntelliJ IDEA CE. Он работает отлично. Точно так, как и ожидалось. У меня все еще возникают проблемы с плагином в Android Studio. Та же проблема, о которой говорилось выше. Не удается выполнить метод addDependency() с NoSuchMethodError.
У кого-нибудь есть идеи?
Интересно, есть ли проблемы с Android плагин, используемый в Android Studio. В моей Android Studio —
org.jetbrains.android:242.23339.11
, пока мой IntelliJ IDEA CE используетorg.jetbrains.android:243.22562.218
Подробнее здесь: https://stackoverflow.com/questions/792 ... create-new