You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Полный текст: [политика конфиденциальности](PRIVACY.md). Инструкции по сообщениям об уязвимостях: [SECURITY.md](SECURITY.md).
45
48
46
49
## Источники курсов
@@ -52,15 +55,15 @@
52
55
53
56
## Сборка
54
57
55
-
Нужны JDK 17 и Android SDK 35.
58
+
Нужны JDK 17 и Android SDK 36.
56
59
57
60
```shell
58
-
./gradlew test lint assembleDebug
61
+
./gradlew test lint assembleDebug assembleRelease
59
62
```
60
63
61
64
Отладочный APK появится в `app/build/outputs/apk/debug/app-debug.apk`.
62
65
63
-
Релизные APK подписываются владельцем проекта локально. Ключ подписи и его пароль нельзя добавлять в Git, задачи CI или публичные архивы.
66
+
Релизные APK подписываются владельцем проекта локально. Ключ подписи и его пароль нельзя добавлять в Git, задачи CI или публичные архивы. Полная проверяемая процедура описана в [инструкции по выпуску](RELEASING.md).
Технический выпуск, который делает обновление курсов и публикацию APK проверяемыми.
4
+
5
+
## Что изменилось
6
+
7
+
- приложение отличает свежую дату курса от времени последней проверки и предупреждает об устаревших данных;
8
+
- ответы сервисов ограничены по размеру, перенаправления остаются только на HTTPS, XML Банка России защищён от внешних сущностей;
9
+
- график сохраняет календарное расстояние между датами и сообщает о пропущенных точках;
10
+
- выбор дат графика доступен через действия TalkBack;
11
+
- кэш истории ограничен 24 наборами, а одна загрузка — 60 секундами; при тайм-ауте доступен ранее сохранённый график;
12
+
- резервные источники используются и тогда, когда основной адрес ответил некорректными или устаревшими данными;
13
+
- предупреждение учитывает только источники, которые действительно используются выбранными валютами ЦБ или ручными курсами;
14
+
- последний открытый экран, валютная пара, период и сумма графика восстанавливаются после перезапуска;
15
+
- смена источника во время загрузки безопасно запускает необходимое повторное обновление;
16
+
- целевая версия Android обновлена до API 36;
17
+
- CI собирает debug и release, запускает инструментальные тесты на Android 15, раздельно сохраняет APK и таблицу деобфускации, а для тега создаёт аттестацию происхождения неподписанного APK.
18
+
19
+
Данные, настройки и последний экран сохраняются. Обновление устанавливается поверх 1.8.0 без удаления пользовательских данных.
Эта процедура связывает исходный коммит, проверку CI, неподписанную сборку, локальную подпись и опубликованный APK. Секретный ключ остаётся только у владельца.
4
+
5
+
## Один раз для репозитория
6
+
7
+
1. Включить **Settings → General → Releases → Release immutability**. Правило действует только на будущие выпуски.
shasum -a 256 CleanRate-1.8.1.apk > CleanRate-1.8.1-SHA256SUMS.txt
57
+
```
58
+
59
+
## Публикация
60
+
61
+
1. Создать черновик GitHub Release на уже проверенном теге `v1.8.1`.
62
+
2. Приложить `CleanRate-1.8.1.apk`, файл контрольной суммы и текст `RELEASE_NOTES_1.8.1.md`.
63
+
3. Ещё раз скачать файлы из черновика, сверить SHA-256, имя пакета, `versionCode`, `versionName` и сертификат.
64
+
4. Опубликовать выпуск. После публикации не заменять файлы; исправления выпускать новой версией.
65
+
66
+
Подписанный APK закономерно отличается по SHA-256 от неподписанного артефакта CI: блок подписи добавляется после сборки. Проверка сертификата подтверждает владельца, аттестация — происхождение исходной неподписанной сборки, а неизменяемый Release защищает опубликованные файлы от последующей замены.
Copy file name to clipboardExpand all lines: SECURITY.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,8 +8,8 @@
8
8
9
9
Не публикуйте ключи, пароли, персональные данные или подробности реально эксплуатируемой уязвимости в открытом Issue.
10
10
11
-
После публикации репозитория используйте **Security → Advisories → New draft security advisory**. Если функция недоступна, создайте краткий Issue без технических подробностей и попросите владельца проекта открыть приватный канал.
11
+
Используйте **Security → Advisories → Report a vulnerability**. Эта форма передаёт отчёт владельцу приватно. Не создавайте публичный Issue с техническими подробностями уязвимости.
12
12
13
13
## Проверка APK
14
14
15
-
Скачивайте APK только из раздела Releases этого репозитория и сверяйте SHA-256 с файлом `SHA256SUMS.txt`, приложенным к тому же выпуску.
15
+
Скачивайте APK только из раздела Releases этого репозитория и сверяйте SHA-256 с файлом `SHA256SUMS.txt`, приложенным к тому же выпуску. Дополнительно проверьте сертификат командой `apksigner verify --print-certs CleanRate-VERSION.apk`: SHA-256 должен совпасть с отпечатком из README.
0 commit comments