78 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

AppCompat; что это за папка? (windows 7)

В папке могут хранится данные телеметрии (которая выполняется вроде как через планировщик). Также может иметь отношение к совместимости операционки и приложений.

AppCompat расположена здесь:

Внутри как видите есть еще папки, например в appraiser и правда что-то есть связанное с телеметрией:

Вот например здесь хранятся какие-то логи:

На одном сайте написано что в папке AppCompat хранятся данные совместимости операционки с приложениями.

Служба Windows Error Reporting

Служба Windows Error Reporting представляет собой отдельный сервис Windows, который можно легко отключить командой:

net stop WerSvc

Внутри каталога WERReportQueue содержится множество каталогов, с именами в формате:

  • Critical_6.3.9600.18384__00000000_cab_3222bf78
  • Critical_powershell.exe__cab_271e13c0
  • Critical_sqlservr.exe___cab_b3a19651
  • NonCritical_7.9.9600.18235___0bfcb07a
  • AppCrash_cmd.exe__bda769bf_37d3b403

Как вы видите, имя каталога содержит степень критичности события и имя конкретного exe файла, который завершился аварийно. Во всех каталогах обязательно имеется файл Report.wer, который содержит описание ошибок и несколько файлов с дополнительной информацией.

Скачивание png иконки

Давайте вначале скачаем иконку поиска, которая будет отображаться в menu . Как правило, для создания приложения достаточно пользоваться ресурсами, которые уже для разработчиков подготовил Google. Например, такая ситуация с иконками, которые рекомендует использовать Google. Их можно найти на этом сайте. В данном случае нам необходима иконка поиска, поэтому попробуем её найти, введя в поле поиска search :

Нашли подходящую иконку, выбрали в выпадающем списке тип Android и цвет, а теперь можем скачать .png -файлы. В первую очередь извлекаем архив для удобной работы с файлами. После извлечения архива видим, что в папке res содержится иконка промасштабированная для различных разрешений экранов, поэтому в зависимости от разрешения экрана устройство самостоятельно будет использовать наиболее подходящий ресурс для отображения.

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

Таким образом выделяем все папки внутри res ( drawable-hdpi , drawable-xhdpi и т.д.), копируем их, потом заходим в проект и вставляем их в папку res нашего приложения. После добавления иконок структура проекта выглядит так:

Т.е. мы скопировали несколько иконок для разных размеров экранов.

Если поменяем тип отображения файлов с Android на Project , то увидим, что физически создалось несколько папок, в каждой из которых лежит png для разного разрешения экрана.

BAZEL

Bazel изобрели инженеры в недрах Google для сборки своих проектов и относительно недавно перевели его в open source. Для описания билд-конфигов используется питоноподобный Skylark или Starlark, оба названия имеют место быть. Собирается с использованием своего же последнего стабильного релиза.

  • поддержка разных языков программирования. Если верить документации, то он умеет собирать проекты для iOs, Android или даже бэкенда;
  • умеет кешировать ранее собранные артефакты;
  • умеет работать с Maven-зависимостями;
  • у Bazel очень крутая, на мой взгляд, поддержка распределённых проектов. Ему можно в качестве зависимостей указывать конкретные ревизии git-репозиториев, и он будет сам их выгружать и кешировать в процессе сборки. Для поддержки масштабируемости Bazel умеет, например, распределять различные таргеты по облачным билдсерверам, что позволяет очень быстро собирать громоздкие проекты.

Минусы Bazel:

  • всю эту прелесть весьма тяжело поддерживать, потому что билд-конфиги очень подробные и описывают сборку на низком уровне;
  • помимо прочего, кажется, что Bazel сейчас активно развивается. Из-за этого некоторые примеры не собираются, а те, что собираются, могут использовать уже устаревший функционал, который помечен как deprecated;
  • документация сейчас также оставляет желать лучшего, особенно в сравнении с Gradle;
  • на маленьких проектах прогрев и анализ билд-конфигов может занимать больше времени, чем сама сборка, что не есть хорошо, на мой взгляд.

Концептуально базовый конфиг Bazel состоит из WORKSPACE, где мы описываем всякие глобальные вещи для проекта, и BUILD, который содержит непосредственно таргеты для сборки.
Опишем WORKSPACE. Так как у нас Android-проект, то первое, что мы конфигурируем, — это Android SDK. Также тут импортируется правило для выгрузки конфигов. Потом, так как проект написан на Kotlin, мы должны указать правила для него. Тут мы делаем это, ссылаясь на конкретную ревизию прямо из git-репозитория.

Теперь приступим к BUILD.

Сперва импортируем правило для сборки Kotlin и описываем то, что хотим собрать. В нашем случае это Android-приложение, поэтому используем android_binary, где задаём манифест, минимальный SDK и т.д. Наше приложение будет зависеть от исходников, поэтому упоминаем их в deps и переходим к тому, что они собой представляют и где их найти. Код также будет зависеть от ресурсов и библиотеки appcompat. Для ресурсов используем обычный таргет для сборки андроидных исходников, но задаём ему только ресурсы без java-классов. И описываем пару правил, которые импортируют сторонние библиотеки. Тут также упоминается appcompat_core, от которой зависит appcompat.

По цифрам для такого маленького проекта всё выглядит печально. Больше половины минуты на чистую сборку Hello, world! — очень много. Время инкрементальной сборки также далеко от совершенства.

Bazel используют его создатели (Google) для каких-то своих проектов, в том числе серверных, а также Dropbox и Huawei, которые собирают им мобильные приложения. И небезызвестный Dagger 2 также собирается Bazel.

Его придумали перебежчики из Google в Facebook. Для описания конфигов раньше он использовал Python, а потом мигрировал на упоминавшийся сегодня Skylark. Собирается же он, внезапно, с помощью системы Ant.

  • поддерживает разные языки программирования и умеет собирать как Andriod, так и iOS;
  • умеет кешировать ранее собранные артефакты;
  • для Buck сделали свою реализацию dex, которая работает пошустрее стандартной и висит вместе с демоном системы. Так они экономят время на инициализации dex. Инженеры действительно многое оптимизировали. Например, Buck не собирает код, который зависит от библиотеки, если при изменении внутренностей библиотеки не изменился интерфейс. Аналогично и для ресурсов: если идентификаторы не поменялись, то при изменении ресурсов код не пересобирается.
  • есть плагин, который умеет прятать Buck за гредловским конфигом. Т.е. вы получаете примерно обычный Gradle-проект, который на самом деле собирается через Buck.

Минусы Buck:

  • его так же сложно поддерживать, как Bazel. Т.е. тут так же надо описывать низкоуровневые правила, четко описывающие процесс сборки;
  • кроме прочего, Buck не умеет сам разрешать Maven-зависимости.

Итак, как выглядит конфиг сборки Hello, world! посредством Buck? Тут мы описываем один файл конфигурации, где указываем, что хотим собирать Android-проект, который будет подписан дебажным ключом. Приложение аналогичным образом будет зависеть от исходников — lib в массиве deps. Дальше идёт таргет с настройками подписи. Я использую дебажный ключ, который идёт в комплекте с Android SDK. Сразу за ним следует таргет, который соберёт нам исходники Kotlin. Аналогично Bazel, он зависит от ресурсов и библиотек совместимости.

Описываем их. Для ресурсов в Buck есть отдельный таргет, поэтому велосипеды не пригодятся. Следом идут правила для скачанных сторонних библиотек.

Собирается всё это дело очень резво. Чистая сборка занимает немногим более 7 секунд, тогда как инкрементальная — совершенно незаметные 200 миллисекунд. Я думаю, это очень хороший результат.

Так делают в Facebook. Кроме своего флагманского приложения, они собирают им Facebook Messenger. И Uber, которые сделали плагин для Gradle и Airbnb с Lyft.

Вопросы и ответы

Первый день обсуждения очертил круг вопросов. Ответы на большинство из них можно узнать, изучив предыдущие статьи о папке WinSxS, на которые я активно ссылался. Но материал требует внимания и определенного уровня технической подготовки. Поэтому я постараюсь максимально просто разобрать их здесь.

Не удается скачать обновление KB2852386. Что делать?

Качать с помощью Windows Update, как я сразу советую в статье. Обновление будет в списке рекомендуемых.

Если вы пытаетесь скачать в браузере и получаете ошибку «Эта версия средства проверки Windows Geniune Advantage более не поддерживается…», убедитесь что:

  1. Для закачки используется Internet Explorer
  2. В Internet Explorer разрешена установка дополнений / элементов ActiveX

При соблюдении этих двух условий средство проверки подлинности не скачивается на ПК, а устанавливается в качестве надстройки браузера и выполняет валидацию.

Это — все официальные способы получения обновления, и другие здесь рассматриваться и обсуждаться не будут.

Удалится ли папка WinSxS после очистки?

Нет, но число подпапок и файлов в ней уменьшится, а следовательно и ее объем.

Что конкретно удаляется?

Неиспользуемые файлы обновлений. Эти файлы не участвуют в работе системы, потому что вместо них уже используются файлы из более свежих обновлений.

Сколько места освободится? Почему у других удалилось 6GB, а у меня ничего.

Объем удаленных файлов зависит от сочетания трех факторов:

  1. Дата установки SP 1 или Windows 7 с SP1, от которого в любом случае ведется учет установленных обновлений. Чем дольше установлена система, тем больше количество и объем предыдущих версий файлов в WinSxS.
  2. Частота обновления компонента. Например, волны ошибки 0xc0000005 связаны с тем, что файлы ядра обновлялись три месяца подряд. При этом после каждого обновления в WinSxS сохранялась предыдущие версии файлов.
  3. Регулярность установки обновлений. Продолжая пример, если автоматическое обновление только что включили после трехмесячного перерыва, в winsxs осядет только один набор файлов, а не три.

Я попробую объяснить на пальцах, максимально упростив технические подробности и сделав некоторые допущения. Представьте, что Microsoft выпускает раз в два месяца обновление файла asdf.dll. Рассмотрим трех пользователей:

  • Михаил установил Windows 7 с SP1 (сразу после его выхода) в феврале 2011 года и включил автоматическую установку обновлений. К октябрю 2013 года вышло 15 обновлений, заменяющих файл asdf.dll. Очистка диска удалила 14 ненужных файлов и оставила один из предыдущего обновления, сохраняя возможность отката.
  • Андрей установил в один день с Михаилом, но сразу отключил автоматическую установку обновлений. Он их ставил вручную, руководствуясь гороскопом, и к октябрю 2013 года сделал это лишь 4 раза. Очистка диска удалила 3 ненужных предыдущих версии файла.
  • Алексей регулярно переустанавливает систему, и последний раз он это сделал в августе 2013 года. К октябрю того же года успело выйти только одно обновление для файла asdf.dll. Очистка диска не удалила ничего, потому что нет предыдущего обновления, к которому можно откатиться.

Все трое в один день выполнили оптимизацию папки WinSxS. Очевидно, у Михаила она была самой большой, а очистка позволила высвободить самый значительный объем дискового пространства.

Как определить, сжимаются ли файлы в папке WinSxS в процессе оптимизации

Судя по вопросам и некоторым скриншотам утилиты TreeSize, примеров анализа оказалось недостаточно. Все очень просто: в меню Scan – Select Directory и выберите C:WindowsWinSxS.

Папки со сжатыми файлами помечены синим. Пока что я не видел ни одного факта сжатия в Windows 7.

Почему не работает команда DISM /Online /Cleanup-Image /StartComponentCleanup?

Потому что она для Windows 8 и новее. В Windows 7 используйте очистку диска, следуя инструкциям этой статьи.

а) Навигационные жесты

В Android Q Google попытался объединить все жесты навигации с помощью новой навигационной системы жестов, которая заменила плавающую навигационную панель (назад, домой и последние приложения).

  • На что влияет: если ваше приложение содержит жесты, то они могут конфликтовать с системными жестами. Это повлияет на все приложения, работающие на Android Q (независимо от целевого SDK), поскольку первыми будут обрабатываться системные жесты.
  • Рекомендуемый подход: Поскольку плавающая панель навигации фактически исчезла, рекомендуется в полной мере использовать доступное новое экранное пространство и обеспечить пользователям эффект погружения.

Чтобы создать эффект погружения, приложения должны отображаться за строкой состояния и панелью навигации. Сначала сделаем строку состояния и панель навигации прозрачными.

Далее делаем так, чтобы Activity/View отображалось на весь экран:

FAB (Floating Action Button, плавающая кнопка действия) перекрывается плавающей панелью навигации. Плавающая панель навигации включена для наглядности.

Теперь, когда приложение отображается в полноэкранном режиме за (прозрачными) системными компонентами, возможно, что какой-то интерактивный компонент приложения перекрывается системным UI. Чтобы решить эту проблему, используйте Insets.

Insets — это набор значений, которые скажут нам, на сколько нужно переместить View, чтобы они не конфликтовали с системным UI. Эта информация предоставляется классом WindowInset. Начиная с API 20, Android предоставляет разработчикам System Window Insets (Insets системных окон), которые сообщают, сколько места занимают компоненты системы (такие как плавающая панель навигации и строка состояния). Эта информация может использоваться для перемещения интерактивных View, чтобы пользователь тапал по нему, а не по системному UI.

Для FAB задайте слушатель WindowsInsets и примените нижний inset окна в качестве нижнего отступа.

Точно так же, начиная с Android Q, система предоставляет insets навигационных жестов, чтобы перемещать свайпаемые views так, чтобы они не конфликтовали с жестами системы. Они предоставляются через Insets.getSystemGestureInsets()


Области системных жестов выделены желтым цветом.

Но что, если мы не хотим перемещать View и хотим разместить некоторый контент в тех зонах жестов, которые могут конфликтовать с приложением? В этих сценариях приложение может определять области, в которых приложение будет сначала обрабатывать событие касания, а не системные жесты. Это можно сделать, передав List Rect > в API View.setSystemGestureExclusionRects(), представленный в Android Q. Этот метод также доступен в ViewCompat с androidx.core:core:1.1.0 .

  • Подводные камни: вы можете отказаться от обработки только жестов “назад”. Границы жеста “домой” зарезервированы и не могут быть переопределены. Это сделано потому, что есть только один способ выйти из приложения. Если ваше приложение конфликтует с жестом “домой”, используйте WindowInsets.getMandatorySystemGestureInsets() , чтобы получить его границы и сместить ваши View.

б) Темная тема

В течение последнего года мы видели, что многие приложения начали поддерживать темные темы. Android Q добавляет этот переключатель в настройки системы.

Пользователь может включить темную тему тремя способами:

  1. Новый пункт в настройках системы (Настройки -> Дисплей -> Тема)
  2. Новый пункт в Быстрых Настройках
  3. В зависимости от производителя, можно включить через режим энергосбережения.

Чтобы поддерживать общесистемную конфигурацию Dark Theme, тема вашего приложения по умолчанию должна наследоваться от темы DayNight. Это связывает основную тему приложения с флагами ночного режима, управляемыми системой. Это работает путем извлечения ресурсов из папок квалификатора night .

Если вы заглянете внутрь стилей App Compat, вы заметите, что тема DayNight указывает на AppCompat Light в конфигурации по умолчанию и на AppCompat в ночной конфигурации.

Если вы хотите предоставить пользователям возможность управления темой из приложения, вы можете вызвать AppCompatDelegate.setDefaultNightMode(), который принимает один из четырех режимов:

  1. MODE_NIGHT_YES — Показать темную тему
  2. MODE_NIGHT_NO — Показать светлую тему
  3. MODE_NIGHT_FOLLOW_SYSTEM — Следовать настройкам системы
  4. MODE_NIGHT_AUTO_BATTERY — Включать темную тему, когда устройство переходит в режим энергосбережения.
  • Подводные камни:

а) Не хардкодьте цвета. Если в layout-файлах есть захардкоженные цвета, это тревожный звоночек. Замените их ссылками на color . Еще лучше: используйте атрибуты для ссылки на цвета.

b) Проверьте изображения и предоставить им альтернативные ресурсы в рамках классификатора night .

c) В векторных рисунках не должно быть захардкоженных цветов. Используйте tint для стилизации векторных ресурсов с правильным цветом.

d) Убедитесь, что все color ресурсы имеют соответствующие альтернативы в папке night ( values-night/colors.xml )

e) Если приложение использует RemoteViews для уведомлений или виджетов, не забудьте также протестировать их. Хорошо, если приложение использует стили уведомлений по умолчанию, так как тогда система будет их обрабатывать.

f) Изменение конфигурации для uiMode вызывается всякий раз, когда устройство переключается между обычным и темным режимом. Пользователь может сделать это вручную или активировать энергосберегающий режим. Если приложение не обрабатывает изменения конфигурации должным образом, UI теряет контекст, когда устройство переключается между обычным и темным режимами, поскольку видимые Activity и их фрагменты уничтожаются и создаются заново. Поэтому, даже если UI заблокирован в одной ориентации, добавьте поддержку изменения конфигурации. Кроме того, если приложение вручную управляет изменениями конфигурации через android:configChanges , есть большая вероятность, что вы захотите также вручную управлять uiMode . Например, если приложение использует непрерывное воспроизведение (видеопроигрыватель), оно может не захотеть прерывать воспроизведение только потому, что устройство переключилось между обычным и темным режимом.

В Android Q также было представлено множество других вещей, которые я не рассматривал в деталях, такие как Панель настроек, новый API AudioPlaybackCapture (API дает приложениям возможность копировать звук, воспроизводимый другими приложениями. Эта функция является аналогом захвата экрана, но для аудио).

Наконец, Android Q включает в себя обновленный список ограниченных интерфейсов, не относящихся к SDK, доступ к которым в конечном итоге может быть закрыт из Android SDK. Вы можете найти список своих нарушений в play console в разделе «Отчет о тестировании» (Pre Launch Report).

На этом все. Если вы чувствуете, что есть что-то важное, о чем не сказано в статье, дайте знать в комментариях ниже. 😉

При использовании v7-appcompat в Eclipse вы должны использовать его в качестве проекта библиотеки. Недостаточно просто скопировать * .jar в папку /libs . Прочитайте это (щелкните) пошаговое руководство по сайту developer.android.com , чтобы узнать, как правильно импортировать проект.

Как только проект будет импортирован, вы поймете, что некоторые папки в папке /res подчеркнуты красным цветом из-за таких ошибок, как:

Решение

Единственное, что вам нужно сделать, это открыть файл project.properties android-support-v7-appcompat и изменить цель с target=android-19 на target=android-21 .
После этого просто выполните Project –> Clean. чтобы изменения вступили в силу.

AppCompat — попытка удалить

Учитывая, что информации о папке нет никакой, именно абсолютно, тогда я принимаю решение — провести эксперимент и отключить папку принудительно. Посмотрим что из этого выйдет!

Итак, что я сделаю:

  1. У меня установлена бесплатная утилита Unlocker, она нужна чтобы удалить или переименовать заблокированные папки. Например системные, которой и является AppCompat.
  2. Мне нужно переименовать, но так, чтобы осталось оригинальное название. В таких случаях я просто добавляю символ нижнего пробела.
  3. Далее делаем перезагрузку.
  4. Проверяем работу ПК — все ли программы работают стабильно, а также нет ли ошибок.

Я перешел в папку:

Нажал правой кнопкой по AppCompat, выбрал пункт Unlocker:

Появилось маленькое окошко, там в менюшке слева нужно выбрать пункт Переименовать:

Потом указать новое имя — добавляю просто символ нижнего пробела (по факту и так получается новое название):

Нажимаю ОК. Потом снова ОК. Как и следовало ожидать — переименовать нельзя, потому что папка какой-то прогой используется, поэтому переименование будет после перезагрузки:

Ну а теперь как раз пора сделать перезагрузку))

Итак, после перезагрузки я вижу что и правда все переименовалось:

Дальше я запустил Хром, Мозиллу.. Оперу, Яндекс Браузер — все работает, поиск Windows тоже работает. В принципе никаких ошибок нет, поэтому можно сделать вывод, что переименовывать — вроде можно. А значит можно и удалить, но советую не делать этого сразу, мало ли))

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

  1. Зажмите Win + R, напишите команду control или control panel, нажмите ОК.
  2. Появится окно со значками. Проверьте что в правом верхнем углу в меню Просмотр установлено Крупные значки.
  3. Теперь найдите значок Система, запустите > выберите Защита системы.
  4. Выберите системный диск (Система) и нажмите кнопку Создать. Если кнопка неактивна — нажмите сначала Настроить и включите защиту системы.
  5. Точку восстановления советую назвать До переименования AppCompat (или до удаления). После создания точки — можно переименовывать папку или даже удалить)) Разумеется все эти дела нужно делать утилитой Unlocker.

Важное замечание: я не пользуюсь точками восстановления, но пробовал, лично у меня они почему-то со временем удаляются. Самостоятельно. Причины неизвестны. Возможно сейчас уже разработчики исправили. Но удаляются не сразу, а где-то через пару дней.

Отключение Window Error Reporting в Windows Server 2012 R2 / 2008 R2

Отключить запись информации об ошибках Windows Error Reporting в серверных редакция Windows можно следующим образом:

  • Windows Server 2012 / R2 – Панель Управления -> System and Security -> Action Center -> раздел Maintenance -> Settings -> выберите опцию I don’t want to participate, and don’t ask me again
  • Windows Server 2008 R2 – откройте консоль Server Manager и промотайте список, перейдя в раздел Resources and Support. Нажмите на Turn Off Windows Error Reporting и выберите пункт I don’t want to participate, and don’t ask me again.

Ещё немного настроек

Если вы хотите использовать пользовательские цвета для тёмной/светлой темы (например, тёмно-синий для тёмной и светло-синий для светлой), то создайте папку values-night и переопределите файл цветов. Также можно переопределить styles.xml и использовать пользовательские атрибуты. Таким образом, приложение всегда будет использовать цвета из values-night , когда включена тёмная тема, и наоборот. Вы также можете подготовить альтернативные ресурсы для тёмной темы. Например, в drawable-night .

Весь исходный код ищите здесь.

голоса
Рейтинг статьи
Читать еще:  Что делать если интернет стал медленно работать
Ссылка на основную публикацию
Статьи c упоминанием слов: