如何更新 NativeScript Android 的应用程序图标

Rüd*_*ger 1 android nativescript

我有一个已部署到 PlayStore 的应用程序。通过新的更新,我希望这个应用程序显示一个与当前略有不同的图标和启动屏幕。

我的styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- theme to use FOR launch screen-->
    <style name="LaunchScreenThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>

        <item name="colorPrimary">@color/ns_primary</item>
        <item name="colorPrimaryDark">@color/ns_primaryDark</item>
        <item name="colorAccent">@color/ns_accent</item>

        <item name="android:windowBackground">@drawable/splash_screen</item>
        <item name="android:windowNoTitle">true</item>

        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:windowTranslucentStatus">true</item>

        <item name="android:windowFullscreen">true</item>
    </style>

    <style name="LaunchScreenTheme" parent="LaunchScreenThemeBase">
    </style>

    <!-- theme to use AFTER launch screen is loaded-->
    <style name="AppThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>

        <item name="colorPrimary">@color/ns_primary</item>
        <item name="colorPrimaryDark">@color/ns_primaryDark</item>
        <item name="colorAccent">@color/ns_accent</item>

        <item name="android:windowFullscreen">false</item>
    </style>

    <style name="AppTheme" parent="AppThemeBase">
    </style>

    <!-- theme for actioon-bar -->
    <style name="NativeScriptToolbarStyleBase" parent="Widget.AppCompat.Toolbar">
        <item name="android:background">@color/ns_primary</item>
        <item name="theme">@style/ThemeOverlay.AppCompat.ActionBar</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat</item>

    </style>

    <style name="NativeScriptToolbarStyle" parent="NativeScriptToolbarStyleBase">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

我的colors.xml

<resources>
    <color name="ns_primary">#F5F5F5</color>
    <color name="ns_primaryDark">#757575</color>
    <color name="ns_accent">#33B5E5</color>
    <color name="ns_blue">#272734</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

从我的AndroidManifest.xml

<application
        android:name="com.tns.NativeScriptApplication"
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
>
Run Code Online (Sandbox Code Playgroud)

我有很多可绘制文件夹,其中一些.png's在 (icon.pngsplashscreen.9.png) 中。现在,如果我只是尝试删除这些并将新的 .png 文件放入其中,则在尝试 .png 时会出现异常tns run android

我已经尝试删除平台并读取它(清除 npm 缓存)并删除.gradle-directory。我还在我的根目录中搜索了.pngicon并且splashscreen没有找到其他图片(都是最新的)。

我不确定我还应该尝试什么,到目前为止,询问谷歌对我没有帮助。

错误:

15:25:01.117 [DEBUG] [org.gradle.api.Project] AAPT(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}) discarded: Crunching C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [QUIET] [system.out] Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843): Crunching single PNG file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843): -> QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT notify(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}): Crunching single PNG file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Removed task artifact state for {} from context.
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}) discarded: Crunching single PNG file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843):  Output file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843): -> QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}
15:25:01.118 [DEBUG] [org.gradle.api.Project] AAPT notify(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}):        Output file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.118 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':mergeF0F1F2F3DebugResources'
15:25:01.119 [DEBUG] [org.gradle.api.Project] AAPT(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}) discarded:     Output file: C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png
15:25:01.119 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843): Done
15:25:01.119 [DEBUG] [org.gradle.api.Project] AAPT out(Facade for 1223856843): -> QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}
15:25:01.119 [DEBUG] [org.gradle.api.Project] AAPT notify(QueuedJob{
title=Cruncher notify_panel_notification_icon_bg.png,
task={from=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\exploded-aar\com.android.support\appcompat-v7\26.0.0-alpha1\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=C:\Dev\biff\HandyApp\platforms\android\build\intermediates\res\merged\F0F1F2F3\debug\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png},
future=com.google.common.util.concurrent.SettableFuture@9c66ab1}): Done
15:25:01.119 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] :mergeF0F1F2F3DebugResources FAILED
15:25:01.119 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :mergeF0F1F2F3DebugResources (Thread[Daemon worker Thread 2,5,main]) completed. Took 7.194 secs.
15:25:01.119 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationWorkerRegistry] Worker root.45 completed (0 in use)
15:25:01.119 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[Daemon worker Thread 2,5,main]] finished, busy: 26.976 secs, idle: 0.069 secs
15:25:01.123 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:25:01.123 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
15:25:01.123 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:25:01.123 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
15:25:01.124 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task ':mergeF0F1F2F3DebugResources'.
15:25:01.126 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
15:25:01.126 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:25:01.126 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
15:25:01.127 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':mergeF0F1F2F3DebugResources'.
Run Code Online (Sandbox Code Playgroud)

Nic*_*iev 7

NativeScript 4.xx 及更高版本引入了 CLI 命令,用于自动生成和替换应用程序图标和启动画面。

更改 Android 和 iOS 的应用程序图标

tns resources generate icons  ../myIcon.png
Run Code Online (Sandbox Code Playgroud)

更改 Android 和 iOS 的启动画面

tns resources generate splashes ../myImage.png --background "#FF00FF"
Run Code Online (Sandbox Code Playgroud)

此处此处的官方文档中有关这些功能的更多信息。

  • 我在 nativescript 8.1.1、nativescript/android 8.1.1 和 svelte 3.44.0 上遇到此解决方案的问题。使用上面所示的命令生成资源后。仅成功生成了飞溅。然而,图标并没有按照描述的那样工作,因此我必须在 https://romannurik.github.io/AndroidAssetStudio/icons-launcher.html 上生成我的应用程序启动器图标。然后将“res”目录的内容复制到“App_Resources/Android/src/main/res”,替换所有具有相同名称的目录(即“mipmap-anydpi-v26、mipmap-hdpi”等)。 (2认同)