Closed DaviAndorid closed 6 years ago
AndroidStudio 什么版本
3.0
您好,最低支持的studio版本号是多少呢?
我是是基于 AndroidStudio 最新的稳定版的, 目前是 v3.1.2, 我在 README.md 也说明了只会支持最新的稳定版(模板是否兼容是 AndroidStudio 自己来保证的, 我只会按照他自己的官方模板做相应的适配, 如果 AndroidStudio 在升级时出现了 API 的变化导致新的模板不兼容低版本, 这里我是不会单独出一个版本的, 我会直接选择升级并且适配新版本, 模板随时都会更新, 如果同时保持多个版本的更新维护我时间肯定不够, 精力有限请谅解), 如果您不升级为最新的 AndroidStudio 的版本, 和我的环境不一样, 我是不能确定也不能解决您的问题的
好的
嗯,那我关闭~
@zgxzgxzg 不过报的这个错,如果确定是旧版本不支持,我是可以解决的,但是请您先用最新版 v3.1.2,测试下是否是旧版本的 API 不兼容导致的, 我知道问题大概位置,需要您的确认, 或则我指示您做相应的源代码更改,应该也是可以解决的
在 recipe.xml.ftl 中将 ${ktOrJavaExt} 替换为 java 即可
<instantiate from="root/test/app_package/ExampleInstrumentedTest.java.ftl"
to="${escapeXmlAttribute(testOut)}/ExampleInstrumentedTest.java" />
<#if unitTestsSupported>
<instantiate from="root/test/app_package/ExampleUnitTest.java.ftl"
to="${escapeXmlAttribute(unitTestOut)}/ExampleUnitTest.java" />
</#if>
看看这个解决方案可行不, 可行的化我就更新
@JessYanCoding 文件上传了,改好我这边试下 zip.zip
你改错了兄弟,复制下面然后覆盖 recipe.xml.ftl 吧, 测试好了给我说一声
<?xml version="1.0"?>
<!-- TODO: check include Cpp support; add driver module template -->
<recipe>
<mkdir at="${escapeXmlAttribute(projectOut)}/libs" />
<mkdir at="${escapeXmlAttribute(resOut)}/anim" />
<mkdir at="${escapeXmlAttribute(resOut)}/drawable" />
<mkdir at="${escapeXmlAttribute(resOut)}/drawable-xhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/drawable-xxhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/drawable-xxxhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/mipmap-hdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/mipmap-xhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/mipmap-xxhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/mipmap-xxxhdpi" />
<mkdir at="${escapeXmlAttribute(resOut)}/layout" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/mvp/model/api/service" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/mvp/model/api/cache" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/mvp/model/entity" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/component/service" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/service" />
<mkdir at="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/utils" />
<merge from="root/settings.gradle.ftl"
to="${escapeXmlAttribute(topOut)}/settings.gradle" />
<instantiate from="root/build.gradle.ftl"
to="${escapeXmlAttribute(projectOut)}/build.gradle" />
<instantiate from="root/ReleaseAndroidManifest.xml.ftl"
to="${escapeXmlAttribute(manifestOut)}/release/AndroidManifest.xml" />
<instantiate from="root/DebugAndroidManifest.xml.ftl"
to="${escapeXmlAttribute(manifestOut)}/debug/AndroidManifest.xml" />
<instantiate from="root/res/values/strings.xml.ftl"
to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
<instantiate from="root/res/values/dimens.xml.ftl"
to="${escapeXmlAttribute(resOut)}/values/dimens.xml" />
<instantiate from="root/res/values/styles.xml.ftl"
to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
<copy from="root/res/values/colors.xml"
to="${escapeXmlAttribute(resOut)}/values/colors.xml" />
<instantiate from="root/test/app_package/ExampleInstrumentedTest.java.ftl"
to="${escapeXmlAttribute(testOut)}/ExampleInstrumentedTest.java" />
<instantiate from="root/src/app_package/GlobalConfiguration.java.ftl"
to="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java" />
<open file="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/GlobalConfiguration.java" />
<instantiate from="root/src/app_package/AppLifecyclesImpl.java.ftl"
to="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java" />
<open file="${projectOut}/src/main/java/${slashedPackageName(packageName)}/app/AppLifecyclesImpl.java" />
<instantiate from="root/src/app_package/Api.java.ftl"
to="${projectOut}/src/main/java/${slashedPackageName(packageName)}/mvp/model/api/Api.java" />
<#if unitTestsSupported>
<instantiate from="root/test/app_package/ExampleUnitTest.java.ftl"
to="${escapeXmlAttribute(unitTestOut)}/ExampleUnitTest.java" />
</#if>
<#if !createActivity>
<mkdir at="${escapeXmlAttribute(srcOut)}" />
</#if>
<#if makeIgnore>
<copy from="root://gradle-projects/common/gitignore"
to="${escapeXmlAttribute(projectOut)}/.gitignore" />
</#if>
<#include "root://gradle-projects/common/proguard_recipe.xml.ftl"/>
<copy from="root/res/mipmap-hdpi/ic_launcher.png"
to="${escapeXmlAttribute(resOut)}/mipmap-hdpi/ic_launcher.png" />
<copy from="root/res/mipmap-xhdpi/ic_launcher.png"
to="${escapeXmlAttribute(resOut)}/mipmap-xhdpi/ic_launcher.png" />
<copy from="root/res/mipmap-xxhdpi/ic_launcher.png"
to="${escapeXmlAttribute(resOut)}/mipmap-xxhdpi/ic_launcher.png" />
<copy from="root/res/mipmap-xxxhdpi/ic_launcher.png"
to="${escapeXmlAttribute(resOut)}/mipmap-xxxhdpi/ic_launcher.png" />
</recipe>
@JessYanCoding 可以创建model了,build不过
大哥, README 写了的必须基于这个项目的工程去生成, 而不是直接新建一个工程, 模板生成的代码就可以用,这个只能生成一个 Module 而不是一个工程
明白了,大佬,小弟想当然了,晚点再试下~
可以, 一键生成工程我也想做, 但是奈何 AndroidStudio 的限制, 暂时不能实现, 也许将来我可以通过其他方式实现
Error executing FreeMarker template: The following has evaluated to null or missing: ==> ktOrJavaExt [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 72]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction: ==> ${ktOrJavaExt} [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 70] FreeMarker template error: The following has evaluated to null or missing: ==> ktOrJavaExt [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 72]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction (FTL stack trace):
==> ${ktOrJavaExt} [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 70]
Java stack trace (for programmers):
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98) at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382) at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) at freemarker.core.DollarVariable.accept(DollarVariable.java:76) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.Environment.process(Environment.java:243) at freemarker.template.Template.process(Template.java:277) at com.android.tools.idea.templates.FreemarkerUtils.processFreemarkerTemplate(FreemarkerUtils.java:96) at com.android.tools.idea.templates.Template.executeRecipeFile(Template.java:557) at com.android.tools.idea.templates.Template.access$200(Template.java:73) at com.android.tools.idea.templates.Template$3.startElement(Template.java:519) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source) at com.android.tools.idea.templates.Template.processXml(Template.java:484) at com.android.tools.idea.templates.Template.processFile(Template.java:468) at com.android.tools.idea.templates.Template.lambda$doRender$2(Template.java:368) at com.android.tools.idea.templates.Template$1.run(Template.java:347) at com.intellij.openapi.application.RunResult.run(RunResult.java:35) at com.intellij.openapi.command.WriteCommandAction.lambda$null$1(WriteCommandAction.java:171) at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1023) at com.intellij.openapi.command.WriteCommandAction.lambda$performWriteCommandAction$2(WriteCommandAction.java:170) at com.intellij.openapi.command.WriteCommandAction.lambda$doExecuteCommand$4(WriteCommandAction.java:210) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:149) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:119) at com.intellij.openapi.command.WriteCommandAction.doExecuteCommand(WriteCommandAction.java:212) at com.intellij.openapi.command.WriteCommandAction.performWriteCommandAction(WriteCommandAction.java:168) at com.intellij.openapi.command.WriteCommandAction.execute(WriteCommandAction.java:151) at com.android.tools.idea.templates.Template.runWriteCommandAction(Template.java:349) at com.android.tools.idea.templates.Template.doRender(Template.java:367) at com.android.tools.idea.templates.Template.render(Template.java:232) at com.android.tools.idea.npw.module.NewModuleModel$ModuleTemplateRenderer.renderModule(NewModuleModel.java:312) at com.android.tools.idea.npw.module.NewModuleModel$ModuleTemplateRenderer.doDryRun(NewModuleModel.java:274) at com.android.tools.idea.npw.template.MultiTemplateRenderer.countDown(MultiTemplateRenderer.java:58) at com.android.tools.idea.npw.template.MultiTemplateRenderer.skipRender(MultiTemplateRenderer.java:82) at com.android.tools.idea.npw.template.RenderTemplateModel.handleSkipped(RenderTemplateModel.java:181) at com.android.tools.idea.wizard.model.ModelWizard.handleFinished(ModelWizard.java:401) at com.android.tools.idea.wizard.model.ModelWizard.goForward(ModelWizard.java:324) at com.android.tools.idea.wizard.model.ModelWizardDialog$FinishAction.doAction(ModelWizardDialog.java:307) at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1838) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6541) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6306) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4897) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:737) at java.awt.EventQueue$4.run(EventQueue.java:735) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) at java.awt.Dialog.show(Dialog.java:1084) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:736) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:458) at com.intellij.openapi.ui.DialogWrapper.invokeShow(DialogWrapper.java:1696) at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1645) at com.android.tools.idea.actions.AndroidNewModuleAction.actionPerformed(AndroidNewModuleAction.java:64) at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:215) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:232) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:309) at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:929) at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:136) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:299) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:116) at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:86) at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:109) at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:118) at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:122) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:116) at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:513) at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:45) at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:533) at java.awt.Component.processMouseEvent(Component.java:6541) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6306) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4897) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:737) at java.awt.EventQueue$4.run(EventQueue.java:735) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.RuntimeException: com.android.tools.idea.templates.FreemarkerUtils$TemplateProcessingException: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> ktOrJavaExt [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 72]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction: ==> ${ktOrJavaExt} [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 70] at com.intellij.util.ExceptionUtil.rethrowAllAsUnchecked(ExceptionUtil.java:183) at com.intellij.openapi.application.RunResult.run(RunResult.java:43) at com.intellij.openapi.command.WriteCommandAction.lambda$null$1(WriteCommandAction.java:171) at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1023) at com.intellij.openapi.command.WriteCommandAction.lambda$performWriteCommandAction$2(WriteCommandAction.java:170) at com.intellij.openapi.command.WriteCommandAction.lambda$doExecuteCommand$4(WriteCommandAction.java:210) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:149) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:119) at com.intellij.openapi.command.WriteCommandAction.doExecuteCommand(WriteCommandAction.java:212) at com.intellij.openapi.command.WriteCommandAction.performWriteCommandAction(WriteCommandAction.java:168) at com.intellij.openapi.command.WriteCommandAction.execute(WriteCommandAction.java:151) at com.android.tools.idea.templates.Template.runWriteCommandAction(Template.java:349) at com.android.tools.idea.templates.Template.doRender(Template.java:367) at com.android.tools.idea.templates.Template.render(Template.java:232) at com.android.tools.idea.npw.module.NewModuleModel$ModuleTemplateRenderer.renderModule(NewModuleModel.java:312) at com.android.tools.idea.npw.module.NewModuleModel$ModuleTemplateRenderer.doDryRun(NewModuleModel.java:274) at com.android.tools.idea.npw.template.MultiTemplateRenderer.countDown(MultiTemplateRenderer.java:58) at com.android.tools.idea.npw.template.MultiTemplateRenderer.skipRender(MultiTemplateRenderer.java:82) at com.android.tools.idea.npw.template.RenderTemplateModel.handleSkipped(RenderTemplateModel.java:181) at com.android.tools.idea.wizard.model.ModelWizard.handleFinished(ModelWizard.java:401) at com.android.tools.idea.wizard.model.ModelWizard.goForward(ModelWizard.java:324) at com.android.tools.idea.wizard.model.ModelWizardDialog$FinishAction.doAction(ModelWizardDialog.java:307) at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1838) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6541) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6306) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4897) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:737) at java.awt.EventQueue$4.run(EventQueue.java:735) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) at java.awt.Dialog.show(Dialog.java:1084) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:736) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:458) at com.intellij.openapi.ui.DialogWrapper.invokeShow(DialogWrapper.java:1696) at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1645) at com.android.tools.idea.actions.AndroidNewModuleAction.actionPerformed(AndroidNewModuleAction.java:64) at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:215) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:232) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:309) at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:929) at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:136) at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:299) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:116) at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:86) at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:109) at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:118) at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:122) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:116) at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:513) at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:45) at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:533) at java.awt.Component.processMouseEvent(Component.java:6541) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6306) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4897) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4719) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:737) at java.awt.EventQueue$4.run(EventQueue.java:735) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: com.android.tools.idea.templates.FreemarkerUtils$TemplateProcessingException: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> ktOrJavaExt [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 72]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction: ==> ${ktOrJavaExt} [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 70] at com.android.tools.idea.templates.FreemarkerUtils.processFreemarkerTemplate(FreemarkerUtils.java:111) at com.android.tools.idea.templates.Template.executeRecipeFile(Template.java:557) at com.android.tools.idea.templates.Template.access$200(Template.java:73) at com.android.tools.idea.templates.Template$3.startElement(Template.java:519) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source) at com.android.tools.idea.templates.Template.processXml(Template.java:484) at com.android.tools.idea.templates.Template.processFile(Template.java:468) at com.android.tools.idea.templates.Template.lambda$doRender$2(Template.java:368) at com.android.tools.idea.templates.Template$1.run(Template.java:347) at com.intellij.openapi.application.RunResult.run(RunResult.java:35) ... 118 more Caused by: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> ktOrJavaExt [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 72]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction: ==> ${ktOrJavaExt} [in template "root://gradle-projects/NewArmsComponent/recipe.xml.ftl" at line 39, column 70] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98) at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382) at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) at freemarker.core.DollarVariable.accept(DollarVariable.java:76) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.MixedContent.accept(MixedContent.java:93) at freemarker.core.Environment.visit(Environment.java:265) at freemarker.core.Environment.process(Environment.java:243) at freemarker.template.Template.process(Template.java:277) at com.android.tools.idea.templates.FreemarkerUtils.processFreemarkerTemplate(FreemarkerUtils.java:96) ... 137 more