При написании использовал Kotlin; Для запросов к API Giphy использовал Retrofit и Moshi для преобразования JSON-ответа в дата класс; Для отображения Gif использовал Glide; Ассинхронность выполнена с помощью корутин; Для верстки использовал Xml;
Также, для перехода к фрагменту с информацией о Gif использовал Navigation с SafeArgs. В списке гифок используется сжатое изображение, в DetailView - оригинал гифки. Под ней отображается ID гифки и ее название. Для привязки изображений к imageView использовал BindingAdapters и DataBinding. В модели используется LiveData.
Дополнительный пункт с пагинацией: Интерпретировал так - сначала подгружается 25 гифок, потом подгружаются пачки гифок любого размера (я выбрал 10). Они подгружаются, когда пользователь прокручивает RecyclerView до конца. Использовал OnScrollListener. В портретном режиме в ряду отображается 2 гифки, в ландшафтном - 3.
Известный баг, который не успел починить: гифки подгружаются только после закрытия клавиатуры. Тестировал на Samsung S20FE, приложение использует 350-450 мегабайт озу.