【问题标题】:difference between `flutter create xxx` and `Start a new Flutter project` in Android Studio?Android Studio中`flutter create xxx`和`Start a new Flutter project`的区别?
【发布时间】:2020-05-12 10:19:42
【问题描述】:

在this post 的第二个答案之后,我正在手动更改 android 启动器图标,这需要在 Android Studio 中工作。

我的项目从第一天开始就在 VS 代码中,并由命令 flutter create xxx 创建。

当我在 Android Studio 中打开这个现有项目并右键单击res 文件夹以添加新的Image Asset,而不是弹出configure image asset,它给了我IDE Error Occurred 和

java.lang.NullPointerException
    at com.android.tools.idea.configurations.ConfigurationManager.create(ConfigurationManager.java:165)
    at com.android.tools.idea.configurations.ConfigurationManager.getConfiguration(ConfigurationManager.java:142)
    at com.android.tools.idea.editors.theme.ThemeEditorUtils.getConfigurationForModule(ThemeEditorUtils.java:523)
    at com.android.tools.idea.npw.assetstudio.DrawableRenderer.<init>(DrawableRenderer.java:72)
    at com.android.tools.idea.npw.assetstudio.wizard.GenerateImageAssetPanel.<init>(GenerateImageAssetPanel.java:216)
    at com.android.tools.idea.npw.assetstudio.wizard.NewImageAssetStep.<init>(NewImageAssetStep.java:39)
    at com.android.tools.idea.actions.NewImageAssetAction.createWizard(NewImageAssetAction.kt:33)
    at com.android.tools.idea.actions.AndroidAssetStudioAction.actionPerformed(AndroidAssetStudioAction.java:108)
    at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:261)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:278)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:292)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:283)
    at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:107)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:282)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:111)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
    at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:111)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:120)
    at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:524)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:35)
    at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:546)
    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.Component.dispatchEventImpl(Component.java:4899)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.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:757)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:702)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:375)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    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)

为了缩小bug,我flutter create yyyy另一个项目,在Android Studio中打开,bug重现了。

然后我在Android Studio的计数器应用中Start a new Flutter project,然后右击new image asset,弹出configure image asset。

我错过了 Android Stuido 设置中的任何内容吗?还是flutter create xxx 和Start a new Flutter project 有区别?

【问题讨论】:

  • Android Studio中安装了flutter和dart插件

标签: flutter


【解决方案1】:

很遗憾,经过数小时的研究,我对这个特定问题没有一个好的答案。在使用 flutter create my_app 创建了我的应用并尝试在 Android Studio 中编辑图标后,我在尝试为 Android 应用生成新的自适应图标时遇到了这个确切的错误。

我的解决方法是使用插件fluter_launcher_icons 并为插件指定前景和背景图像。我的前景图像只是图标的主要部分,背景是我的图标放置在常规版本图标上的渐变。我最终得到了三个图标图像: icon.png 插件使用的 1024x1024 高质量图像,用于生成不同设备所需的所有大小的图标); foreground.png,图标的主体。在我的情况下是钻石;和 background.png,我的图标的渐变背景。

要使用该插件,只需将其添加到您的 pubscpec.yaml 文件中,在 dev_dependencie 部分下,如下所示:

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_launcher_icons:

并在您的 pubscpec 文件中添加一个新部分,如下所示:

flutter_icons:
  image_path: "assets/app_icon.png"
  android: true
  ios: true
  adaptive_icon_background: assets/background.png
  adaptive_icon_foreground: assets/foreground.png

如果您使用 VS Code 进行开发并且安装了 dart 和 Flutter 插件,只需保存 pubspec.yaml 文件即可自动运行flutter pub get,否则请确保在继续之前在终端中运行该命令。最后一步是在终端中运行此命令:

flutter packages pub run flutter_launcher_icons:main

此命令将为您生成图标并配置您的应用以使用它们。下次运行应用时,模拟器/设备中的图标将更新,您的应用将拥有漂亮的自定义图标。

就我个人而言,这个解决方案更适合我,因为我更喜欢在工作流程中使用 Flutter 和 VS Code。我希望这至少可以作为您的解决方法。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2022-12-27
    • 1970-01-01
    • 2020-10-01
    • 2020-07-11
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多