You need to enable JavaScript to run this app. Android Studio 新增 product-flavor 后图像资产配置窗口报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio 新增 product-flavor 后图像资产配置窗口报错如何解决

新增Product Flavor后创建Image Asset触发路径校验异常

复现环境

  • Android Studio 4.1.2
  • macOS 系统
  • JDK 1.8.0_242-release(JetBrains 内置版本)

问题触发流程

在已有项目中新增product-flavor的操作步骤为:

  • 在IDE内手动创建 app/src/MYAPP 资源子目录
  • 在应用模块的 build.gradle 中完成新product-flavor的配置
  • 触发创建Image Asset操作时,「Configure Image Asset」窗口无响应抖动,同时命令行抛出 java.lang.IllegalArgumentException 异常,核心报错为:
    ERROR - llij.ide.plugins.PluginManager -...... is not an ancestor of ...../ic_launcher-playstore.png
    

已执行的无效排查操作

  • 执行Build菜单下的「Clean Project」「Rebuild Project」命令
  • 升级安装最新版本Gradle
  • 替换不同尺寸、不同格式(PNG/JPEG)的素材图导入测试
  • 从Android Studio 3.6版本升级到4.1.2版本,同步更新对应版本Gradle

以上操作均未解决问题。

历史参考

  • 此前创建旧product-flavor时,图像资产创建功能可正常使用
  • 该问题最早在Android Studio 3.6版本就已出现

复现方式

通过命令行启动Android Studio:

/Applications/Android\ Studio.app/Contents/MacOS/studio

启动后尝试创建新的Image Asset,控制台输出完整日志(日志中已将用户名、项目名、应用名分别替换为MYID、MYPROJECT_NAME、MYAPP_NAME):

2021-03-05 15:26:04,704 [ 130664]  ERROR - llij.ide.plugins.PluginManager - /Users/MYID/Documents/AndroidApps/MYPROJECT_NAME/app/src/main/MYAPP_NAME is not an ancestor of /Users/MYID/Documents/AndroidApps/MYPROJECT_NAME/app/src/main/ic_launcher-playstore.png
java.lang.IllegalArgumentException: /Users/MYID/Documents/AndroidApps/MYPROJECT_NAME/app/src/main/MYAPP_NAME is not an ancestor of /Users/MYID/Documents/AndroidApps/MYPROJECT_NAME/app/src/main/ic_launcher-playstore.png
    at com.android.tools.idea.ui.wizard.ProposedFileTreeModel$Node$Companion.makeTree(ProposedFileTreeModel.kt:184)
    at com.android.tools.idea.ui.wizard.ProposedFileTreeModel.<init>(ProposedFileTreeModel.kt:62)
    at com.android.tools.idea.npw.assetstudio.wizard.ConfirmGenerateImagesStep.lambda$onEntering$3(ConfirmGenerateImagesStep.java:444)
    at com.android.tools.idea.observable.ListenerManager.listenAndFire(ListenerManager.java:107)
    at com.android.tools.idea.npw.assetstudio.wizard.ConfirmGenerateImagesStep.onEntering(ConfirmGenerateImagesStep.java:411)
    at com.android.tools.idea.wizard.model.ModelWizard.goForward(ModelWizard.java:309)
    at com.android.tools.idea.wizard.model.ModelWizardDialog$NextAction.doAction(ModelWizardDialog.java:273)
    at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1819)
    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.mouseReleased:252)
    at java.awt.Component.processMouseEvent(Component.java:6550)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
    at java.awt.Component.processEvent(Component.java:6315)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Container.dispatchEventImpl(Container.java:4899)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Container.dispatchEventImpl(Container.java:4721)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4721)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
    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:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:739)
    at java.awt.EventQueue$4.run(EventQueue.java:737)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
    at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:912)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:844)
    at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:741)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:502)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatch.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatch.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.EventDispatchSupport.enter(WaitDispatchSupport.java:233)
    at java.awt.Dialog.show(Dialog.java:1077)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:708)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:437)
    at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1685)
    at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1644)
    at com.android.tools.idea.actions.AndroidAssetStudioAction.actionPerformed(AndroidAssetStudioAction.java:115)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:280)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:296)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:281)
    at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManager.java:77)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:285)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
    at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:517)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
    at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:539)
    at java.awt.Component.processMouseEvent(Component.java:6550)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
    at java.awt.Component.processEvent(Component.java:6315)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Container.dispatchEventImpl(Container.java:4899)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Container.dispatchEventImpl(Container.java:4721)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4721)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
    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:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:739)
    at java.awt.EventQueue$4.run(EventQueue.java:737)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
    at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:912)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:844)
    at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:741)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:502)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatch.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatch.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatch.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatch.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatch.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
2021-03-05 15:26:04,707 [ 130667]  ERROR - llij.ide.plugins.PluginManager - Android Studio 4.1.2  Build #AI-201.8743.12.41.7042882
2021-03-05 15:26:04,708 [ 130668]  ERROR - llij.ide.plugins.PluginManager - JDK: 1.8.0_242-release; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o
2021-03-05 15:26:04,708 [ 130668]  ERROR - llij.ide.plugins.PluginManager - OS: Mac OS X
2021-03-05 15:26:04,709 [ 130669]  ERROR - llij.ide.plugins.PluginManager - Last Action: NewAndroidImageAsset

从日志可定位核心异常原因:IDE错误识别资源输出路径,将手动创建在 app/src/main/ 下的MYAPP_NAME目录判定为目标资源 ic_launcher-playstore.png 的父目录,实际二者为同级路径,无从属关系,因此触发路径合法性校验报错。


内容的提问来源于stack exchange,提问作者Stephen Bridgett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 08:24:03