在将APK上传到Play商店时获取“'android:icon'属性:属性不是字符串值”错误

时间:2013-12-27 12:21:07

标签: android google-play apk aapt

背景

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

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

问题

我一直收到这条消息:

  

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

因此:

enter image description here

应用程序本身在真实设备上运行良好,正在使用的图像文件是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
    
  11. 这向我展示了游戏商店显示的相同内容(我已经用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)
    

    问题

    发生了什么事?

    我如何克服这个问题?

13 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:13)

对我而言,我试图放置这样的透明图标:

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

答案 2 :(得分:2)

在我的情况下,问题只是我的应用程序的某个依赖项已声明其中一个要使用的活动     机器人:图标=&#34; @彩色/黑色&#34; 在他们的清单中,而不是使用drawable。您没有收到任何编译错误,应用程序运行正常。只有aapt工具报告错误(或上传到Playstore)。 请注意,图书馆甚至不需要声明android:图标(它们不是可安装的应用程序!)但AndroidStudio似乎默认所有项目都在清单中声明一个。

答案 3 :(得分:2)

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

所以我收到同样的错误:

  

错误获取&#39; android:icon&#39; attribute:属性不是字符串   值

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

我收到此错误的原因在于:

  

机器人:标签=&#34; @串/ APP_NAME&#34;

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

所以要小心!

答案 4 :(得分:0)

我看到你尝试了我想的一切。尝试更换图标可能吗? :)我的意思是只留下可能性是你的偶像。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

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

如果所有其他方法都失败了,我可能会开始剥离外部JAR和库项目(并且可能暂时评论引用它们的代码),以查看错误是否被其中任何一个触发。或者,可以从最初的AndroidManifest.xml开始新鲜,并一次添加一件物品。

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

答案 7 :(得分:0)

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

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

尽量不要使用proguard。

答案 8 :(得分:0)

在可能的情况下,问题是因为我使用@null作为值。完全删除它修复它。当你把@null用于android:icon时会发生同样的情况。

答案 9 :(得分:0)

今天我遇到了同样的问题,而且@ Rahl_Pryde的解决方案在一个小小的改变下运行良好。

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

将图标从透明颜色更改为2x2透明png时固定。

答案 10 :(得分:0)

在我的情况下,我通过使用始终默认的res文件夹解决了它,即值,值-es,值-ca

答案 11 :(得分:0)

在我的情况下,问题出现了,因为我在发布之前更改了包名,忘了更改目录名。项目仍在编译,但无法在谷歌播放中发布。

如果您的红色带下划线的包名称有错误

,请检入任何java文件
  

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

答案 12 :(得分:0)

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

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