If you tried to publish your app to the Android Market and received an error similar to the following one, you may be running up against a block put in place by Google:
The file is invalid: W/ResourceType(15353): No known package when getting value for resource number 0x01080049 ERROR getting ‘android:icon’ attribute: attribute is not a string value
I recently ran into this error trying to publish one of my apps because the icon I chose for my app’s Preferences screen activity was a built in android resource “@android:drawable/ic_menu_preferences”.
Open your AndroidManifest.xml file and view the raw XML. If you find any
1 | android:icon="@android:drawable/...blah..." |
in it, then you need to change it to use something in your app instead of using an android resource.
Normally, I wouldn’t think twice about using a built in resource. Why? The fewer resources our apps use, the smaller the footprint of the app. The more we use built in resources, the more standardized the “look and feel” the various apps are and the more user friendly the phone feels. This also lends one to need less help using various apps since we all share the same icon for preferences (for example). The problem I see using this approach with allowing any Activity to use an Android built in resource is that malicious apps might want to “hide” themselves by using something already familiar to the device operator.
I can understand Google not wanting to allow apps that use Android built in icons for their activities. I just wish the Preferences activity was exempt from that rule. =/
Pingback: Writing Settings ‹ 翟子博客-抵制日货,从我做起 — WordPress | 翟子博客-抵制日货,从我做起
Pingback: Error while uploading application to android-market : Android Community - For Application Development
Pingback: aapt ERROR getting ‘android:name’ attribute: attribute is not a string value | Son-Huy the Dev
The only constraint is that you can’t use builtin android resources as launcher icons. It’s a very bad practice anyway to put the preferences/settings activity as LAUNCHER/MAIN…
You can still display these icons with (or support equivalent):
onCreate() -> getActionBar().setIcon(android.R.drawable….blah…);