Отчет Lint «Жестко закодированный пакет в пространстве имен» - PullRequest
0 голосов
/ 14 ноября 2018

сегодня, когда я хочу получить релиз из своего проекта, андроид студия показывает эту ошибку:

android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}

Итак, я открываю папку отчетов lint и вижу эту ошибку:

<issue
    id="ResAuto"
    severity="Fatal"
    message="In Gradle projects, always use `http://schemas.android.com/apk/res-auto` for custom attributes"
    category="Correctness"
    priority="9"
    summary="Hardcoded Package in Namespace"
    explanation="In Gradle projects, the actual package used in the final APK can vary; for example,you can add a `.debug` package suffix in one version and not the other. Therefore, you should **not** hardcode the application package in the resource; instead, use the special namespace `http://schemas.android.com/apk/res-auto` which will cause the tools to figure out the right namespace for the resource regardless of the actual package used during the build."
    errorLine1="    xmlns:app=&quot;http://schemas.android.com/apk/res/ir.app.appname&quot;>">"
    errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
    quickfix="studio">
    <location
        file="C:\...\app\src\main\res\color\mybutton_backgroundcolor.xml"
        line="3"
        column="16"/>
</issue>

mybutton_backgroundcolor.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/ir.app.appname">

    <item android:state_enabled="true" app:state_read ="false" android:color="@color/backgrpund_button_success"/>

    <item android:state_enabled="false" app:state_read ="false" android:color="@color/gray_4"/>
    <item app:state_read ="true" android:color="@color/gray_4"/>

</selector>

ошибка в этой xmlns: app = "http://schemas.android.com/apk/res/ir.app.appname"> строке.

Может ли кто-нибудь помочь мне решить эту проблему?!

Обновление: эта ошибка возникает после обновления библиотеки com.android.support до версии 28

1 Ответ

0 голосов
/ 26 декабря 2018

Пространство имен app должно быть объявлено как xmlns:app="http://schemas.android.com/apk/res-auto":

Как говорит Линт:

В проектах Gradle фактический пакет, используемый в окончательном APK, может отличаться; вы можете добавить суффикс пакета .debug в одной версии, а не Другой. Поэтому вы должны , а не жестко закодировать пакет приложения в ресурс; вместо этого используйте специальное пространство имен http://schemas.android.com/apk/res-auto который вызовет инструменты выяснить правильное пространство имен для ресурса независимо от фактический пакет, использованный во время сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...