getting " 'android:icon' attribute: attribute is not a string value” error while uploading an APK to the play store
Asked Answered
F

14

26

Background

After so many hours of my free time, I'm ready to publish my very first app to the play store, but sadly I'm having difficulties uploading the signed app.

I've successfully exported the app with the keystore I've created (all via Eclipse & ADT), so I have the signed APK to be uploaded to the play store (here).

The problem

I keep getting this message:

Upload failed Your APK cannot be analyzed using 'aapt dump badging'. Error output: Failed to run aapt dump badging: W/ResourceType(14856): No known package when getting value for resource number 0x01080049 ERROR getting 'android:icon' attribute: attribute is not a string value

as such:

enter image description here

The app itself works very well on real devices, and the image file being used is a normal PNG file as used by the android-assets-studio website.

What I've tried

I've searched here on StackOverflow and found many posts about it (here). I've read many of them and tried the next things, but nothing has helped:

  1. put the app icon on a different folder/s ("drawable", "drawable-mdpi", ... even "drawable-xxxhdpi") with multiple combinations (put/remove from each of the folders).

  2. setting the label, icon and theme on both the "application" tag and on the launcher activity tag.

  3. change the image file name and the file itself (replaced it with the default app icons).

  4. clean up the project.

  5. Checking Lint messages.

  6. updating ADT (to 22.3.0.v201310242005-887826), Eclipse (to Kepler Service Release 1), SDK tools (to 22.3), SDK build tools (to 19.0.1). Everything is pretty much the latest official version.

  7. checking that there's no double jar file being used (that no jar file exists on more than one library, especially if it has different versions).

  8. tried putting the strings.xml into "res/values-en" instead of "res/values"

  9. tried adding "android:value" attribute to all meta-data tags on the manifest (suggested by Google). It didn't work. In fact, in all of the tutorials I've read, I never saw such a requirement from an AppWidget, so I think it's not needed anyway.

  10. tried the aapt command:

    aapt dump badging
    

This has shown me about the same thing the play store shows (I've replaced the real package name and app name with XXX just here):

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

This happens even though the file do exist inside this folder.

Here's the manifest. Again, replaced the real paths and names of the activities and app with XXX. I can assure you that the paths are correct as the app can run just fine.

<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)

The question

What is going on?

How do I overcome this?

Farcy answered 27/12, 2013 at 12:21 Comment(9)
This might help. It says, the error might be misleading, meaning: it can be related to the strings in the resource folder etc..Confectioner
@Confectioner yes, i've read similar posts, and tried to figure out which string is problematic. can't find any, and I've also found out that the resource id that aapt complains about doesn't even exist (searched the entire workspace), but the one of the app icon do.Farcy
This answer may be helpful :https://mcmap.net/q/536938/-error-getting-39-android-icon-39-attribute-attribute-is-not-a-string-value And this : https://mcmap.net/q/536939/-failed-to-upload-apk-to-google-playLouiselouisette
@user3134811 i've already wrote that i've tried it. sadly it didn't help... :(Farcy
Have you tried installing the signed APK on a clean device? And of course, launching it,etc.Kortneykoruna
@Kortneykoruna I've now uninstalled the app and installed&run the signed app. works just fine, as before.Farcy
Are you using proguard or something similar?Baram
@Baram yes, using the default configurations of it.Farcy
@Confectioner following that post led me to an answer :) I had different app names for production and dev and did not update these when I added translationsMid
C
16

If you are using any android system icons as activity icons (i.e. manifest contains <activity ... android:icon="@android:drawable/... ) , they could be the problem. If you are, try copying these icons into your project. Using them elsewhere should be no problem since badging doesn't touch those.

Campbellite answered 31/12, 2013 at 15:23 Comment(13)
Using the Android resources is a trivial and allowed thing, and Google already said in a lecture that it's OK to use them. As an example, they've talked about strings like "ok" and "cancel" which are translated to multiple languages.Farcy
Nevertheless, I will try to do as you offered.Farcy
Of course it's allowed and everyone does it, I'm just saying that it's been known to be a cause of issuesCampbellite
This is the correct answer. How very odd. only image files couldn't be used. other resources are fine (strings, layouts, ids...). I wonder if it's only a part of the images, or all of them, that needed to be replaced with images within my app. I also wonder how come this is happening at all.Farcy
can you please show some links of how you've found this answer? I don't even understand what it's supposed to be and why it happens, as the resources are there...Farcy
I knew the answer because I'd seen it happen before where I work and that's how it got solved. Nevertheless, it seems it is a common bug groups.google.com/forum/#!topic/android-developers/F1F3fRKBioQ . Anyway, glad you solved it.Campbellite
Nice, so it's a bug on the play store (or aapt which the play store probably uses) , right?Farcy
I believe it might be a long going bug, some believe Google doesn't want built-in icons in our apps ( blackmoonit.com/2010/07/market-disallow-use-of-android-icons ) but it's the way it works.Campbellite
So i should have searched more about this problem to find this out. I see. Thanks for all your time.Farcy
@androiddeveloper Tried the solution which Pablo mentioned and its still not working.Ridiculous
@ArslanKhalid go over various resources that you use. maybe try what i did.Farcy
@androiddeveloper I have gone through all of the things you mentioned and almost tried every solution but still no success.Ridiculous
@ArslanKhalid Try checking if it's not your code's fault, as it could be someones else's (a library that uses weird resources).Farcy
I
13

for me it was the fact that I tried to put transparent icons like this:

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

Ilia answered 14/4, 2014 at 13:41 Comment(2)
An alternative approach is to use a 1x1 transparent drawable to eliminate the activity icon(s).Scholium
I had the same, but removing it has had no discernible effect on the app (worth a try, rather than going to the bother of creating a transparent drawable)Gans
A
2

In my case, the issue was simply that one of my app's dependencies had declared one of their activities to use android:icon="@color/black" in their manifest, instead of using a drawable. You don't get any compilation errors, and the apps works just fine. Only the aapt tool reports the error (or uploading to the Playstore). Note, libraries don't even need android:icon to be declared (they're not an installable app!) but AndroidStudio appears to default all projects to declare one in the manifest.

Amhara answered 14/5, 2015 at 23:3 Comment(0)
C
2

I know that there is correct answer, but i believe that my experience can help some one...

so i receive the same error:

ERROR getting 'android:icon' attribute: attribute is not a string value

but my problem wasn't related with icon!!!

The reason why I get this error was here:

android:label="@string/app_name"

My project has 3 different languages, but the main string.xml was without @string/app_name... and this was the reason!

so be careful!

Countrified answered 24/5, 2016 at 14:49 Comment(2)
I Love You ! :) You made my day! I tried SO many things on icons, res folders and so many other thigs. I am guilty of not adding that line in strings.xml, BUT google being a bit more specfific would not harm at all :) Thank you very much @Stan!Heft
:) glad to help! Peace ;-)Countrified
L
0

I see you tried everything i guess. Try changing icon maybe? :) I mean only possiblity that left is your icon.

Louiselouisette answered 29/12, 2013 at 14:4 Comment(11)
will try it out, but it's not that Android can't handle it... the app runs just fine with this png file.Farcy
Yes but maybe something about image's properties doesn't fit Google Play's requirements. I know its a low shot.Louiselouisette
Then try mailing Google Play Support about it if you haven't already.Louiselouisette
ok i've tried to replace the icons files with the default ones, and i still get the same error. how do i mail the google-play-support? from here: support.google.com/googleplay/android-developer/… ?Farcy
support.google.com/googleplay/android-developer/troubleshooter/… try hereLouiselouisette
I've emailed them, and they returned me an answer. I'll write here an answer in case it helps me getting out of this mess.Farcy
They told me to add "android:value" to all meta-data tags. I have only one which is of an AppWidget. still didn't work and it makes sense since AppWidget doesn't need it - it never had it on any tutorial I've seenFarcy
Google also told me to try to write a question on their forums (like here: groups.google.com/forum/#!forum/android-developers ) , but for some reason my question wasn't published . :(Farcy
I think you just have bad luck about Android Development.Louiselouisette
I've found out the problem but I don't understand why it happens. i've ticked the answer here. if you wish, you can join and say what you think about it... :)Farcy
Oh, i didn't see that. I'm glad you fixed your problem finally :)Louiselouisette
A
0

Try creating separate layouts for different screen sizes. Name the folders as res/layout and res/layout-large

Adrea answered 31/12, 2013 at 14:52 Comment(0)
A
0

I think I was hit by this issue (or something similar, not sure) when I tried to use an XML drawable as the icon (to add padding, etc. to the PNG image). I don't think your issue is the same though, since you seem to refer to the PNG file directly.

Some suggestions to try (to track down the problem by process of elimination):

  • Remove res/drawable-mdpi/app_icon.png file and see if you got a different error.
  • Remove all android:icon attributes in your manifest and see if you still got the error.
  • Rename any other resource named app_icon in the project to something else.

If all else fail, I would probably start stripping out the external JARs and library projects (and probably temporarily commenting the code that refer to them) just to see if the error was triggered by any of them. Or maybe start fresh with a bare minimum AndroidManifest.xml and add your stuff one item at a time.

Another idea is to try to figure out why aapt is producing the error. Maybe download the source and try to debug it?

Andromache answered 2/1, 2014 at 18:24 Comment(1)
Those didn't help. I've found out the problem though I don't understand why it happens. i've ticked the answer here. if you wish, you can join and say what you think about it... :)Farcy
B
0

Have you tried turning your computer off and then on again?

Try removing android:icon="@drawable/app_icon from the Activity, as it will fall back to the icon specified in the Application.

Try not using proguard.

Baram answered 2/1, 2014 at 18:45 Comment(3)
@androiddeveloper updated my answer with a new suggestion (try not using proguard)Baram
That's weird. was sure i had proguard enabled. it's good that you've told me about it. it was disabled all this time... now i will use it, by adding the next line to the "project.properties" file: proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt . sadly, it didn't help too (having it either enabled or disabled).Farcy
I've found out the problem though I don't understand why it happens. i've ticked the answer here. if you wish, you can join and say what you think about it... :)Farcy
B
0

In may case, the problem is because I used @null for the value. Completely removing that fixes it. The same happens when you put @null for android:icon.

Baton answered 6/2, 2014 at 4:58 Comment(0)
S
0

I was getting the same issue today and the @Rahl_Pryde's solution worked fine with a minor change.

In my case, the problem was an android transparent res color to some of my Activity icons. But changing to a local transparent color doesn't fixed the problem.

It fixed when changed the icon from a transparent color to a 2x2 transparent png.

Schmitz answered 2/5, 2014 at 16:48 Comment(2)
Please put this comment below Rahl_Pryde's answer, because you are posting your comment as an answer to this questionPriming
Can't do that because of my low reputation.Schmitz
U
0

In my case I have solved it by using always default res folders ie values, values-es, values-ca

Unbonnet answered 2/7, 2014 at 21:3 Comment(3)
I don't understand what you mean. these are the standard folders. you can't use folders that have bad qualifiers...Farcy
Sorry about that poor explanation, I'm going to tell exactly what I've done: I had the following folders: "values" "values-ca" "values-es" Inside "values-ca" and "values-es" I had a file which wasn't in "values". I copied that file into "values" and that solved our problem. You should have each file that you have in "drawable-*" in "drawable".Unbonnet
oh, I see, though "drawable" isn't supposed to have images but only XML files, since "drawable" is the same as "drawable-mdpi" .Farcy
P
0

In my case the problem was occuring because I changed package name before releasing and forgot about changing directory names. Project was still compiling but it was impossible to release it on google play.

Check in any java file if you have red underlined package name with error

'Package name xxx.yyy.zzz does not correspond to the file path 'xxx.eee.zzz'.

Phenacite answered 10/6, 2016 at 8:15 Comment(0)
W
0

In my case, copied the png I use for my app icon into my "drawable-nodpi" folder and the Play store accepted my apk. If you don't have a nodpi folder, then maybe you just need to copy it out of your bucket size related drawable folders, and paste it into the base folder "drawable."

This seems to be a recent Play store requirement, since I've never seen this error before today. Take note of androiddeveloper's comment as well.

Wilmer answered 31/10, 2016 at 22:22 Comment(2)
@androiddeveloper I've been using it for png files for years knowing that, but if you don't have vectors, using the nodpi folder for large pngs can save on memory if you have the same background image for multiple activities, allowing you to remove those pngs from bucket related drawable folders. Thanks a ton for the vector comment droiddev!Wilmer
Correction: "anydpi" is used for VectorDrawable. However, I don't think "nodpi" doesn't saves you on memory, and you don't have to put images in all density buckets. One of high density is enough, and it will actually save you on memory, because for lower densities, the bitmap will be smaller using downsampling, automaticallyFarcy
D
0

Update 2022: I use aapt2 dump badging instead of aapt dump badging,and aapt2 will dump ok without errors

Demarcate answered 23/11, 2022 at 8:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.