Device Lab от Google: Android TV

в 15:56, , рубрики: android, Android TV, Chromecast, chromecast audio, Eddystone, github, Google, Google Play, google play music, html5, javascript, Receiver API, SDK, web, web приложения, Беспроводные технологии, мобильные приложения, Программирование, разработка мобильных приложений, Разработка под android

Device Lab от Google: Android TV / Хабрахабр

var N = 5;
var ar_duo1 = Math.floor(Math.random()*N+1);

if (typeof adriver == 'undefined')
{
var adb1 = 'yes';
}

var user_type = "guest";

var page_type = "publish_corp";

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-726094-1', 'auto');
ga('create', 'UA-726094-24', 'auto', {'name': 'HGM'});

ga('require', 'displayfeatures');
ga('set', 'dimension1', user_type); // user type - guest/readonly/habrauser

ga('set', 'dimension4', adb1);

ga('set', 'dimension5', page_type);

if(typeof removeUtms === 'undefined') {
removeUtms = function(){};
}

ga('HGM.set', 'dimension1', user_type);
ga('HGM.set', 'dimension2', "habrahabr");
ga('HGM.send', 'pageview');

ga('send', 'pageview', { 'hitCallback': removeUtms });

var adcm_config ={
id:1034,
platformId: 34,

tags: ['hub_wireless', 'hub_mobile_dev', 'hub_android_dev', 'hub_programming', 'g_internet_and_telecom', 'g_programming', 'g_mobile_os', 'g_android_os'],
init: function () {
window.adcm.call();
}
};

Мы в самом центре Device Lab от Google, в которой вы сможете взять на тест самые новые устройства компании и начать разрабатывать свои приложения для них. В прошлый раз мы рассмотрели устройства Chromecast - аудиоверсию и большой Chromecast. Мы показали, как встраивать их поддержку в свои приложения, а сегодня речь пойдет уже о "большой" Android-платформе Google - Android TV.

В Лаборатории доступен Forge TV от Razer, оставьте заявку и сделайте приложение для одной из самых перспективных платформ прямо сейчас!

Device Lab от Google: Android TV - 1

Android TV

Android TV - уже полноценная телевизионная приставка или сам телевизор с поддержкой платформы (такие уже достаточно давно выпускают Sony, Philips и многие другие компании), идеальный Smart TV со своими приложениями, магазином и всей инфраструктурой.

Что такое Android TV для пользователя? Это возможность превратить обычный телевизор в медиаплеер (с поддержкой как онлайн-каналов, так и привычных медиа приложений из Google Play) и игровую приставку (привычные игры из Google Play, но с новыми ощущениями и даже геймплеем). ATV-телевизоры в комплекте имеют либо обычный пульт, но с поддержкой функций, либо специальный отдельный пульт-геймпад. С пультом можно разговаривать (русский распознается), то есть использовать как источник голосового ввода для ATV. Можно также управлять системой через Android TV Remote Control, специальное приложение, которое можно скачать на смартфон или планшет.

Device Lab от Google: Android TV - 2

Если Chromecast, о котором мы говорили в прошлой статье, это просто воспроизведение медиа с вашего мобильного устройства, то Android TV это уже "самостоятельные" приложения и игры. Да, Android TV может работать как Google Cast приемник, но вся сила приставки раскрывается, конечно, не в этом. Android TV это все сообщество разработчиков Android у вас в гостиной. И к этому сообществу вы сейчас можете присоединиться.

В данном случае для участия в конкурсе разработчиков вы можете взять Forge TV, вариант Android TV от компании Razer. Довольно внушительное устройство - внутри приставки четырехъядерный Snapdragon 805 2.5 ГГц, Adreno 420 GPU, 2 Гб оперативной памяти, 16 Гб накопитель. Вовне - Ethernet, Wi-Fi, USB , HDMI и Bluetooth. К приставке вы можете подключить любой Bluetooth-джойстик, до четырех штук сразу, или, как минимум, вам понадобится пульт управления. Можно управлять основными функциями с клавиатуры, но это не очень удобно, а в играх она вообще не работает.

Device Lab от Google: Android TV - 3

Для Android TV существует специальный магазин приложений, в котором уже несколько тысяч приложений (в том числе и российских - Ivi.ru, Amediateka, Megogo, SPB TV) и высококлассных игр, таких, как, например, Real Racing 3, "Ходячие мертвецы" или Goat Simulator.

Google Play здесь имеет различные разделы. Обратите внимание, что есть TV Remote Games - это игры, где поддерживается управление пультом, а есть Casual for GamepadsAction for Gamepads - это игры с поддержкой джойстика.

Модели монетизации приложений стандартны: бесплатные, платные и со встроенными покупками. Привязывается стандартный Google Account, поэтому методы оплаты отдельно вводить не требуется - все подтягивается автоматически.

При установке приложений они скачиваются и устанавливаются локально, поэтому постоянное соединение с Интернетом не требуется - можно играть оффлайн.

Как создавать приложения для Android TV

В основе приставки лежит обычный Android (уровень API 17+), поэтому разработку под эту платформу отличается лишь в мелочах. По сути, версия приложения для ATV может быть в том же APK.

Главное - система ввода и отображение информации. Ввод надо делать для джойстиков и пульта, помнить, что тачскрина у телевизора нет и не будет. А отображать так, чтобы пользователь с расстояния в три метра мог различать то, что вы ему показываете.

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

AndroidManifest.xml

Необходимо добавить активити, которая будет запускаться на ATV-совместимом устройстве, это делается в манифесте - AndroidManifest.xml.

<application>
  ...

  <activity
    android:name="com.example.android.TvActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.Leanback">

    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    </intent-filter>

  </activity>
</application>

$(document).ready(function(){
hljs.initHighlightingOnLoad();
});

.t264 .hljs {
background-color: ;
}

Подробнее также параметры манифеста разобраны в статье Портирование Android-приложения под Android TV и Nexus Player из блога Intel.

Leanback library

Добавить поддержку Leanback Library - это библиотека, которая упрощает создания специфичного для ATV интерфейса. Этот шаг не является обязательным и больше актуален именно для приложений, а не для игр. Ниже приведу примеры элементов, которые Leanback Library позволяет реализовать.

BrowseFragment - интерактивный список фрагментов контента в приложении:

Device Lab от Google: Android TV - 4

DetailsFragment - карточка конкретного элемента:

Device Lab от Google: Android TV - 5

SearchFragment - список найденных фрагментов:

Device Lab от Google: Android TV - 6

Публикация в Google Play и секция рекомендаций

Теперь всё уже готово для публикации в Google Play - приложение будет доступно в секции Apps или Games.

Device Lab от Google: Android TV - 7

Но на стартовом экране ATV есть ещё секции выше - это секция Рекомендаций, которая является динамической.

Device Lab от Google: Android TV - 8

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

UpdateRecommendationsService.java

public class UpdateRecommendationsService
  extends IntentService {
   
  @Override
    protected void onHandleIntent(Intent intent) {
        ...
    }

    ...
}

$(document).ready(function(){
hljs.initHighlightingOnLoad();
});

.t264 .hljs {
background-color: ;
}

ContentProvider

Рекомендуется реализовать ContentProvider для доступности (индексации) контента внутри приложения. Это позволит включить приложение в результаты выдачи при глобальном поиске на стартовом экране.

Device Lab от Google: Android TV - 9

Ресурсы

Официальный раздел "Создаем приложения для ТВ":
https://developer.android.com/training/tv/index.html

Особенности создания игр для платформы:
https://developer.android.com/training/tv/games/index.html

Android TV Leanback Support Library - официальная UI-библиотека Google для создания телевизионных интерфейсов (впрочем, вы можете использовать и свой собственный):
https://github.com/googlesamples/androidtv-Leanback

Бесплатный курс на Udacity: https://www.udacity.com/course/android-tv-and-google-cast-development--ud875B

Видео "Ваши приложения на большом экране с помощью Android TV":
https://www.youtube.com/watch?v=yT4ADuZGEVY

Несколько советов от разработчиков

Device Lab от Google: Android TV - 10

Зак Литтон
вице-президент по технологиям в Telltale Games

Telltale Games — разработчик и издатель игр из США, расположенный в Сан-Франциско, Калифорния. Они известны своими популярными продуктами, в том числе и теми самыми «Ходячими мертвецами», выпущенными в сотрудничестве с HBO. Зак Литтон, вице-президент по технологиям в Telltale Games, не так давно поделился секретами создания и запуска игр на Android TV.

1. Определите устройство для Android TV: определите, на каком устройстве была запущена ваша игра, используя метод UiModeManager.getCurrentModeType(). Если устройство запущено в режиме телевидения, вы можете указать, что показывать на запуске игры на самом Android TV (Configuration). Добавьте фильтр категорий LEANBACK_LAUNCHER в один из ваших интент-фильтров для определения того, что игра доступна на TV. Это нужно для того, чтобы игра попала в категорию приложений для TV в Google Play.

2. Touchscreen vs TV: у телевизора нет тач-скрина, поэтому убедитесь, что флагу «нужен тач-скрин» присвоено ложное значение, потому что по умолчанию на Android он имеет истинное значение. Так ваше приложение не вылетит из TV Play Store сразу после запуска. Кроме того, проверьте ваши разрешения, потому что в некоторых могут встретиться требования к ПО, которые нужно будет явно убрать.

3. Используйте Hardware API: используйте диспетчер пакетов с System Feature API, чтобы ваша игра знала, какие возможности она может и должна показать. Например, показывать ли пользователю элементы управления на тач-скрине или игровые контроллеры. Вы также можете сделать так, чтобы приложение знало о своей локации с использованием API местоположения из сервисов Google Play: автоматическое отслеживание местоположения, геозонирование и распознавание активности.

4. Используйте подходящие контроллеры: чтобы охватить больше пользователей, ваше приложение должно поддерживать упрощенную схему ввода, для которой не нужен D-Pad. Тем не менее игрок должен иметь возможность использовать его в любой момент в игре — не просто для управления геймплеем, но и для навигационных меню и рекламы, поэтому ваша игра на Android TV не должна никак ссылаться на тач-интерфейс. Например, в игре на Android TV не должно говориться: «Тапните сюда для продолжения».

5. Появитесь в нужном месте: убедитесь, что вы добавили атрибут android:isGame и сделали его истинным, чтобы игра появлялась в правильном ряде в лаунчере — игры.

6. Сделайте баннеры для домашнего экрана: нужны баннеры домашнего экрана для каждой локализации, особенно если вы международный разработчик. Баннер (320*180) — точка запуска игры, которая возникает на домашнем экране в ряде с играми.

7. Используйте изображение ТВ в вашем листинге в сторе: убедитесь, что у вас есть хотя бы один скрин ТВ на странице Store Listing. Здесь должна быть иконка в высоком разрешении, фичеринг графика, промо-графика и ТВ-баннер.

8. Улучшите видимость своего приложения через «поиск» и «рекомендации»: Android TV использует поисковой интерфейс Android для поиска контента из установленных приложений и игр и выдает результаты поиска пользователю. Реализуйте ContentProvider, чтобы показывать предположения пользователю и SearchManager для создания глубоких ссылок на контент игры.

9. Установите правильные цены и дистрибуцию: проверьте «Distribute to Android TV» в нужной секции в консоли разработчика. Тогда Google сделает ревью, чтобы убедиться, что ваша игра соответствует минимальным требованиям для TV.

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

Device Lab от Google: Android TV - 11

Егор Данилов
директор по продуктам ivi.ru

— Какая команда занимается разработкой вашего приложения для Android TV?

— На данный момент приложение для Android TV – самое передовое среди всех наших приложений для Smart TV. Оно позволяет прямо с главного экрана продолжить в один клик просмотр с того места, где остановился пользователь (эта функция работает в том числе кроссплатформенно). Фильмы, отложенные в список «Смотреть позже» и покупки также доступны со всех устройств: сайта, мобильных приложений, приложений для Smart TV.

Мы решили использовать нашу собственную команду разработки, которая занимается основным приложением. Всегда интересно изучить новую платформу и новые библиотеки.

$(document).ready(function() {
t341_showCaptions('5997013');
t341_checkSize('5997013');
$("#t-carousel5997013 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});

$(window).resize(function() {
t341_checkSize('5997013');
});

— Какие инструменты вы используете для этого?

— Довольно стандартные — Android Studio и Android Leanback Library для разработки; Sketch, Zeplin и Material Design для дизайна.

— С какими основными сложностями вы столкнулись?

— Каких-то больших трудностей не было, в основном это были проблемы совместимости одного приложения для двух платформ и вопросы разделения версий в Google Play. Из-за разнообразия устройств с Android TV, нам так же пришлось купить несколько телевизоров популярных брендов и несколько приставок, которые сейчас официально не продаются в России.

— Сколько сейчас у вас пользователей?

— С первого же дня мы вошли в Топ 10 самых популярных бесплатных приложений на Android TV в России. И до сих пор остаемся единственным онлайн-кинотеатром в этом топе. Мы не раскрываем цифры посещаемости, однако число просмотров на платформе исчисляется сотнями тысяч.

Device Lab от Google: Android TV - 14

Илья Манин
разработчик SPB TV

— Чем отличается разработка для Android TV?

— Если использовать Android TV только в качестве Google Cast приемника, ничего дополнительно делать не надо. Но это не лучший вариант использования Android TV, так как для запуска Вашего приложения оно должно быть установлено на мобильном устройстве, на котором придется выбирать контент и управлять воспроизведением. Кроме того, пользователи не смогут найти ваше приложение в Google Play на Android TV.

Приложения, адаптированные для Android TV, используют другой подход к построению пользовательского интерфейса и навигации по приложению. Придется забыть про тачи и жесты, все управление только с пульта с навигационными кнопками - стрелками и кнопками ok и back.

Самый простой способ сделать приложение по всем правилам Android TV это использовать библиотеку Leanback из Android Support Library. Но для этого вам придется как минимум полностью переписать уровень представления, а скорее всего, придется переписать и модели данных.

В идеале вы можете использовать один общий код для бизнес-логики и работы с данными и два разных кода представления по одному для Android и Android TV.

Кроме того, для Android TV появилось несколько механизмов, которые стоит поддержать. Самое интересное и полезное, на наш взгляд, это отображение рекомендованного контента на главном экране ТВ. При этом отображается контент из всех приложений, установленных на Android TV, если они поддерживают такой механизм.

— Какие сложности тут есть?

— Самое непростое это переработать приложение для соответствия UI-гайдлайнам и принципам навигации Android TV. Грамотно выделить уровень представления, избежать дублирования кода и сохранить ядро приложения в единственном экземпляре как для Android, так и для Android TV.

— Как вы их решали?

— Очень помогает в этом плане механизм Data Binding, который мы стараемся использовать во всех новых разработках. Этот механизм позволяет отделить модели данных от их представления на разных платформах. Для данных мы используем Retrofit в связке с RxJava. Эти библиотеки позволяют быстро и эффективно разработать универсальное приложение для разных Android-платформ.

— Какими инструментами вы пользуетесь для разработки?

— Мы используем Android Studio в связке со стандартным набором: Gradle, Git, сейчас это основные инструменты для большинства Android разработчиков. Применяем для непрерывной интеграции TeamCity, Robolectric для автотестов и Jira в качестве багтрекера.

Рассматриваем Kotlin как перспективный язык, на котором гораздо удобнее работать с лямбда выражениями из RxJava.

Как делать снимки экрана на приставке Android TV

Когда вы будете готовить статью, то вам необходимо будет делать скриншоты. Казалось бы, для ТВ-платфомы дело это не очень простое, но на самом деле все просто.

Вариант 1

Как говорят, в первых версиях Android TV сделать снимок экрана было довольно затруднительно. Надо было подключать устройство к Android Studio и через режим отладки снимать скриншоты. Другим вариантом, который удалось найти, было использование Twitch. На самом деле в варианте Force TV, который вы будете использовать, снимок экрана делается проще простого: вы просто подключаете стандартную PC-клавиатуру к USB-порту приставки и в ней по умолчанию работает кнопка PrintScreen, которая сохраняет скриншоты в домашнюю директорию с картинками.

Добраться до них тоже довольно легко. В арсенале Google Play есть прекрасное приложение ES File Explorer, знакомое, думаю, большинству пользователей Android. Мало того, что оно дает полный доступ к файловой системе приставки, так оно еще может и работать как ftp-сервер на приставке. В результате из любого браузера на десктопе вы моментально получаете доступ к фалйам Forge TV, в том числе и скриншотам.

$(document).ready(function() {
t341_showCaptions('5997119');
t341_checkSize('5997119');
$("#t-carousel5997119 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});

$(window).resize(function() {
t341_checkSize('5997119');
});

Вариант 2: через USB подключение

1. В настройках включаем режим отладки (надо зайти в Settings - About Build - кликнуть до 10 раз на пункт Build - после этого включится режим разработчика - надо выйти на главный экран и вернуться в Settings - там в Preferences будет пункт Developer Options). Включаем также режим Device mode (это в Developer Options - Razer Tools).

2. Для подключения вам нужен будет USB 2.0 A-to-A кабель.

3. Устанавливаем Google ADB драйвера из SDK (скорее всего, они у вас уже есть).

4. Включаем ADB: запускаем утилиту для конфигурирования, например:C:Program FilesAndroidandroid-sdktools> android.bat update adbизменяем конфиг и добавляем вендора с id 0x1532

Example adb_usb.ini (normally located at C:Users\.androidadb_usb.ini) file…
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x1532

$(document).ready(function(){
hljs.initHighlightingOnLoad();
});

.t264 .hljs {
background-color: ;
}

После этого ADB должен видеть Razer Forge, и вы сможете отлаживать свои приложения через USB и снимать скриншоты.

Будущее

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

А в следующей статье лаборатории - маячки с поддержкой Eddystone.

Комментарии (0)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

$(document).ready( function(){
window.tmidLogin = function(){ return false; };
if( $.cookie('tmid_no_check') === undefined ) {
var expire = new Date();
expire.setMinutes(expire.getMinutes() + 10 );
$.cookie('tmid_no_check', 1, { expires: expire } );
$.getScript("https://id.tmtm.ru/checklogin/", function(){
if( window.tmidLogin() ) {
var href = $('#login').attr('href');
if( href !== undefined ) {
window.location.href = href;
}
}
});
}
});

// global vars
var g_base_url = 'habrahabr.ru';
var g_show_xpanel = false;
var g_base_fullurl = 'https://habrahabr.ru/';
var g_is_guest = false;

(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
if (typeof (_yaparams) != 'undefined') {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
params:_yaparams});
} else {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true});
}

} catch(e) { }
});

var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";

if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");

Device Lab от Google: Android TV - 17

function checkHeaderPos(){
var topToHubs = $('.megapost-cover').offset().top + $('.megapost-cover').outerHeight();
var sT = $(this).scrollTop();
if (sT > topToHubs) {
$('.t199__js__header, .t199_js__header').fadeIn();
} else {
$('.t199__js__header, .t199_js__header').fadeOut();
}
}

$(window).on('scroll', function() {
checkHeaderPos();
});

function drawguides(){
if($("#guides").length)$("#guides").remove();

$("body").append('

');

var g=$('#guides');
var ww=$(window).width();

var offset_left=parseInt((ww-1200)/2);
var col_space=20;
var col_width=100;

if(ww=960){
for(i=0;i<13;i++){
var x1=(i*col_width)+offset_left-col_space;
var x2=(i*col_width)+offset_left+col_space;
var n=i+1;
if(i!=0)g.append('

');
if(i!=12)g.append('

');
if(i!=12)g.append('

'+n+'

');
}
}

if(ww<960){
var x=parseInt(ww/2);
g.append('

');
}

var doit;
$(window).resize(function() {
if($("#guides").length){
clearTimeout(doit);
doit = setTimeout(drawguides, 300);
}
});
}

function showguides(){
if($("#guides").length){
$("#guides").remove();
$("#guidesmenubutton").css("display","none");
}else{
drawguides();
$("#guidesmenubutton").css("display","block");
}
}

Автор:

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js