Как установить ютуб без сервисов гугл?

Компания Google своей карающей политикой совершенно убила целую категорию приложений — альтернативные клиенты для видео-хостинга YouTube. Большинство качественных существующих проектов были удалены из Google Play и на этом их развитие забуксовало. А те, что каким-то чудом остались в каталоге, особого интереса сами по себе не представляют. Однако недавно европейские разработчики выпустили NewPipe — свободный клиент для YouTube без сервисов Google и с интересным набором функций.

Основные возможности и особенности, из-за которых стоит обратить внимание на NewPipe:

  • Легковесный и быстрый.
  • Простой и удобный.
  • Умеет качать видео с YouTube.
  • Можно пользоваться как аудио-плеером.
  • Никаких сервисов Google, API YouTube и других назойливых вещей.
  • Нет рекламы в поисковой выдаче.
  • Бесплатный.

Первые версии приложения NewPipe пока обладают неполным функционалом, но его уже достаточно для комфортного использования. Программа полностью свободная, то есть распространяется бесплатно и ее исходные коды доступны в сети. NewPipe нет в Google Play — в качестве платформы распространения используется каталог свободного ПО F-Droid. Также приложение можно скачать на Трешбоксе (там же можно найти ссылку на репозиторий F-Droid).

Клиент NewPipe необычен тем, что он использует именно данные с сайта YouTube.com, а не проприетарные API и Сервисы Google. Поэтому программа предлагает очень интересный и зачастую уникальный функционал.

При первом запуске NewPipe может смутить пользователя — перед ним предстанет почти пустой экран с иконкой программы. Сверху находится строка поиска. Она и является единственным элементом, через который можно найти нужное видео. Вбиваем в строку любое слово — получаем видео. Также в поиск можно вставлять полный URL-адрес, по которому доступен тот или иной ролик, чтобы сразу перейти на него.

После ввода запроса появляется список с самыми популярными и релевантными видео, причем рекламных в нем нет. Интерфейс страницы самого ролика мало чем отличается от таковой в официальном приложении YouTube. Только в NewPipe нет секции комментариев, а еще нельзя перейти на страницу канала — приходится довольствоваться только панелью снизу с рекомендуемыми роликами и видео с этого же канала.

Сверху видео есть панель с выбором качества. Нет, NewPipe автоматически не выбирает лучшее — приходится либо выбирать в настройках, либо на странице ролика. Также на этой же верхней панели находятся кнопки воспроизведения видео в аудио-формате. Да, NewPipe можно использовать как аудио-плеер для видео с YouTube. При этом музыка не прерывается при уходе устройства в спящий режим, а еще ее можно ставить на паузу прямо из шторки уведомлений. Также рядом есть кнопка скачивания видео — еще одна прекрасная функция YouTube. Довольно мало Android-приложений сейчас могут спокойно качать видео с YouTube в нормальном качестве. В настройках можно задать папку, где видео будут складироваться.

При нажатии на кнопку воспроизведения ролика открывается незамысловатый плеер с четырьмя кнопками — пауза, перемотка и изменение ориентации экрана. Здесь стоит отметить еще одну крутую функцию NewPipe — возможность воспроизводить видео в другом плеере. То есть ролик из NewPipe отправляется, например, в VLC или любой другой установленный плеер. То же самое можно делать с воспроизведением аудио-дорожки — ее можно отправлять в другой сторонний музыкальный плеер.

Среди прочего в NewPipe есть функция пропуска всего трафика из приложения через анонимную сеть Tor — самое то для параноиков. Конечно, в NewPipe нет возможности войти в свой YouTube-аккаунт и просматривать подписки, но этого в приложении никогда не появится. В большей степени это даже хорошо, так как отсутствие сервисов Google и API YouTube в NewPipe — это главная особенность. В будущем разработчики обещают добавить много новых функций. Надеемся, что NewPipe в будущем будет еще активно развиваться.

В этой статье рассмотрим, что такое Instant App, зачем он нужен и как создать такое приложение?

Еще в прошлом году на DroidCon я слышал об этой теме. В этом году о ней тоже говорили. Наконец то у меня дошли руки посмотреть подробнее. В этой статье я расскажу, что мне удалось понять. Кода здесь практически не будет, только поверхностный разбор. И в конце несколько полезных ссылок для дальнейшего изучения.

Пример

Давайте сразу посмотрим пример. Есть такой видеохостинг — Vimeo. И у них есть свое Android приложение на маркете.

Если загуглить, например, «vimeo video», то гугл в результатах покажет несколько видео, нажав на которые можно перейти на Vimeo сайт. Т.е. браузер откроет ссылку вида https://vimeo.com/236370796. Но если делать это на Android смартфоне, на котором установлено Vimeo приложение, то оно и откроется вместо сайта. Система видит, что есть приложение, которое умеет открывать такую ссылку и запускает его.

Если же приложение Vimeo не установлено, то может открыться его Instant App версия.

Это приложение, которые мы даже явно не устанавливали. Система сама загрузила и установила его, и открыла в нем видео. (Не знаю почему рекордер не записал видео, которое проигрывается в верхней части экрана, но оно там есть). Обратите внимание также, что в этом приложении есть кнопка для перехода к установке полной версии с маркета.

Если у вас не запускается Instant App, то убедитесь, что он включен в настройках системы: Settings -> Google -> Instant App. Если у вас в настройках нет пункта Instant App, значит ваше устройство его не поддерживает.

Т.е. система перехватила ссылку, определила, что для нее есть Instant App приложение, скачала его и запустила. Ссылка играет очень важную роль в этой технологии. По сути URL — это точка входа (entry point) в приложение. Чуть позже я расскажу, как реализуется эта привязка.

А вот так выглядит полноценная версия приложения Vimeo, установленная с маркета.

Видно, что экраны обоих версий очень похожи, но у Instant App версии функционал ограничен. Instant App — это light версия основного приложения. Как мы уже видели, она может быть быстро подгружена и отображена при нажатии на ссылку.

Зачем нужен Instant App

Зачем это может понадобиться? Самый очевидный ответ — чтобы получить больше установок вашего приложения. Пользователь находит что-то в гугле (или просто получает ссылку в мессенджере, почте и т.п.), нажимает на ссылку и у него открывается ваше Instant App приложение. Оно позволяет пользователю увидеть примерный функционал и призывает установить полную версию. Тем самым вы получите нового пользователя. Т.е. Instant App — это классическая демоверсия приложения, которая помогает пользователю принять решение об установке полноценной версии.

Как создать Instant App приложение

Давайте разбираться, откуда взялась эта Instant App версия и как ее создать.

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

О каких модулях речь? О тех самых, с которыми мы работаем в Android Studio. По умолчанию у нас создается только модуль app. Если мы работаем по Clean Architecture, то обычно создаем еще несколько модулей. А если мы собираемся создавать Instant App приложение, то мы выносим в модули отдельные фичи (features) приложения.

В примере с Vimeo такая фича — это экран просмотра видео. Т.е. в приложении есть какое-то Activity, которое отвечает за этот экран. Оно вынесено в отдельный модуль. Назовем этот модуль — videoplay. В этот модуль кроме Actiivty мы выносим используемые им классы — адаптеры, презентеры, кастомные вьюхи, и пр. Т.е. тут должны быть классы, которые нужны для работы только этому Activity и никому больше.

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

В каждом feature-модуле прописана зависимость от base-модуля:

dependencies { implementation project(‘:base’) … }

Впрочем, это не мешает модулю base быть feature-модулем. Он также может содержать в себе Activity.

В итоге ваш проект состоит из одного base-модуля и нескольких feature-модулей. Из этого всего мы можем собрать два типа приложения.

Первое — это обычный полноценный APK, который включит в себя все ваши features-модули.

Второе — это ограниченное Instant App приложение, которое включит в себя base-модуль и те feature-модули, которые вы хотите видеть в этом приложении.

Чтобы обеспечить нам возможность собрать два разных приложения из одного кода, в Instant App проекте есть два модуля сборки: installed и instant.

installed соберет для нас полноценное приложение, а instant — Instant App версию.

В этих модулях есть gradle файлы, в которых мы прописываем feature-модули, который будут использованы при сборке приложения.

dependencies { implementation project(‘:base’) implementation project(‘:feature1’) implementation project(‘:feature2’) }

Соответственно, в gradle файле модуля installed мы обычно указываем все feature-модули, чтобы получить APK с полным функционалом. А в gradle файле instant мы указываем только те features-модули, которые хотим видеть в Instant App приложении.

Модуль installed соберет APK, который будет использовать модули как библиотеки. А модуль instant сделает отдельный APK из каждого модуля и запакует все эти APK в один ZIP.

Маркет

Какую из этих двух версий приложения надо заливать на маркет?

Полноценный APK обязательно должен там быть. А вот Instant App — по вашему желанию. Если он вам нужен, то создавайте и заливайте.

Как программно определить версию

Т.к. обе версии приложения используют один и тот же код, то в этом коде может возникнуть необходимость проверять, в какой именно версии мы сейчас находимся. Для этого можно использовать метод isInstantApp.

Activity = модуль

И что, теперь нужно каждое Activity выносить в отдельный модуль?

Не нужно. Выносите в отдельные feature-модули только те экраны, который вы хотите видеть в Instant App. А весь остальной код можете оставить в одном отдельном feature-модуле, который просто не будет включен в Instant App. Не забудьте только в base-модуль поместить классы, которые нужны будут для работы feature-модулей.

URL

Я уже упоминал, что URL является входной точкой в Activity.

Каждый feature-модуль должен содержать в себе хотя бы одно Activity (можно и больше). И для этого Activity должен быть настроен IntentFilter на определенный URL.

Когда пользователь нажимает на ссылку, происходит следующее.

Система находит, что в маркете существует Instant App приложение, в котором есть feature-модуль, который умеет открывать такие ссылки.

Чуть выше я писал, что Instant App приложение представляет из себя ZIP, в котором собраны все feature-модули и base-модуль в виде отдельных APK. В случае с Vimeo, например, это могли бы быть, например, файлы videoplay.apk (создан из feature-модуля videoplay) и base.apk (создан из base-модуля). И в videoplay.apk есть Activity, для которого настроен IntentFilter на vimeo.com ссылки.

Система загружает videoplay.apk на устройство и запускает. Вместе с ним также она загружает base.apk. Т.е. когда идет первая загрузка какого-либо feature APK файла из Instant App, с ним вместе всегда грузится и base.apk. Потому что все feature зависимы от base. Отсюда, кстати, вытекает одно ограничение. Суммарный размер любого feature APK файла и base.apk не должен превышать 4 мегабайт. Т.е. в нашем случае суммарный размер файлов videoplay.apk и base.apk не должен превышать 4 MB. Это сделано, чтобы приложения Instant App были максимально легкими и быстро загружаемыми.

Тут важно понимать, что, даже если Instant App приложение содержит в себе еще какие-либо feature APK файлы, система загрузит только videoplay.apk (+ base.apk). Потому что в данный момент нужен только этот файл для обработки нажатой ссылки.

А что если экран из videoplay.apk предоставляет возможность перейти на какой-то другой экран, например, экран комментариев? В этом случае программно переход должен быть реализован не с помощью Intent, который вызывает Activity, а с помощью Intent, который вызывает ссылку. Например, это могла бы быть ссылка вида https://vimeo.com/236370796/comments.

Предположим, что в проекте есть feature-модуль videocomments, в котором находится Activity c IntentFilter, настроенным на такие ссылки. И этот feature-модуль был включен в список в модуле instant. В этом случае система найдет, что в Instant App приложении есть еще файл videocomments.apk, в котором есть Activity настроенное на этот тип ссылок. Система загрузит и запустит videocomments.apk. Файл base.apk в этом случае уже не будет загружаться, т.к. он был загружен ранее.

Try now

Если в маркете есть Instant App версия приложения, то пользователь видит кнопку Try now.

По нажатию этой кнопки происходит примерно то же самое, что и по нажатию на ссылку. Система загрузит один из feature APK вместе с base.apk и запустит его.

Какой именно модуль будет запущен, можно определить в манифесте. Будет найден тот APK, который содержит главное Activity. Т.е. Activity со стандартным фильтром:

<intent-filter> <action android:name=»android.intent.action.MAIN» /> <category android:name=»android.intent.category.LAUNCHER» /> </intent-filter>

Либо есть возможность в манифесте указать ссылку:

<meta-data android:name=»default-url» android:value=»https://vimeo.com/236370796″ />

Она будет вызвана по нажатию на Try now и далее будет загружен и запущен соответствующий этой ссылке feature APK.

Полезные ссылки

Для дальнейшего изучения темы рекомендую посмотреть следующие материалы.

и

Два codelab от google. В них вы увидите, как обычный проект можно переделать в Instant App. После этого вы будете понимать техническую сторону темы.

https://www.youtube.com/watch?v=tXqat1JOmS8 — видео с Google IO 18. Мало технических деталей, много общих слов про функционал и возможности. Полезно к просмотру, чтобы понять назначение этой технологии. Это видео можно скинуть продакт-менеджеру, чтобы он впечатлился и захотел внедрить такую штуку на проекте.

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме