Lint предупреждает перезаписанные строки в strings.xml как неиспользованный

#android #android-resources #lint

#Android #android-ресурсы #ворсинки

Вопрос:

У меня есть модуль библиотеки Android с strings.xml объявляет некоторые строки внутри. Конечно, эти строки используются в этой библиотеке.

У меня есть приложение для Android, которое имеет зависимости implementation project(':thelibmodule') . Затем в этом приложении для Android у меня также есть те же строки, которые нужно перезаписать в библиотеке Android. Таким образом, это означает, что они используются внутри библиотеки Android.

Эта стратегия работает отлично, перезаписанные строки работают отлично. Но Lint предупреждает, что эти строки в приложении Android не используются. Почему и как исправить? Должен ли я как-то исправить код или я должен исправить правила Lint?

Комментарии:

1. Хммм… похоже, никто не сталкивается с этой проблемой, или ни у кого нет ответа, или даже никто не хочет обсуждать. Грустно!

2. Это из-за того, как реализован UnusedResourceDetector. Насколько я знаю, он ищет только использование в файлах проекта, не проверяя внешние библиотеки. Предупреждение следует рассматривать как ложноположительное и может быть проигнорировано. Но я бы сказал, что переопределение ресурсов — плохая практика, и ее следует избегать.

3. На самом деле это не плохая практика. Что вы будете делать, если у вас одинаковая библиотека для многих приложений, но некоторые приложения поддерживают только один язык, а другие приложения будут поддерживать несколько языков? Вы должны это сделать, или вы можете сказать мне, как это сделать, как вы испытываете?

4. Переопределение ресурсов может привести к труднодоступным ошибкам. Что произойдет, если библиотека добавит или удалит позиционный аргумент в строке в новой версии? Вы должны убедиться, что переопределенные ресурсы соответствуют новому «контракту». Я вижу два лучших способа: 1. добавить поддержку всех необходимых языков в саму библиотеку (не всегда возможно, особенно если вы не являетесь разработчиком этой библиотеки) 2. переместить ресурсы из библиотеки и предоставить интерфейс для извлечения ресурсов (через атрибуты Kotlin / Java или theme) и реализовать егона стороне приложения.

5. @italankin нам не нужно проверять, соответствуют ли переопределенные ресурсы новому контракту, если у нас есть определенные ресурсы только для переопределения, контракт есть, но мы не можем пропустить, потому что, если мы хотим новый язык для этих ресурсов, нам нужно его перезаписать. Но да, я согласен с вами, что ваше решение (2) выглядит многообещающим, хотя и требует дополнительных усилий, но да, я думаю, что смогу это сделать, чтобы избежать предупреждений. Большое спасибо.