首页 > 解决方案 > 字符串资源用作 Android 应用程序标签时的 PackageManager 异常

问题描述

当我在 AndroidManifest.xml 的标签下使用字符串资源 ( @string/my_app_name) 时,我突然看到在安装时抛出异常。仅在安装或更新应用程序时引发异常。在应用程序的其他地方使用,没有任何错误。android:label<application>my_app_name

我的 xml 文件最近没有更改,但是这个异常最近才开始出现。它可能与 Android Studio、Gradle 或 API 更新有关,但我不确定此异常是从哪个特定更新开始出现的。我正在运行所有东西的最新稳定版本(Android Studio 3.4、Gradle 5.1.1,针对 Android API 28)。重新启动 Android Studio、清理、重建、清除缓存等都没有帮助。

我确定它是标签属性,因为它是引用的字符串,如果我android:label@string/my_app_name硬编码文本更改,异常就会消失。我究竟做错了什么?

AndroidManifest.xml(为简洁起见):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.mycompany.myapp"
    android:installLocation="internalOnly"
    android:versionCode="123"
    android:versionName="1.23"
    >

    ...permission-related things...

    <application
        android:allowBackup="true"
        android:allowClearUserData="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/my_app_name"
        android:theme="@style/Theme.AppCompat"
        tools:ignore="GoogleAppIndexingWarning">

        <activity
        ...activity-related things...
        </activity>

        <service
        ...service-related things...
        </service>

    </application>

</manifest>

Strings.xml(为简洁起见):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="my_app_name">My App</string>
    ...
</resources>

日志输出:

2019-04-29 20:29:39.384 22487-22534/? W/PackageManager: Failure retrieving text 0x7f10002a in package com.mycompany.myapp
    android.content.res.Resources$NotFoundException: String resource ID #0x7f10002a
        at android.content.res.Resources.getText(Resources.java:348)
        at android.app.ApplicationPackageManager.getText(ApplicationPackageManager.java:1678)
        at android.content.pm.PackageItemInfo.loadUnsafeLabel(PackageItemInfo.java:204)
        at android.content.pm.PackageItemInfo.loadLabel(PackageItemInfo.java:194)
        at tvw.f(SourceFile:32)
        at tvw.c(SourceFile:1)
        at txt.c(SourceFile:7)
        at ude.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at ifd.run(Unknown Source:5)
        at java.lang.Thread.run(Thread.java:764)

标签: android

解决方案


经过更多研究,我发现了这个类似的错误:

从设置→构建,执行,部署→即时运行禁用即时运行并取消选中启用即时运行(只需取消选中该框)

所以


推荐阅读