получение "android: icon" атрибут: атрибут не является строковым значением " ошибка при загрузке APK в play store
фон
после стольких часов моего свободного времени я готов опубликовать свое первое приложение в play store, но, к сожалению, у меня возникли трудности с загрузкой подписанного приложения.
я успешно экспортировал приложение с созданным хранилищем ключей (все через Eclipse & ADT), поэтому у меня есть подписанный APK для загрузки в play store (здесь).
проблема
Я продолжаю получать это сообщение:
ошибка загрузки ваш APK не может быть проанализирован с помощью "aapt dump badging". Ошибка вывода: не удалось запустить дамп aapt: W / ResourceType(14856): Нет известного пакета при получении значения для номера ресурса 0x01080049 Ошибка получения атрибута "android:icon": атрибут не является строкой значение
такие как:
само приложение работает очень хорошо на реальных устройствах, и файл изображения используется обычный файл PNG, как используется android-активы-веб-сайт Студии.
что я пробовал
Я искал здесь на StackOverflow и нашел много сообщений об этом (здесь). Я прочитал многие из них и попробовал следующие вещи, но ничего не помогло:
поместите значок приложения в другую папку/ы ("drawable"," drawable-mdpi",... даже "drawable-xxxhdpi") с несколькими комбинациями (положить/удалить из каждого папки.)
установка метки, значка и темы как на теге "приложение", так и на теге активности запуска.
измените имя файла изображения и сам файл (замените его значками приложения по умолчанию).
очистить проект.
проверка сообщений корпии.
обновление ADT (до 22.3.0.v201310242005-887826), Eclipse (для Kepler Service Release 1), SDK tools (до 22.3), SDK build tools (до 19.0.1). Все это в значительной степени последняя официальная версия.
проверка того, что не используется двойной файл jar (что файл jar не существует более чем в одной библиотеке, особенно если он имеет разные версии).
попробовал поставить струны.xml в "res / values-en "вместо" res / values"
пробовал добавить атрибут" android:value " ко всем тегам метаданных на манифест (предлагается Google). Это не сработало. На самом деле, во всех учебниках, которые я читал, я никогда не видел такого требования от AppWidget, поэтому я думаю, что это не нужно в любом случае.
-
попробовал команду aapt:
aapt dump badging
Это показало мне примерно то же самое, что показывает play store (Я заменил реальное имя пакета и имя приложения на 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 ответов
Если вы используете любые значки системы android как значок (т. е. манифест содержит <activity ... android:icon="@android:drawable/...
) , Они могут быть проблемы. Если да, попробуйте скопировать эти картинки в свой проект. Использование их в другом месте не должно быть проблемой, так как badging не касается их.
для меня это был тот факт, что я пытался поставить прозрачные значки, как это:
android:icon="@android:color/transparent"
в моем случае проблема заключалась в том, что одна из зависимостей моего приложения объявила об одном из своих действий для использования android: icon= " @цвет / черный" в их манифесте вместо использования drawable. Вы не получаете никаких ошибок компиляции, и приложения работают просто отлично. Только инструмент aapt сообщает об ошибке (или загрузке в Playstore). Обратите внимание, что библиотекам даже не нужен android: icon для объявления (они не являются устанавливаемым приложением!) но AndroidStudio по умолчанию объявляет все проекты один в декларации.
Я знаю, что есть правильный ответ, но я считаю, что мой опыт может помочь кому-то одному...
Так я получаю ту же ошибку:
ошибка получения атрибута "android:icon": атрибут не является строкой значение
но моя проблема не была связана с icon!!!
причина, по которой я получаю эту ошибку, была здесь:
android: label= "@string / app_name"
мой проект имеет 3 различных языки, но основная строка.xml был без @string / app_name... и в этом была причина!
Так что будьте осторожны!
Я вижу, вы пробовали все, что я думаю. Попробуйте изменить значок может быть? :) Я имею в виду только возможность, что слева ваш значок.
попробуйте создать отдельные макеты для разных размеров экрана. Назовите папки как res/layout
и res/layout-large
Я думаю, что меня поразила эта проблема (или что-то похожее, не уверен), когда я попытался использовать XML drawable в качестве значка (добавить дополнение и т. д. в формате PNG). Я не думаю, что ваша проблема такая же, хотя, поскольку вы, похоже, ссылаетесь на файл PNG напрямую.
некоторые предложения, чтобы попытаться (отследить проблему по процессу устранения):
- удалить
res/drawable-mdpi/app_icon.png
файл и посмотреть, есть ли у вас другая ошибка. - удалить все
android:icon
атрибуты проявите и посмотрите, есть ли у вас ошибка. - переименовать любой другой ресурс под названием
app_icon
в проекте к чему-то еще.
если все остальное не удастся, я, вероятно, начну удалять внешние банки и библиотечные проекты (и, вероятно, временно комментируя код, который ссылается на них), чтобы увидеть, была ли ошибка вызвана любым из них. Или, может быть, начать с чистого минимума AndroidManifest.xml
и добавьте свой материал по одному элементу за раз.
еще одна идея это попытаться выяснить, почему aapt
вызывает ошибку. Может быть, загрузить источник и попытаться отладить его?
вы пытались выключить компьютер, а затем снова включить?
Попробуйте удалить android:icon="@drawable/app_icon
из действия, так как он будет возвращаться к значку, указанному в приложении.
попробуйте не использовать proguard.
в мае проблема в том, что я использовал @null для значения. Полностью удалив это исправляет его. То же самое происходит, когда вы ставите @null для android:icon.
Я получал ту же проблему сегодня, и решение @Rahl_Pryde отлично работало с небольшим изменением.
в моем случае проблема заключалась в прозрачном цвете res android для некоторых моих значков активности. Но переход на локальный прозрачный цвет не устраняет проблему.
исправлено при изменении значка с прозрачного цвета на прозрачный png 2x2.
в моем случае проблема возникла, потому что я изменил имя пакета перед выпуском и забыл об изменении имен каталогов. Проект все еще компилировался, но выпустить его в google play было невозможно.
Проверьте любой файл java, если у вас есть красное подчеркнутое имя пакета с ошибкой
' имя пакета xxx.yyy.ззз не соответствует пути к файлу 'ХХХ.еее.ззз.
в моем случае скопировал png, который я использую для своего значка приложения, в папку" drawable-nodpi", и Play store принял мой apk. Если у вас нет папки nodpi, возможно, Вам просто нужно скопировать ее из ваших папок, связанных с размером корзины, и вставить ее в базовую папку "drawable."
Это, кажется, недавнее требование Play store, так как я никогда не видел эту ошибку до сегодняшнего дня. Обратите внимание на комментарий androiddeveloper.