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
相关产品推荐
相关产品推荐

