Получение атрибута "Андроид: значок": атрибут не является строковым значением "при загрузке APK в магазин воспроизведения
Фон
После стольких часов моего свободного времени я готов опубликовать свое первое приложение в игровом магазине, но, к сожалению, у меня возникают трудности с загрузкой подписанного приложения.
Я успешно экспортировал приложение с созданным мной хранилищем ключей (все через Eclipse и ADT), поэтому у меня есть подписанный APK для загрузки в магазин воспроизведения ( здесь).
Проблема
Я продолжаю получать это сообщение:
Ошибка загрузки. APK не может быть проанализирован с использованием значка "aap dump". Выход ошибки: не удалось выполнить идентификацию дампа aapt: W/ResourceType (14856): Неизвестный пакет при получении значения для номера ресурса 0x01080049 ERROR получает атрибут android: icon: атрибут не является строкой Значение
как таковой:
![enter image description here]()
Приложение само по себе работает очень хорошо на реальных устройствах, а используемый ими образ является обычным PNG файлом, который используется android-assets веб-сайт.
Что я пробовал
Я искал здесь в StackOverflow и нашел много сообщений об этом ( здесь). Я прочитал много из них и пробовал следующее, но ничего не помогло:
-
поместите значок приложения в другую папку/с ( "drawable", "drawable-mdpi",... даже "drawable-xxxhdpi" ) с несколькими комбинациями (поместите/удалите из каждой папки).
-
установка метки, значка и темы как в теге "приложение", так и в теге активности запуска.
-
измените имя файла изображения и сам файл (замените его значками приложений по умолчанию).
-
очистить проект.
-
Проверка сообщений Lint.
-
обновление ADT (до 22.3.0.v201310242005-887826), Eclipse (до версии Kepler Service Release 1), инструменты SDK (до 22.3), инструменты для создания SDK (до 19.0.1). Все это почти последняя официальная версия.
-
проверка того, что не используется двойной файл jar (что не существует jar файла в нескольких библиотеках, особенно если он имеет разные версии).
-
попытался поместить strings.xml в "res/values-en" вместо "res/values"
-
попытался добавить атрибут "android: value" ко всем меткам метаданных в манифесте (предложенный Google). Это не сработало. На самом деле, во всех обучающих программах, которые я прочитал, я никогда не видел такого требования от AppWidget, поэтому я думаю, что это все равно не нужно.
-
попробовал команду aapt:
aapt dump badging
Это показало мне то же самое, что показывает игровой магазин (я заменил настоящее имя пакета и имя приложения с помощью 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)
Вопрос
Что происходит?
Как мне преодолеть это?
Ответы
Ответ 1
Если вы используете любые значки системы Android как значки действий (т.е. манифест содержит <activity ... android:icon="@android:drawable/...
), это может быть проблемой. Если да, попробуйте скопировать эти значки в свой проект. Использование их в других местах не должно быть проблемой, поскольку кэш не прикасается к ним.
Ответ 2
для меня это был тот факт, что я попытался установить прозрачные значки следующим образом:
android:icon="@android:color/transparent"
Ответ 3
Я знаю, что есть правильный ответ, но я считаю, что мой опыт может помочь кому-то...
поэтому я получаю ту же ошибку:
ОШИБКА получения атрибута android: icon: атрибут не является строкой Значение
но моя проблема не была связана с значком!!!
Причина, по которой я получаю эту ошибку, была здесь:
Android: метка = "@строка/app_name"
В моем проекте есть 3 разных языка, но основной файл string.xml был без @string/app_name... и вот почему!
Поэтому будьте осторожны!
Ответ 4
В моем случае проблема заключалась в том, что одна из моих зависимостей в приложении объявила о том, что одна из их Android: значок = "@цвет/черный"
в своем манифесте, вместо того, чтобы использовать выталкиваемый. Вы не получаете ошибок компиляции, и приложения работают нормально. Только инструмент aapt сообщает об ошибке (или загрузке в PlayStore).
Обратите внимание: библиотекам даже не нужен андроид: значок, который будет объявлен (они не являются устанавливаемым приложением!), Но AndroidStudio по умолчанию все проекты объявляют в манифесте.
Ответ 5
Я вижу, вы попробовали все, что я думаю. Попробуйте изменить значок, может быть?:) Я имею в виду только возможность, что слева - это ваша иконка.
Ответ 6
Попробуйте создать отдельные макеты для разных размеров экрана. Назовите папки как res/layout
и res/layout-large
Ответ 7
Я думаю, что я попал в эту проблему (или что-то подобное, не уверен), когда я попытался использовать XML-чертеж в качестве значка (чтобы добавить дополнение и т.д. к изображению PNG). Я не думаю, что ваша проблема одинакова, поскольку вы, похоже, напрямую ссылаетесь на файл PNG.
Некоторые предложения по попытке (отслеживать проблему по процессу устранения):
- Удалите файл
res/drawable-mdpi/app_icon.png
и посмотрите, есть ли у вас другая ошибка.
- Удалите все атрибуты
android:icon
в манифесте и посмотрите, есть ли у вас ошибка.
- Переименуйте любой другой ресурс с именем
app_icon
в проект на что-то еще.
Если все остальное не удастся, я, вероятно, начну вытеснять внешние JAR файлы и проекты библиотек (и, возможно, временно комментировать код, ссылающийся на них), чтобы увидеть, была ли ошибка вызвана любым из них. Или, может быть, начать с нуля с минимальным значением AndroidManifest.xml
и одновременно добавлять свои материалы по одному элементу.
Другая идея - попытаться выяснить, почему aapt
создает ошибку. Возможно, загрузите источник и попытайтесь его отладить?
Ответ 8
Вы пытались выключить компьютер и снова включить его?
Попробуйте удалить android:icon="@drawable/app_icon
из Activity, так как он вернется к значку, указанному в приложении.
Не пытайтесь использовать proguard.
Ответ 9
В этом случае проблема заключается в том, что я использовал @null для значения. Полностью удалить это исправление. То же самое происходит, когда вы добавляете @null для android: значок.
Ответ 10
Сегодня я получал ту же проблему, и решение @Rahl_Pryde отлично работало с небольшими изменениями.
В моем случае проблема заключалась в прозрачном цвете res android для некоторых моих значков активности. Но переход на локальный прозрачный цвет не устраняет проблему.
Это исправлено при изменении значка с прозрачного цвета на 2x2 прозрачный png.
Ответ 11
В моем случае я решил это, используя всегда папки res по умолчанию, т.е. значения, значения-es, values-ca
Ответ 12
В моем случае проблема возникла из-за того, что я изменил имя пакета перед выпуском и забыл об изменении имен каталогов. Проект все еще компилировался, но его невозможно было опубликовать в google play.
Проверьте любой java файл, если у вас есть красное подчеркнутое имя пакета с ошибкой
'Имя пакета xxx.yyy.zzz не соответствует пути к файлу 'Xxx.eee.zzz'.
Ответ 13
В моем случае скопировал png, который я использую для своего приложения, в мою папку "drawable-nodpi", и Play Store принял мой apk. Если у вас нет папки nodpi, то, возможно, вам просто нужно скопировать ее из ваших папок с размерами, зависящими от размера ведра, и вставить их в базовую папку "drawable".
Это, кажется, последнее требование к магазину Play, так как я никогда не видел эту ошибку до сегодняшнего дня. Обратите внимание на комментарий androiddeveloper.