Отладка SmartTV больная тема для большинства разработчиков. Мысли о том, что придется делать все в слепую отталкивают разработчиков, что негативно влияет на отрасль SmartTV и Web в целом. Я рассказажу, что не все так плохо и инструменты существуют. А те, которых нет не сложно запилить самому.
- Tizen
- tizen package --type wgt --sign <security_profile> -- ./build-tizen/ # Пакуем
- sdb connect <tv_ip_address> # Коннектимся
- sdb push ./build-tizen/<project_name>.wgt /opt/usr/apps/tmp # Копируем на девайс
- sdb shell 0 vd_appinstall <APPLICATION_ID> /opt/usr/apps/tmp/<project_name>.wgt # Устанавливаем
- sdb shell 0 debug <APPLICATION_ID> 300 # Запускаем отладчик
- WebOS
- ares-package --no-minify src/customization/{projectName}/build-templates/webos
- ares-package --no-minify src/customization/{projectName}/build-templates/webos
- ares-install --device tv {{path to ipk file from build step}}
- TODO: запуск отладки
- AndroidTV
- TODO: найти немного инфы
- возможно современные STB
- Предположительно, так же как и на андроид
- STB
- dune (пример подключения)
- TODO: найти офф. инфу
- etc.
- Возможно так же как и у dune
- dune (пример подключения)
- Получаем ssh
- Анализируем /var/logs
- Анализируем /proc/... на предмет параметров запуска
- Пробуем запустить
main_app --help
на предмет опций и параметров запуска - Находим способ быстрой перезагрузки оболочки
-
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
- Следуем инструкциям
- Добавляем в html
- Возможности
-
wireshark / подключение и возможности
- Возможности
- Анализ запросов, в случае, если нельзя подключиться к девайсу другими способами
- Подключение
- Изучаем доки или мануалы
- Возможности
- AppLauncher
- Возможности
- Запускаем разные дев. приложения по ссылке установив всего одно
- Использование
- Идем на https://github.com/interfaced/applauncher
- git clone
- npm i
- npm build <PLATFORM_NAME>
- устанавливаем на девайс
- Возможности
- 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 девайса стабами и пустыми функциями
Каждый пункт подразумевает описание, пример использования/подключения, описание сильных и слабых сторон инструмента.