Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kicumkicum/790a4081ca5f47af5121b0d33c0ac7ce to your computer and use it in GitHub Desktop.
Save kicumkicum/790a4081ca5f47af5121b0d33c0ac7ce to your computer and use it in GitHub Desktop.
План доклада об инструментов отладки Smart TV приложений

Идея

Отладка SmartTV больная тема для большинства разработчиков. Мысли о том, что придется делать все в слепую отталкивают разработчиков, что негативно влияет на отрасль SmartTV и Web в целом. Я рассказажу, что не все так плохо и инструменты существуют. А те, которых нет не сложно запилить самому.

Официальные средства

Удобные средства

Chrome remote debug (примеры подключения для tizen и webos)

  • Tizen
    1. tizen package --type wgt --sign <security_profile> -- ./build-tizen/ # Пакуем
    2. sdb connect <tv_ip_address> # Коннектимся
    3. sdb push ./build-tizen/<project_name>.wgt /opt/usr/apps/tmp # Копируем на девайс
    4. sdb shell 0 vd_appinstall <APPLICATION_ID> /opt/usr/apps/tmp/<project_name>.wgt # Устанавливаем
    5. sdb shell 0 debug <APPLICATION_ID> 300 # Запускаем отладчик
  • WebOS
    1. ares-package --no-minify src/customization/{projectName}/build-templates/webos
    2. ares-package --no-minify src/customization/{projectName}/build-templates/webos
    3. ares-install --device tv {{path to ipk file from build step}}
    4. TODO: запуск отладки
  • AndroidTV
    1. TODO: найти немного инфы
  • возможно современные STB
    1. Предположительно, так же как и на андроид

Opera dragonfly remote

  • STB
    • dune (пример подключения)
      1. TODO: найти офф. инфу
    • etc.
      1. Возможно так же как и у dune

Неудобные

Анализ логов девайса/контроль над оболочкой. Нужен ssh доступ

  1. Получаем ssh
  2. Анализируем /var/logs
  3. Анализируем /proc/... на предмет параметров запуска
  4. Пробуем запустить main_app --help на предмет опций и параметров запуска
  5. Находим способ быстрой перезагрузки оболочки

Неофициальные средства

Готовое решение

  • weinre / подключение и возможности

    • Возможности
      • эмулятор devtools
      • доступны вкладки elements, console, network(плохо работает), profyling (плохо работает)
      • отрытый исходный код, можно подправить под себя
    • Подключение
      • Добавляем в html <script src="http://YOUR_IP:8080/target/target-script-min.js#anonymous"></script>
      • Стартуем weinre --httpPort 8080 --boundHost YOUR_IP
      • Открываем в браузере http://YOUR_IP:8080
      • Следуем инструкциям
  • wireshark / подключение и возможности

    • Возможности
      • Анализ запросов, в случае, если нельзя подключиться к девайсу другими способами
    • Подключение
      • Изучаем доки или мануалы

Велосипеды

  • AppLauncher
    • Возможности
      • Запускаем разные дев. приложения по ссылке установив всего одно
    • Использование
  • remote logger в консоль
    • TODO: код сервера
    • TODO: код клиента
  • забиндить код на кнопки/комбинации кнопок пульта
    • window.addEventListener('keydown', (e) => e.target.keyCode === 42 ? location.reload() : null)
  • автоматизированные сценарии
    • создаем keydown евенты
    • TODO: пример сценария
  • инъекция локального кода в код приложения
    • ws-сервер шлет на клиент код, который тот eval'ит.
    • Нет необходимости перезагружать приложение
    • В зависимости от архитектуры приложения могут потребоваться backdoor'ы
  • удаленное управление/эмуляция пульта
    • После реализации предыдущих двух пунктов пульт не нужен
  • отображения логов/fps/статистики на экране поверх приложения
    • создаем елемент с position: absolute; z-index: 999; opacity: 0.5;
    • пишем в него все, что захотим
    • показываем прячем по хоткею
  • отображения логов/fps/статистики в локальной вкладке
    • rempl TODO: автор, ссылка
    • поднимаем свой сервер, который получает информацию от приложения
  • chrome extension для эмуляции девайса и запуска в браузере собраного под девайс приложения
    • эмулируем основное API девайса стабами и пустыми функциями

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment