Пакет R не существует .... или это? - PullRequest
0 голосов
/ 05 октября 2018

Несколько дней назад я принял от возвращающегося клиента контракт на внесение нескольких изменений в его приложение для Android в течение следующих нескольких недель.Получив исходный код проекта от Github, я импортировал его в Android Studio (3.2) и заметил ошибку, которую я обычно вижу довольно часто, но только в течение короткого времени во время синхронизации Gradle: error: package R does not exist.Естественно, я пожал плечами и запустил «Чистый проект», а затем «Создать проект».

Ничего не изменилось

Сделал быстрый поиск в Googleи попробовал каждое «решение», которое смог найти.Я попробовал каждую комбинацию «Создать проект», «Создать модуль», «Очистить проект», «Перестроить проект», «Синхронизировать проект с файлами Gradle», «Синхронизировать с файловой системой», «Недействительные кэши / перезапустить».Я перезапустил свой ноутбук, обновил файлы SDK, обновил инструменты сборки, выделил каждую строку «Выполнение» Gradle и, в конце концов, удалил / переустановил Android Studio, а также на всякий случай удалил все свои настройки IDE.

Все еще ничего

Затем я создал новый проект и заметил, что сгенерированная строка setContentView() имеет ту же ошибку, ссылаясь на сгенерированный файл макета. Подождите. В нетронутом новом проекте та же ошибка?!?Я пошел дальше и нажал «запустить», и проект скомпилировался без каких-либо ошибок, вопреки тому, что говорят инспекции в реальном времени.

Возвращаясь к исходному импортированному проекту, я попытался запустить его, и компилятор выдает ту же ошибку пакета R.ЗАЧЕМ?!?!Других ошибок нет, Android Lint работает нормально, мои реализации Gradle распознаются в файлах, все имена пакетов верны, и мой файл AndroidManifest.xml в порядке.

Если вам нужно увидеть мойФайлы build.gradle, AndoridManifest или что-то еще, комментируйте и дайте мне знать.

Есть идеи?

РЕДАКТИРОВАТЬ

Не дубликат, потому что, как я уже говорил, у меня естьперепробовал все эти решения и ни один не сработал.Я объяснил, что я пробовал, и почему это уникальная ситуация.

Сравните содержимое вашей папки сборки с моей, и вы должны заметить разницу: enter image description here

Заметили, что папка R на верхнем изображении помечена по-другому?Это рабочий.Нижнее изображение показывает сломанный проект.Это были отдельные моменты.

enter image description here

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Таким образом, оказывается, что эта болезненно конкретная недокументированная ошибка была связана с несколькими вариантами сборки с разными файлами google-services.json.В одном из них имя пакета было неверным, но поскольку оно находилось в другом исходном каталоге, Android Lint не имел контекста для сравнения имени пакета, и файл R.java не создавался, посколькутехнически ошибка при работе Gradle Sync.

Я обнаружил это после многих часов работы с исходными файлами и перестройки проекта по одному файлу за раз в пустом проекте.Нет ничего лучше, чем когда ты наконец-то исправляешь ошибку, с которой боролся несколько дней !!

0 голосов
/ 05 октября 2018

Я могу вызвать похожую ошибку, если я отредактирую AndroidManifest.xml, чтобы иметь имя пакета, отличное от моей исходной структуры:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.stackoverflow.garbage">

Весь мой код в пакете com.example.stackoverflow дает мнеошибка "пакет R не существует".Это потому, что эти файлы не импортируют R.java, поскольку обычно сгенерированный файл R.java находится в том же пакете, что и эти файлы.Но это не так: он находится в пакете com.example.stackoverflow.garbage.

Я могу решить эту проблему, добавив импорт.Но я также могу решить эту проблему, изменив атрибут package моего манифеста обратно на то, что я ожидаю.

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