【问题标题】:getting " 'android:icon' attribute: attribute is not a string value” error while uploading an APK to the play store将 APK 上传到 Play 商店时出现“'android:icon'attribute:attribute is not a string value”错误
【发布时间】:2014-01-15 01:00:36
【问题描述】:

背景

经过这么多小时的空闲时间,我已准备好将我的第一个应用发布到 Play 商店,但遗憾的是,我在上传已签名的应用时遇到了困难。

我已经使用我创建的密钥库成功导出了应用程序(全部通过 Eclipse 和 ADT),所以我已将签名的 APK 上传到 Play 商店 (here)。

问题

我不断收到这条消息:

上传失败 您的 APK 无法使用“aapt dump badging”进行分析。 错误输出:无法运行 aapt 转储标记:W/ResourceType(14856): 获取资源号 0x01080049 的值时没有已知包 获取“android:icon”属性时出错:属性不是字符串 价值

这样:

该应用程序本身在真实设备上运行良好,并且使用的图像文件是android-assets-studio website 使用的普通PNG 文件。

我尝试过的

我在 StackOverflow 上进行了搜索,发现了很多关于它的帖子 (here)。我已经阅读了其中的许多内容并尝试了接下来的事情,但没有任何帮助:

  1. 将应用程序图标放在具有多种组合的不同文件夹(“drawable”、“drawable-mdpi”、...甚至“drawable-xxxhdpi”)上(从每个文件夹中放置/删除) .

  2. 在“应用程序”标签和启动器活动标签上设置标签、图标和主题。

  3. 更改图像文件名和文件本身(将其替换为默认应用图标)。

  4. 清理项目。

  5. 检查 Lint 消息。

  6. 更新 ADT(至 22.3.0.v201310242005-887826)、Eclipse(至 Kepler Service Release 1)、SDK 工具(至 22.3)、SDK 构建工具(至 19.0.1)。几乎都是最新的官方版本。

  7. 检查是否没有使用双 jar 文件(多个库中不存在 jar 文件,尤其是版本不同时)。

  8. 尝试将 strings.xml 放入“res/values-en”而不是“res/values”

  9. 尝试将“android:value”属性添加到清单上的所有元数据标签(由 Google 建议)。它没有用。事实上,在我读过的所有教程中,我从未见过 AppWidget 有这样的要求,所以我认为无论如何都不需要。

  10. 尝试了 aapt 命令:

    aapt dump badging
    

这向我展示了与 Play 商店显示的内容相同的内容(我在这里用 XXX 替换了真实的包名称和应用名称):

application: label='XXX XXX' icon='res/drawable-mdpi/app_icon.png'
launchable-activity: name='XXX.XXX.XXXActivity'  label='XXX XXX' icon='res/drawable-mdpi/app_icon.png'
W/ResourceType( 9132): No known package when getting value for resource number 0
x01080049
ERROR getting 'android:icon' attribute: attribute is not a string value

即使该文件确实存在于该文件夹中,也会发生这种情况。

这是清单。再次,将活动和应用程序的真实路径和名称替换为 XXX。我可以向您保证路径是正确的,因为应用程序可以正常运行。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="XXX.XXX"
    android:installLocation="auto"
    android:versionCode="2"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="19" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <uses-permission android:name="com.android.launcher
                                   .permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android
                                   .permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />

    <!-- required for admob: -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- required for in-app billing . -->
    <uses-permission android:name="com.android.vending.BILLING" />
    <!-- needed for payload of in-app billing -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <application
        android:name="XXX.XXX.XXX"
        android:allowBackup="true"
        android:description="@string/app_description"
        android:hardwareAccelerated="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="XXX.XXXActivity"
            android:clearTaskOnLaunch="true"
            android:configChanges="keyboard|keyboardHidden|orientation|
                                   screenLayout|uiMode|screenSize|
                                   smallestScreenSize"
            android:finishOnTaskLaunch="true"
            android:icon="@drawable/app_icon"
            android:label="@string/XXX"
            android:launchMode="singleTask"
            android:screenOrientation="fullSensor" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
     ... (other activities and services)

问题

发生了什么事?

我该如何克服这个问题?

【问题讨论】:

  • This 可能会有所帮助。它说,错误可能具有误导性,意思是:它可能与资源文件夹中的字符串等有关。
  • @Archie.bpgc 是的,我读过类似的帖子,并试图找出哪个字符串有问题。找不到,而且我还发现 aapt 抱怨的资源 id 甚至不存在(搜索了整个工作区),但应用程序图标之一存在。
  • 这个答案可能会有所帮助:stackoverflow.com/a/18329337/3134811 而这个:stackoverflow.com/a/15068090/3134811
  • @user3134811 我已经写过我已经尝试过了。可悲的是它没有帮助...... :(
  • 您是否尝试在干净的设备上安装签名的 APK?当然,启动它等等。

标签: android google-play apk aapt


【解决方案1】:

如果您使用任何 android 系统图标 作为活动图标(即清单包含 &lt;activity ... android:icon="@android:drawable/... ),它们可能是问题所在。如果是,请尝试将这些图标复制到您的项目中。在其他地方使用它们应该没问题,因为徽章不会触及那些。

【讨论】:

  • 使用Android资源是一件微不足道且被允许的事情,谷歌在一次演讲中已经说过可以使用它们。例如,他们谈到了诸如“ok”和“cancel”之类的字符串,它们被翻译成多种语言。
  • 不过,我会尽力按照你的建议去做。
  • 当然是允许的,每个人都这样做,我只是说这是众所周知的问题原因
  • 这是正确答案。多么奇怪。只有图像文件不能使用。其他资源都很好(字符串、布局、ID ...)。我想知道是否只有部分图像或全部图像需要在我的应用程序中替换为图像。我也想知道这是怎么回事。
  • 能否请您展示一些您如何找到此答案的链接?我什至不明白它应该是什么以及为什么会发生,因为资源在那里......
【解决方案2】:

对我来说,这是我尝试将透明图标放在这样的事实:

android:icon="@android:color/transparent"

【讨论】:

  • 另一种方法是使用 1x1 透明可绘制对象来消除活动图标。
  • 我也有同样的情况,但删除它对应用程序没有明显影响(值得一试,而不是费心创建透明可绘制对象)
【解决方案3】:

在我的情况下,问题只是我的应用程序的依赖项之一声明了要使用的活动之一 android:icon="@color/black" 在他们的清单中,而不是使用drawable。您不会收到任何编译错误,并且应用程序运行良好。只有 aapt 工具会报告错误(或上传到 Playstore)。 请注意,库甚至不需要声明 android:icon(它们不是可安装的应用程序!)但 AndroidStudio 似乎默认所有项目都在清单中声明一个。

【讨论】:

    【解决方案4】:

    我知道有正确的答案,但我相信我的经验可以帮助一些人......

    所以我收到同样的错误:

    获取 'android:icon' 属性时出错:属性不是字符串 价值

    但我的问题与图标无关!!!

    我得到这个错误的原因在这里:

    android:label="@string/app_name"

    我的项目有 3 种不同的语言,但主要的 string.xml 没有@string/app_name...这就是原因!

    所以要小心!

    【讨论】:

    • 我爱你! :) 你让我今天一整天都感觉很好!我在图标、res 文件夹和许多其他东西上尝试了 SO 很多东西。我没有在strings.xml中添加那行,但谷歌更具体一点也不会有害:)非常感谢@Stan!
    • :) 很高兴为您提供帮助!和平;-)
    【解决方案5】:

    我看到你尝试了我猜的一切。试试换图标吧? :) 我的意思是剩下的唯一可能就是你的图标。

    【讨论】:

    【解决方案6】:

    尝试为不同的屏幕尺寸创建单独的布局。将文件夹命名为 res/layoutres/layout-large

    【讨论】:

      【解决方案7】:

      当我尝试使用 XML drawable 作为图标(为 PNG 图像添加填充等)时,我想我遇到了这个问题(或类似的问题,不确定)。不过,我认为您的问题不一样,因为您似乎直接引用了 PNG 文件。

      一些尝试的建议(通过消除过程来追踪问题):

      • 删除res/drawable-mdpi/app_icon.png 文件,看看是否有其他错误。
      • 删除清单中的所有 android:icon 属性,看看是否仍然出现错误。
      • 将项目中名为 app_icon 的任何其他资源重命名为其他名称。

      如果所有其他方法都失败了,我可能会开始剥离外部 JAR 和库项目(并可能暂时注释引用它们的代码),以查看错误是否由它们中的任何一个触发。或者,可以从最低限度的 AndroidManifest.xml 重新开始,然后一次添加一项。

      另一个想法是尝试找出aapt 产生错误的原因。也许下载源代码并尝试调试它?

      【讨论】:

      • 那些没有帮助。我发现了问题,但我不明白为什么会发生。我已经在这里勾选了答案。如果你愿意,你可以加入并说出你的想法...... :)
      【解决方案8】:

      您是否尝试过关闭计算机然后再打开?

      尝试从 Activity 中删除 android:icon="@drawable/app_icon,因为它会退回到应用程序中指定的图标。

      尽量不要使用proguard。

      【讨论】:

      • @androiddeveloper 用新建议更新了我的答案(尽量不要使用 proguard)
      • 这很奇怪。确定我启用了proguard。很高兴你告诉我这件事。它一直被禁用......现在我将通过在“project.properties”文件中添加下一行来使用它:proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt: proguard-project.txt 。可悲的是,它也没有帮助(启用或禁用它)。
      • 我发现了问题,但我不明白为什么会这样。我已经在这里勾选了答案。如果你愿意,你可以加入并说出你的想法...... :)
      【解决方案9】:

      在某些情况下,问题是因为我使用了@null 作为值。完全删除修复它。将@null 设置为 android:icon 时也会发生同样的情况。

      【讨论】:

        【解决方案10】:

        我今天遇到了同样的问题,@Rahl_Pryde 的解决方案只需稍作改动即可正常工作。

        在我的情况下,问题是我的一些 Activity 图标的 android 透明 res 颜色。但是改成局部透明色并不能解决问题。

        将图标从透明颜色更改为 2x2 透明 png 时已修复。

        【讨论】:

        • 请将此评论放在 Rahl_Pryde 的回答下方,因为您发布的评论是对这个问题的回答
        • 因为我的名声不好所以不能这样做。
        【解决方案11】:

        在我的情况下,我通过使用始终默认的 res 文件夹(即 values、values-es、values-ca)解决了这个问题

        【讨论】:

        • 我不明白你的意思。这些是标准文件夹。您不能使用具有错误限定符的文件夹...
        • 对不起,我的解释很糟糕,我将确切地告诉我我做了什么:我有以下文件夹:“values”“values-ca”“values-es”在“values- ca" 和 "values-es" 我有一个不在 "values" 中的文件。我将该文件复制到“值”中,这解决了我们的问题。您应该在“drawable”中拥有“drawable-*”中的每个文件。
        • 哦,我明白了,虽然“drawable”不应该有图像,但只有 XML 文件,因为“drawable”与“drawable-mdpi”相同。
        【解决方案12】:

        在我的情况下,问题发生是因为我在发布之前更改了包名称并忘记了更改目录名称。项目仍在编译,但无法在 google play 上发布。

        如果有红色下划线的包名错误,请检查任何 java 文件

        '包名xxx.yyy.zzz与文件路径不对应 'xxx.eee.zzz'。

        【讨论】:

          【解决方案13】:

          在我的情况下,将我用于我的应用程序图标的 png 复制到我的“drawable-nodpi”文件夹中,并且 Play 商店接受了我的 apk。如果您没有 nodpi 文件夹,那么也许您只需将其从与存储桶大小相关的可绘制文件夹中复制出来,然后将其粘贴到基本文件夹“可绘制”中。

          这似乎是最近的 Play 商店要求,因为我在今天之前从未见过此错误。也请注意 androiddeveloper 的评论。

          【讨论】:

          • @androiddeveloper 我多年来一直将它用于 png 文件,但如果你没有矢量,如果你有相同的背景,使用 nodpi 文件夹来处理大型 png 可以节省内存多个活动的图像,允许您从与存储桶相关的可绘制文件夹中删除这些 png。非常感谢 droiddev 的矢量评论!
          • 更正:“anydpi”用于 VectorDrawable。但是,我认为“nodpi”不会为您节省内存,并且您不必将图像放在所有密度桶中。一个高密度就足够了,它实际上会节省你的内存,因为对于较低的密度,位图会自动使用下采样来变小
          猜你喜欢
          • 2018-06-29
          • 2021-04-11
          • 1970-01-01
          • 2019-02-23
          • 2018-05-04
          • 1970-01-01
          • 2016-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多