получение "android: icon" атрибут: атрибут не является строковым значением " ошибка при загрузке APK в play store

фон

после стольких часов моего свободного времени я готов опубликовать свое первое приложение в play store, но, к сожалению, у меня возникли трудности с загрузкой подписанного приложения.

я успешно экспортировал приложение с созданным хранилищем ключей (все через Eclipse & ADT), поэтому у меня есть подписанный APK для загрузки в play store (здесь).

проблема

Я продолжаю получать это сообщение:

ошибка загрузки ваш APK не может быть проанализирован с помощью "aapt dump badging". Ошибка вывода: не удалось запустить дамп aapt: W / ResourceType(14856): Нет известного пакета при получении значения для номера ресурса 0x01080049 Ошибка получения атрибута "android:icon": атрибут не является строкой значение

такие как:

enter image description here

само приложение работает очень хорошо на реальных устройствах, и файл изображения используется обычный файл PNG, как используется android-активы-веб-сайт Студии.

что я пробовал

Я искал здесь на StackOverflow и нашел много сообщений об этом (здесь). Я прочитал многие из них и попробовал следующие вещи, но ничего не помогло:

  1. поместите значок приложения в другую папку/ы ("drawable"," drawable-mdpi",... даже "drawable-xxxhdpi") с несколькими комбинациями (положить/удалить из каждого папки.)

  2. установка метки, значка и темы как на теге "приложение", так и на теге активности запуска.

  3. измените имя файла изображения и сам файл (замените его значками приложения по умолчанию).

  4. очистить проект.

  5. проверка сообщений корпии.

  6. обновление ADT (до 22.3.0.v201310242005-887826), Eclipse (для Kepler Service Release 1), SDK tools (до 22.3), SDK build tools (до 19.0.1). Все это в значительной степени последняя официальная версия.

  7. проверка того, что не используется двойной файл jar (что файл jar не существует более чем в одной библиотеке, особенно если он имеет разные версии).

  8. попробовал поставить струны.xml в "res / values-en "вместо" res / values"

  9. пробовал добавить атрибут" android:value " ко всем тегам метаданных на манифест (предлагается Google). Это не сработало. На самом деле, во всех учебниках, которые я читал, я никогда не видел такого требования от AppWidget, поэтому я думаю, что это не нужно в любом случае.

  10. попробовал команду 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.


в моем случае я решил его, используя всегда папки res по умолчанию ie values, values-es, values-ca


в моем случае проблема возникла, потому что я изменил имя пакета перед выпуском и забыл об изменении имен каталогов. Проект все еще компилировался, но выпустить его в google play было невозможно.

Проверьте любой файл java, если у вас есть красное подчеркнутое имя пакета с ошибкой

' имя пакета xxx.yyy.ззз не соответствует пути к файлу 'ХХХ.еее.ззз.


в моем случае скопировал png, который я использую для своего значка приложения, в папку" drawable-nodpi", и Play store принял мой apk. Если у вас нет папки nodpi, возможно, Вам просто нужно скопировать ее из ваших папок, связанных с размером корзины, и вставить ее в базовую папку "drawable."

Это, кажется, недавнее требование Play store, так как я никогда не видел эту ошибку до сегодняшнего дня. Обратите внимание на комментарий androiddeveloper.