Android Studio stale APK для варианта сборки после изменения xml

Это очень странно. Сегодня AS (1.4) прекратил правильно воссоздать debug apk в моем проекте:

  • Любые изменения XML не отражаются в коде при запуске проекта
  • Изменения в коде Java распространяются, даже если изменения XML не
  • Очистка, а затем запуск ударов, кажется, исправить, обновленный APK успешно создается каждый раз.
  • В моем проекте есть два варианта сборки, эта проблема затрагивает только один из них .
  • Я использую Genymotion, но проблема существует и на обычном эмуляторе и аппаратном обеспечении.
  • Я подозреваю, что в xml-файлах есть какая-то блокировка. Например, если я переименую файл и прогоняю, изменения распространяются. Но при проверке записи R.java отображаются как старое имя файла, так и новое – старое просто не очищается / обновляется.
  • Xml-макет, который я тестировал, теперь был отброшен на пустой относительный макет с цветом фона. Цвет не обновляется, когда это должно быть.

Я не очень разбираюсь в процессе сборки, поэтому все, что я пробовал, – это удаление папки сборки, повторного импорта проекта и старого кеша перезагрузки / недействительности на Android Studio. Любые предложения относительно того, что может вызвать это странное поведение или как его исправить?

Изменить: очень сложно настроить поведение позади этого – иногда я заметил, что он последовательно влияет только на определенные файлы xml. Похоже, у этого парня такая же проблема: проблема сборки проекта Android Studio

Я потратил пару часов на переустановку Android Studio с нуля, и проблема остается.

Solutions Collecting From Web of "Android Studio stale APK для варианта сборки после изменения xml"

Даниэль, я тоже сам это заметил. Похоже, что некоторые изменения просто не будут распространяться, если ADB не обнаружит, что приложение в настоящее время не установлено на целевом устройстве.

Отказ от ответственности: это обходное решение, а не объяснение поведения, но оно работает для меня. Чтобы устранить эту проблему, я настроил свои Run Configurations для удаления пакета, о котором идет речь, перед установкой снова. Помните, что удаление APK, очевидно, повлияет на такие вещи, как базы данных, постоянные данные из настроек и т. Д., Поэтому не используйте это, если вы используете процесс разработки.

Шаги: ( отсюда )

  1. В Android Studio щелкните раскрывающийся список слева от кнопки «Выполнить» и выберите «Изменить конфигурации» …
  2. Нажмите приложение в приложении Android, а на вкладке «Общие» найдите заголовок «Перед запуском»,
  3. Нажмите кнопку +, выберите «Выполнить внешний инструмент», нажмите кнопку «+» во всплывающем окне.
  4. Укажите имя (например, adb uninstall) и описание и введите adb в программе: и uninstall <your-package-name> в параметрах :. Убедитесь, что новый элемент выбран, когда вы нажмете «ОК» во всплывающем окне.

Примечание. Если у вас нет переменной adb в переменной среды PATH, укажите полный путь к adb в поле Program: (например, / home / user / android / sdk / platform-tools / adb).

Опять же, извините, это не объяснение самой проблемы, но это определенно устраняет проблему для меня.

Дайте мне знать, как это работает для вас.

Я действительно понял проблему здесь некоторое время назад, и это было довольно тонко. Мой проект имеет варианты сборки с основным источником, а также набор источников для каждого варианта. Он был несколько определен следующим образом:

 sourceSets { def defaultDirectory = "src/main/" def flavorADirectory = "src/flavor_a/" flavor_a { java.srcDirs = [defaultDirectory + 'java', flavorADirectory + 'java'] res.srcDirs = [defaultDirectory + 'res', flavorADirectory + 'res'] manifest.srcFile flavorADirectory + 'AndroidManifest.xml' } def flavorBDirectory = "src/flavor_b/" flavor_b{ java.srcDirs = [defaultDirectory + 'java', flavorBDirectory + 'java'] res.srcDirs = [defaultDirectory + 'gift', flavorBDirectory + 'res'] manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' } } 

Таким образом, варианты скомпилированы отлично, но каждое изменение xml запускает полную перестройку. Я не уверен в точной sourceset , но я считаю, что основной sourceset должен быть указан как отдельный объект. Android Studio должна увидеть main ключевое слово и лучше знать, что с ним делать. Это означает, что нет необходимости указывать каталог по умолчанию как часть исходных наборов вариантов сборки. Удаляя это так, проблема исчезает и больше не происходит постоянных перестроек:

  sourceSets { def defaultDirectory = "src/main/" main { java.srcDirs = [defaultDirectory + 'java'] res.srcDirs = [defaultDirectory + 'res'] } def flavorADirectory = "src/flavor_a/" flavor_a { java.srcDirs = [flavorADirectory + 'java'] res.srcDirs = [flavorADirectory + 'res'] manifest.srcFile flavorADirectory + 'AndroidManifest.xml' } def flavorBDirectory = "src/flavor_b/" flavor_b{ java.srcDirs = [flavorBDirectory + 'java'] res.srcDirs = [flavorBDirectory + 'res'] manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' } }