- Rating bar android studio github
- Rating bar android studio github
- About
- Resources
- License
- Releases
- Packages 0
- Languages
- Rating bar android studio github
- Rating bar android studio github
- Прокачиваем Android проект с GitHub Actions. Часть 1
- Общие слова про Github Actions
- Hello, world!
- Запуск unit-тестов на каждый pull request в main
- Шаг 1. Собираем APK и AAB. Пока не подписываем
- Шаг 2. Подписываем APK
- Редактируем build.gradle
- Пробуем запустить на CI
- Запускаем локально.
- Выводим на README.MD статус выполнения workflow
Rating bar android studio github
RatingReviews (Rating and Reviews) is a widget and layout that adds a «Rating & Reviews» bar to your app, similar to the ones seen on Google Play Store and Apple App Store. It provides a beautiful visual summary of the number of raters along with the ratings they gave on a specific item. Of course, it is also highly customizable to fit your app themes! ⭐ 🌟 ✨
| |
|
|
| |:—:|:—:|:—:|:—:| | playstore (style1) | appstore (style2) | playstore (new rounded) | customized (style2) |
gradient (rounded) | gradient | playstore (old) |
All of these samples can be found in app
- Take an existing style and customise it to be your desired style.
- Add gradient colors to the bar and add an array of pairs to the colors parameter in your code. See the sample for more details.
Make sure your project is migrated to AndroidX.
In your root build.gradle at the end of repositories:
In your app build.gradle:
Using RatingReviews is simple. Here is an example:
The table below shows the parameters and the attributes for furthur customization:
Attribute | Description | Options (examples) |
---|---|---|
animation | of the bars from left to right | true, false |
show_label | of the bars for example: 1, 2, 3, 4, 5 | STYPE1, STYPE2, STYPE3, STYPE4 |
max_value | max value for the ratings | 100 etc |
text_color | color of the texts for example the labels | color int |
text_size | text size of labels | 10sp, 12sp etc |
width | bar width | 8dp, 15dp etc |
spaces | space between bars | 1sp, 2dp etc |
rounded | round corners of bars | true, false |
Want to contribute? Fantastic!
If you want to contribute to the project and make it better (whether it’s a bug fix, feature, improvement, suggestion, documentation or any sort of help), your help is very welcomed! ❤
There was no visual 5 star rating system when I needed it for a project. Special thanks to the chart libraries where I took some inspiration from.
Источник
Rating bar android studio github
Simple and fully customizable rating bar library with animations.
Attributes | Usage |
---|---|
app:num_stars | Number of stars |
app:rating | Default rating |
app:fill_colour_active | Star fill colour when it is selected or active |
app:fill_colour_inactive | Star fill colour when it is deselected or inactive |
app:stroke_colour_active | Star Strike colour when it is selected or active |
app:stroke_colour_inactive | Star Strike colour when it is deselected or inactive |
app:stroke_size | Stroke size |
app:animation | Star click animation |
Using Java code
Functions | Usage |
---|---|
int getRating() | Get the current rating |
void setRating(int rating) | Set the rating |
About
Simple and fully customizable rating bar library with animations.
Resources
License
Releases
Packages 0
Languages
You can’t perform that action at this time.
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.
Источник
Rating bar android studio github
Material Design RatingBar with better appearance, compatible with Android 3.0+.
- Consistent appearance on Android 3.0+.
- Extends framework RatingBar .
- Get the 2dp star border background as in Material Icons and Google apps.
- Correct custom tinting across platforms.
- Able to render correctly when layout_width is set to match_parent , as in Google Play Store.
- Able to scale correctly when layout_height is set to values other than 16dp, 36dp and 48dp.
- Able to display ratings such as 4.3 correctly, which will be filled to 4.5 by framework’s incorrect implementation.
- Avoid framework’s sunken half star visual glitch.
- Used as a drop-in replacement for framework RatingBar .
Simply replace your RatingBar with MaterialRatingBar , and remember to apply a corresponding style for correct behavior.
For example, to create a normal MaterialRatingBar :
In order to make your RatingBar take the correct and consistent size on all versions, you will always need to use one of the styles from this library. The trick inside it is android:minHeight and android:maxHeight that controls the drawable height.
You can checkout more small or indicator variants in styles.xml.
You can use app:mrb_fillBackgroundStars to control whether background stars are filled, otherwise it defaults to the same value as android:isIndicator which is the behavior of Google apps.
8 tint-related attributes such as app:mrb_progressTint and app:mrb_progressTintMode are also supported so that they can control the tinting of rating drawables. The default tint color is ?colorControlActivated , and the default tint mode is src_in .
An OnRatingChangeListener interface is also added to MaterialRatingBar , which enables callback while user is dragging, just as the listener in SeekBar .
For a detailed example, you can refer to the sample app’s layout, where you can find examples such as tinting and wide layout.
Filled star or star border
The framework’s RatingBar uses filling stars with grey color as track, however as per the Material Icons site, star border icons are given.
And as for the Google Play Store and Google I/O app, they are both using the star borders as track.
With Google’s design practice and aesthetic considerations taken into account, I decided to use the star border style.
Google Play Store has stars of optical size 24dp, while Google I/O app and framework Widget.Material.RatingBar.Indicator have stars of size 36dp (which are of optical size 30dp). (The framework’s default size of 64dp is ridiculously large and thus not taken into consideration.)
Also noticing that the Material Icons site gives icons of 24dp (optical 20dp) and 36dp (optical 30dp), I decided to stick to the 36dp approach which is also visually pleasant.
Star border width
The ring for radio button in Material Design has a width of 2dp, and with experiments on other border widths, I decided to adopt the 2dp border width.
The star border icon is drawn with the help of Inkscape, by downloading the star icon SVG from Material Icons, duplicating the outer border path of the star, setting a stroke of 4dp, running stroke to path on it, extracting the inner border path, and finally combining this path and the original outer border path.
Framework RatingBar gives erroneous rendering for RatingBar when layout_width is set to match_parent by tiling the stars without any gap. Since Google Play Store employed the wide design, I implemented it inside this library as well, so that match_parent will work properly for MaterialRatingBar .
Google Play Store and Google I/O app both used an implementation other than RatingBar , which means dragging on the bar across stars won’t work (it is the functionality of AbsSeekBar ). I think this is a handy way of interaction for users, and it enables the setting of 0 star which can be useful if you want to enable users to reset their rating to unrated.
Источник
Rating bar android studio github
List of Android Chart Libraries
Name | Types |
---|---|
Rings | Circular |
ArcChart | Arc |
AnimatedPieView | Pie |
ChartProgressBar | Bar |
AndroidDevCoder | Line |
Spark | Line |
HelloCharts | Line, Column, Pie, Bubble, Preview, Combo |
AndroidPlot | Line, Scatter, Bar, Pie, Step, CandleStick, Bubble |
CharView | Line |
JZAndroidChart | Line, CandleStick |
AnyChart | Line, Pie, Column, Veen, Radar, Tag, Heat map, Waterfall, Tree map, Scatter, Vertical, Range, Funnel, Pert, Polar, Pyramid, Bubble, Area, Bar, Box, Mosaic, Mekko, Circular, 3D, Pareto, Combo, Quadrant, Hilo, OHLC, Bubble, Maps, Scale, Speed, Thermometer |
AndroidLineChart | Line |
SlimChart | Circular |
SensorDataLogger | Sensor |
GraphView | Line, Bar, Point |
SectorProgressView | Progress |
BarChart | Bar |
ikvStockChart | CandleStick, Stock |
GoogleMaps3DPie | Map |
PolygonsView | Polygon |
SpiderWebScoreView | Polygon |
MPAndroidChart | ? |
TrendChart | Trend |
Charter | Line, Bar |
WilliamChart | Line, Bar, StackBar |
XCL-Charts | Bar, Pie, Stacked Bar, Area, Line, Spline, Dount, Rose, Dial, Gauge, Radar, Circle, Scatter, Bubble, RangeBar, Wind Rose, Quadrant, Funnel |
LChart | Line |
TimeLineChart | Data over time |
SmoothLine | Line |
BarChart | Bar |
RadarChartView | Polygon |
ScatterPieChart | Pie |
Jgraph | Line, Bar |
AbilityChart | Polygon |
PlanPie | Pie |
SimpleWaveForm | Bar, Sound |
DecoView-charting | Circular |
AndroidCharts | Gird, line, stick, candlestick, macd, pie, spider web, area, separated stick, pizza, round radar, rose |
Achartengine | Line, area, scatter, time, bar, pie, bubble, doughnut, range (high-low) bar, cubic line |
WeatherChartView | Weather |
HzGrapher | Radar, Line, Circle, Pie, Bubble, Scatter |
Snake | Line |
FitChart | Circular |
EazeGraph | Bar, Stacked, Pie, Line |
AndroidStock | Stock |
DesCharts | Line, Stacked, Bar |
Bezier Curve | Line |
MagnificentChart | Round |
Polonium | Line |
Afreechart | Line |
If this list helps you, favorite and send us your feedback 👍
Источник
Прокачиваем Android проект с GitHub Actions. Часть 1
Это пост для тех, кто заинтересовался возможностями GitHub Actions, но никогда не имел опыта реальной настройки build-систем. Примеры будут полезны как для прокачки собственного pet-проекта, так и для понимания, как настраивается CI/CD, если по работе нет связанных с этим задач.
Что будет рассмотрено:
Основные понятия для построения CI/CD на GitHub Actions.
Настроим работающий workflow который запускает Unit-тесты при создании pull request.
Добавим бейджики со статусом созданных workflow в репозиторий.
Настроим работающий workflow для сборки релизных артефактов APK и AAB.
Научимся безопасно подписывать ключом релизный APK.
GitHub Actions был выбран для примеров, потому что позволяет не углубляясь в инфраструктурные сложности с развёртыванием своего собственного CI-сервера буквально за день собрать работающий пайплайн для прогона тестов, подписи приложения и даже загрузки в Google Play. Кроме того, у GitHub Actions полная интеграция с GitHub, очень легко взаимодействовать с репозиторием. Для открытых репозиториев услуга бесплатная, для закрытых предусмотрены разные тарифные планы.
Но главное преимущество GitHub Actions состоит в возможности переиспользовать готовые блоки бизнес-логики (actions), причём не только свои собственные. На большинство самых распространённых задач уже скорее всего есть свой Action, который вы можете включить в свой пайплайн! Какие экшены уже написаны участниками сообщества, можно посмотреть на https://github.com/marketplace?type=actions
Примеры будут настраиваться на самом простом проекте с одной пустой Activity из шаблонов Android Studio и на новом пустом репозитории в GitHub.
Общие слова про Github Actions
Если кто-то представляет себе, как собирают автомобили на заводах, это неплохая иллюстрация к тому, чем вообще занимается CI/CD.
Пайплайн можно представить себе как конвейер на заводе, по которому непрерывно продвигается по стадиям подготовки релиза код.
На вход конвейера попадает коммит в репозиторий или пулл-реквест. Потом код попадает на участок сборки приложения, далее запускаются unit и UI-тесты. Если тесты прошли успешно, можно смело двигаться дальше по конвейеру, например, выложить в раздел релизов артефакт для истории версий.
Основные понятия
Вот так по блокам можно представить, как структурирован workflow в Github Actions.
Runner
Это развёрнутый в облаке от GitHub или self-hosted сервер с настроенным окружением и который может запускать workflow внутри себя.
Workflow
Это независимый процесс, автоматически запускаемый на GitHub Actions в отдельном контейнере по получению Event. Каждый workflow описывается отдельным YAML-файлом.
Состоит из более мелких структурных единиц исполнения — Jobs.
Job
Составная часть workflow, в свою очередь состоит из отдельных шагов Steps. Jobs могут быть настроены на параллельное и последовательное выполнение.
Step
Еще более мелкая единица исполнения скрипта, состоит из набора команд или действий.
Actions
Самая маленькая структурная единица исполнения скрипта workflow. Action может делать в принципе всё что угодно, например, проставлять теги с версией приложения в Git или отправлять собранный AAB в Google Play.
Можно писать как собственный Action, так и пользоваться готовыми. Action по сути выступает наравне с другими командами внутри Step.
Самые распространённые Action — это checkout на коммит и установка Java-окружения. По умолчанию, если специально не встать на нужный коммит, Job ничего не знает о проекте, из которого он запущен.
Пример ниже подготавливает окружение, а Uses указывает скрипту, что необходимо дождаться их окончания, прежде чем выполняться дальше.
Event
Внутренние или внешние события, которые запускают workflow. Commit, pull request, comment, tag — все эти события могут быть использованы в ваших скриптах как триггер для старта каких-то действий. Еще workflow может быть настроен на ручной запуск (https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/) и запуск по cron расписанию (https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#scheduled-events)
Hello, world!
Всё, что связано в GitHub Actions, располагается на вкладке Actions в репозитории.
При создании нового workflow GitHub пытается проанализировать содержимое репозитория и предлагает шаблон на выбор. На самые популярные сценарии сборки и деплоя можно найти заготовки.
Все workflow конфигурируются через файлы в формате YAML, это фактически стандарт для CI/CD-систем.
Чтобы GitHub Actions начала выполнять таски, необходимо положить их в определённым образом названную директорию в корне проекта github/workflows.
Добавлять и редактировать конфиги можно как в Android Studio, так и в самом GitHub на вкладке Actions. Так и поступим.
Сами конфиги в YAML можно называть как угодно, но лучше давать осмысленные имена для того, чтобы позднее самому понимать, что именно тут настроено.
GitHub сразу же подставляет самый простой скрипт, который делает checkout на новый коммит, выводит в консоль несколько строк и заканчивает работу. Что-то ещё проще придумать сложно, но даже в этом примере есть что посмотреть.
Сделать коммит с новым скриптом можно прямо из веб-интерфейса GitHub.
Но когда этот workflow будет отрабатывать? Ведь мы раньше упоминали, что в GitHub Actions все workflow запускаются не сами по себе, а только при получении того event’а, который прописан в самом yml-скрипте.
Тут видно, что наш тестовый скрипт будет выполняться для любых коммитов и пулл-реквестов в ветку main.
Стойте, так мы ведь только что сделали коммит с новым hello_world.yml, получается, он уже должен был сработать? Совершенно верно, можно прямо сейчас зайти в раздел actions и посмотреть результат работы скрипта.
Уже неплохо! Обычно после первого знакомства с новой технологией сразу хочется усложнить свой hello world и заставить его делать хоть что-то полезное, кроме вывода текста в консоль.
Запуск unit-тестов на каждый pull request в main
Первый YAML-скрипт мы создавали в веб-интерфейсе GitHub, теперь сделаем то же самое в Android Studio.
Чтобы увидеть директорию с YAML-файлами, нужно переключить режим просмотра на “Project” (если вдруг у вас был выбран режим “Android”).
Находим директорию workflows и создаём новый файл с типом YML. Назовём его, к примеру, run_unit_tests.yml.
Пока что всё, что мы хотим от скрипта, — это запускать unit-тесты на каждом pull request в ветку main. Можно скопировать целиком код из примера, всё должно работать. Если GitHub покажет, что в YAML ошибка, то проверить в первую очередь стоит правильность форматирования и количество отступов у блоков, так как формат чувствителен к этому.
actions/checkout@v2 и actions/setup-java@v1 подготавливают окружение для запуска тестов, первый выкачивает репозиторий и встаёт на нужный коммит, а второй устанавливает Java 8 — окружение. Это те самые Actions, которые даже упоминаются в названии, самые маленькие исполняемые единицы workflow. Можно рассматривать их как подключаемые к вашему workflow внешние библиотеки. Если интересно, что именно делают эти Actions, переходите по ссылкам https://github.com/actions/checkout и https://github.com/actions/setup-java
run: ./gradlew test запускает тесты с помощью gradle wrapper.
Запускать можно всё то же самое, что и в консоли, доступны все команды shell. Можно ещё написать свой собственный shell-скрипт и просто запустить его в этом месте, например, так: “run: ./run_unit_tests.sh”
Тут открывается простор для автоматизации всего что только можно. Если раньше вы никогда самостоятельно не писали shell-скрипты, рекомендую прочитать книгу “The Linux Command Line: a Complete introduction” от William Shotts, очень хорошее введение в shell-автоматизацию.
Готово! Создаем любой пулл-реквест в ветку main и смотрим во вкладке Actions, что получилось.
Я специально испортил один unit-тест, чтобы показать ещё одну базовую настройку вашего CI/CD-пайплайна — запрет на merge в ветку main c поломанными тестами. Всё логично: если ваш новый коммит что-то поломает в бизнес-логике приложения, то автоматика не даст сделать по ошибке merge. Или по крайней мере предупредит о проблеме.
Настраивается это очень просто: заходим в Settings репозитория, вводим в “Branch name pattern” паттерн для тех веток, для которых хотим создать новое правило безопасности. В нашем случае можно ввести “main”. Далее проставляем галочки в нужных условиях правила и сохраняем.
Всё готово, вы только что создали своё первое правило для merge в своем репозитории. Смотрим теперь, как поведёт себя автоматика с pull-request, в котором поломаны тесты.
Работает! При желании можно запретить merge с проблемами даже для администраторов, там же в настройках merge protection rule.
Если хочется прямо сейчас самостоятельно что-то настроить, то вот несложное задание. Gradle task test, который мы запускали, генерит небольшой отчет по результатам запуска unit-тестов, всё лежит в app/build/reports/tests/testDebugUnitTest/
Попробуйте самостоятельно добавить после шага Run unit tests ещё один шаг, который выкачивает отчет по тестированию.
На этом часть про запуск unit-тестов закончена, дальше настроим сборку и подпись релизного APK.
Задачу сформулируем так: подготавливать нам APK и AAB и подписывать ключом из keystore. Причём сборку мы будем запускать только на pull request в main из веток с именем, начинающимся с release/
Задача стала чуть сложнее, поэтому будем рассматривать ее по шагам.
Шаг 1. Собираем APK и AAB. Пока не подписываем
Вот эта строчка является проверкой имени ветки, из которой создается pull request, и, если условие выполняется, workflow продолжается. Мы ведь решили запускать сборку и подпись только для релизных веток.
Этот блок команд запускает, используя Gradle wrapper, тесты, а затем сборку APK и AAB. Обратите внимание, вертикальная черта позволяет запускать несколько shell-команд в одном блоке run.
Следующий шаг достанет после сборки APK и оставит его в виде артефакта в GItHub. Если этого не сделать, все временные файлы будут удалены после завершения workflow. Стоит обратить внимание, что APK остаётся неподписанным, мы просто не сконфигурировали пока ничего для этого. В таком виде APK его ещё нельзя выложить в Google Play, как настроить автоматическое подписание, будет рассказано дальше.
Подробнее про Action upload-artifact@v2 можно посмотреть тут. Основное, что может этот Action, — это выкачать файл по имени либо целиком директорию и упаковать в zip-архив.
Аналогичным образом достаем и AAB-файл.
Шаг 2. Подписываем APK
Сначала немного теории, как и зачем вообще подписывать APK.
Цифровая подпись необходима для того, чтобы Google Play мог идентифицировать разработчика и в дальнейшем только он мог обновлять приложение, это крайне важная вещь в процессе размещения проекта в магазине приложений.
В целях безопасности цифровая подпись хранится не в открытом виде, а в специальном хранилище типа key value — файле с расширением jks или keystore. Сам файл хранилища стоит держать в надёжном месте, это, можно сказать, паспорт вашего приложения.
Как создать keystore
Если вы уже выложили своё приложение в Google Play, то ключ у вас точно есть. Если же нет — ниже простая инструкция.
Вариантов два — создать через консоль или через IDE.
Консоль
my_app_keystore.keystore — это название самого хранилища, которое мы создаем.
app_sign_key — название ключа, по которому мы будем доставать наш секретный ключ.
10000 — время жизни ключа в днях (примерно 27 лет).
Вводим пароль на хранилище, пароль на ключ и потом по желанию метаданные о владельце. Всё, хранилище готово, можно пользоваться.
2) В Android Studio
В меню студии заходим в Build -> Generate Signed Bundle / APK.
Дальше Next -> Create New и вводим всё то же самое: пароли, имя хранилища и имя ключа в хранилище.
Чтобы собранный APK успешно подписать ключом из хранилища, необходимо этот самый ключ достать по имени (key alias), предварительно получив доступ через пароль к хранилищу (store password) и пароль непосредственно к ключу (key password). Это происходит в рамках специального Gradle task, всё будет далее автоматизировано.
И тут возникает два вопроса.
Где хранить пароли от хранилища, не в открытом же виде прописывать их в конфигах?
Как и куда выкладывать само хранилище ключей для открытого проекта?
Для хранения секретных данных, например, таких как идентификаторы приложения в Facebook, VK или Firebase, сервис GitHub предлагает механизм Secrets.
Особенность механизма хранения в том, что после сохранения ключа уже невозможно будет просто так зайти и посмотреть его. Только ввести новый, полностью удалить или использовать “как есть” в коде по имени. В логах секретные данные скрываются за звёздочками.
После добавления секретов к ним можно обращаться через специальный синтаксис прямо из YAML-скриптов. Например, вот так мы запишем EXAMPLE_API_KEY_1 в переменную окружения и затем в Gradle-скрипте, которому она понадобится, достанем её через System.getenv(‘EXAMPLE_API_KEY_1‘)
Отлично, часть проблемы решена, но куда положить само хранилище?
Можно в сам проект, конечно, но раз мы тут занимаемся автоматизацией процесса сборки и подписи, то как насчёт отдельного приватного репозитория чисто под хранилище? После настройки можно будет по шаблону подписывать все ваши приложения из этого хранилища.
Ничего кроме хранилища мы не собираемся помещать в новый приватный репозиторий. Мы будем клонировать его прямо в наш основной репозиторий в директорию app/keystore перед подписью APK-файла и доставать из него ключ с помощью паролей, который поместим в секцию Secrets в основном репозитории. Вот так будет выглядеть структура проекта на CI после клонирования репозитория с ключом в проект с основным проектом.
Звучит не очень сложно, смотрим, как такое настроить в GitHub Actions.
Создаем приватный репозиторий и помещаем туда только хранилище ключей.
Генерируем Personal access token для доступа к приватному репозиторию с хранилищем.
Делаем всё по этой инструкции и не забываем сразу же скопировать сгенерированный токен. Этот токен будет играть роль логина и пароля при клонировании репозитория с хранилищем. Важно не запутаться и генерировать токен именно в том аккаунте, где расположен наш приватный репозиторий.
Добавляем Personal access token из предыдущего шага в секреты основного проекта под любым именем, например KEYSTORE_ACCESS_TOKEN.
Добавляем все пароли и key_alias от хранилища.
Добавляем название аккаунта и имя приватного репозитория туда же в секреты основного проекта через слеш, что-то вроде “another-account/secret-repo”. Это понадобится нам дальше, когда будем клонировать репозиторий с ключом в YAML-скрипте.
Оформляем workflow для сборки APK и AAB в YAML-файле.
За основу был взят workflow, который был описан ранее. Запускается так же на pull request в main, только из веток, начинающихся на release/*. Вы можете поменять так, как вам удобно, это просто для иллюстрации возможностей.
Что тут добавилось? Во-первых, в начале workflow записываются переменные окружения, вот тут:
Далее последовательно делаем два checkout — сначала на коммит в созданном pull request (это было и раньше), потом делаем checkout приватного репозитория с хранилищем.
Тут уже есть особенности. Необходимо передать в checkout@v2 аргумент, в какой репозиторий стучаться (repository), токен для доступа к нему (token) и path. Path — это путь внутри директории с основным проектом, куда нужно сложить файлы. Мы хотим получить хранилище в app/keystore. В принципе, не обязательно именно такой путь, главное указать выбранный путь в Gradle, чтобы он понимал, где искать хранилище. Полную документацию по checkout@v2 можно почитать тут.
Дальше всё уже знакомое. Запускаем тесты и сборку релизной версии артефактов. На этом с workflow всё, дальше начинаем подготавливать build.gradle проекта.
Редактируем build.gradle
Идея заключается в том, что в заранее указанную директорию (app/keystore/) на CI автоматически добавится хранилище, а у себя локально мы можем без опаски хранить его в структуре проекта и даже положить туда файл с паролем в открытом виде. Это если нам хочется собирать и подписывать APK локально.
Главное при этом добавить в gitignore всё содержимое app/keystore, чтобы случайно секретная информация не утекла с очередным коммитом.
Чтобы Gradle понимал, где ему брать my_app_keystore в случае запуска assembleRelease локально и на CI, делаем нехитрую проверку. Сначала ищем keystore_config в директории keystore. Не нашли — делаем вывод, что нас запустили на CI и пароль следует брать не из keystore_config-файла, а из переменных окружения.
keystore_config — тут стандартный способ хранить в открытом виде пароли, внутри он состоит из пар key=value. Всё то же самое, что мы записывали в секреты на GitHub, но в открытом виде.
Само зашифрованное хранилище кладём рядом, в той же директории.
Если потребности подписывать APK локально нет или хочется вручную запускать процесс через “Generate Signed Bundle / APK”, выбирая каждый раз нужный keystore, то можно всё упростить и оставить только часть про System.getenv()
Тут самостоятельно примите решение, что вам подходит, безопасное хранение паролей — действительно важная история.
Пробуем запустить на CI
Отлично! То, что нам нужно, — готовый к релизу артефакт, собранный автоматически на GitHub Actions.
Запускаем локально.
В Android Studio переходим в терминал, запускаем.
После успешного завершения подписанный APK будет ждать нас в app/build/outputs/apk/release.
На этом со сборкой артефактов можно закончить, самые базовые кейсы рассмотрены.
Чтобы потренироваться с этим, предлагаю вам самостоятельно настроить подпись для debug-сборок.
И еще одно самостоятельное задание для заинтересовавшихся: чтобы сделать проект еще красивее, по проставлению в git tag версии приложения (например, v1.0.0) собирать APK, подписывать и складывать в разделе релизов прямо в GitHub репозитории с правильным названием, включающим версию из tag.
Подсказка — удобно использовать https://github.com/actions/create-release, там в описании есть похожий на нашу задачу workflow.
Выводим на README.MD статус выполнения workflow
Здорово смотрятся бейджи со статусом прохождения этапов CI на главной странице репозитория. Наверняка вы много раз видели похожие бейджики с процентом покрытия тестами кода, статусом сборки и так далее. Давайте прямо сейчас сделаем такие для статуса прохождения unit-тестов, для этого у нас уже всё есть.
Итак, у нас уже есть несколько workflow. Документация очень подробная и с примерами.
Открываем README.md и пишем что-то вроде этого, подставляя своё реальное имя на GitHub, название текущего репозитория и имя workflow, для которого хочется иметь бейджик.
Сохраняем и смотрим результат.
По-моему, круто всего для двух минут настройки. Теперь всегда будет видно текущий статус прогона тестов. А ещё можно будет добавить статус сборки APK для релизных веток, что-нибудь от статического анализатора кода вроде Sonarcube, в общем, всё, что пожелаете.
На этом первая часть рассказа про GitHub Actions заканчивается. За короткое время мы смогли настроить очень неплохую автоматизацию для проекта.
В следующей части продолжим тему тестирования и посмотрим как настроить запуск UI тестов в Firebase Test Lab. Не пропустите, будет интересно.
Источник