четверг, 6 октября 2016 г.

Редактируем Splash Screen в смартфонах на Qualcomm.

Давненько я не писал интересных исследовательских статей, и вот недавно появился очередной повод к проведению такого исследования. Речь пойдет о редактировании Splash Screen'ов для смартфоном на базе Android с чипсетами от Qualcomm. Сразу скажу что статья носит скорее исследовательский характер, воспользовавшись рекомендациями приведенными в ней можно будет отредактировать splash на вашем собственном устройстве или написать ПО для упрощения такого редактирования, однако, уровень подготовки читателя должен быть чуть выше среднего. Т.е. здесь вы не найдете готовых решений в стиле нажмите туда-то, кликните там-то и ваш splash screen поменяется. Однако, если вы попробуете хотя бы немного разобраться в теме, как это сделал я, то безусловно у вас все получится.

Небольшая предыстория ... что такое Splash Screen думаю многие представляют (не стоит путать его с boot animation), это как раз та картинка, которая появляется на вашем аппарате сразу после включения, также, отдельные splash screen'ы могут быть встроены в ваш телефон для различных событий, например, при разряженной батарее, переходе аппарата в download mode и т.п. Например в Alcatel Idol 3 6045Y (да и в Alcatel Idol 4 6055K) в прошивке встроены несколько таких splash screen'ов, вот они (всего их 4, правда здесь я привел только 3 картинки):


Давайте разберемся где же они хранятся в аппарате, как их извлечь и как заменить. Общеизвестно что на аппаратах построенных на базе Qualcomm (ну по крайней мере на большинстве) существует определенный раздел на eMMC Flash, который как раз и называется splash. Давайте извлечем этот раздел с аппарата (сделать это можно, например, при наличии root-прав) и попробуем разобраться с его внутренней структурой:


На скриншоте дамп раздела splash открытый в hex-редакторе Hacker's View. Как мы видим, раздел начинается с заголовка SPLASH!!, а дальше уже идут какие-то данные. При этом сигнатура SPLASH!! встречается в файле несколько раз из чего можно сделать вывод что каждая картинка в разделе (в нашем с вами примере их 4) состоит из некоего заголовка, начинающегося с этой сигнатуры и непосредственно данных.

В разборе структуры заголовка мне существенно помог скрипт генерации лого - logo_gen.py с CodeAurora. Начнем с заголовка, если использовать C, то описать его структура можно следующим образом:

    struct logo_header {                                            
       unsigned char[8]; // "SPLASH!!"                              
       unsigned width;   // logo's width, little endian             
       unsigned height;  // logo's height, little endian            
       unsigned type;    // 0, Raw Image; 1, RLE24 Compressed Image 
       unsigned blocks;  // block number, real size / 512           
       ......                                                       
    };                                                              

В рассматриваемом нами примере width = 1080 (0x0438), height = 1920 (0x0780), тип изображения - 1, т.е. RLE24 Compressed Image и количество блоков - 226 (0xE2). Размер блока при этом равен - 512 байтам (1 сектор), а сам заголовок тоже занимает 512 (0x200 байт). Отлично. Теперь мы знаем куда больше, чем изначально. Теперь настало время познакомиться с тем что такое RLE и почерпнуть немного теоретической информации. Сделать это можно здесь:

Основное здесь - это статья на Хабре про алгоритм RLE, в Qualcomm'овских девайсах применяется примерно такой же алгоритм (различия очень незначительные), если вы поняли смысл, то без труда поймете и отличия.

https://github.com/DeckerSU/run_length_imager - в этом репозитории я выложил все свои наработки, которые касаются RLE-декодирования изображений из SPLASH'а, в частности там есть два Python скрипта, один для декодирования RLE Encoded RGB24 RAW изображения, другой для его кодирования. Также, там есть модифицированная версия утилиты rlimager.c от makers_mark с форума XDA. В нее я добавил ключ -d 5 , с помощью которого можно декодировать RLE Encoded RGB24 RAW изображения от Idol 3 6045 и Idol 4 6055. Доступны как исходники, так и собранный с помощью MinGW под Win32 бинарник.

Теперь немного практики, т.к. многие не понимают как и чем можно открыть даже несжатое RLE RAW RGB24 изображение, немного расскажу об инструментарии. Первое что мы делаем это ставим x86 или x64 версию IrfanView и обязательно все плагины к нему (!), без плагинов raw изображение у вас не откроется. Далее вырезаем в HIEW (или любом другом hex-редакторе) блок бинарных данных из дампа раздела splash, начиная со смещения 0x200 (т.е. 512 байт заголовка splash мы пропускаем) и вплоть до следующей сигнатуры SPLASH!! в файле и сохраняем получившийся блок как image.rle.raw. Далее берем IrfanView и пробуем открыть в нем изображение как RAW - File -> Open AS ... -> RAW File и выставляем следующие параметры:


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


Это из-за RLE кодирования. Используем python скрипт или доработанную мной утилиту rleimager.exe для декодирования, запускаем:

rleimager.exe -d 5 -m 1080 < image.rle.raw > image.raw

И получаем файл image.raw, который еще раз пробуем открыть в IrfanView способом который уже описан выше и получаем то, что и должны:


Отлично, не так ли? Собрать все это дело назад можно закодировав RAW RGB24 изображение с помощью RLE, затем добавить корректный заголовок и, если картинок в образе раздела splash несколько, просто объединить блоки разных картинок в раздел и прошить в телефон. Подготовка образа splash.img - это уже "задание на дом".

Специальных утилит для редактирования splash.img для Qualcomm, к сожалению нет (для MTK в свое время написали LogoBuilder, который позволяет перепаковывать logo.bin), но основываясь на полученных знаниях вы вполне можете создать нечто подобное. Или же использовать модифицированный python скрипт для сборки splash.img от GokulNC, например, отсюда (естественно, что перед тем как использовать, нужно разобраться как он работает и модифицировать под свою модель устройства). Также, вы можете добавить корректное RLE кодирование в утилиту rleimager (я дописал только декодирование) и использовать ее в повседневной работе.

Ну и естественно статья была бы не полной без демонстрации работоспособности всего описанного на реальном аппарате. Для примера я нарисовал такое лого, давайте посмотрим как оно будет смотреться на реальном аппарате:

 

Надеюсь что статья была полезной для вас. Ну а вариантов применения подобной кастомизации можно найти массу, начиная от простого получения удовольствия от новой красивой картинки при загрузке телефона и заканчивая различными полезными функциями персонализации, например, на splash logo можно поместить логотип собственной компании в целях поддержания корпоративного стиля (особенно если все сотрудники пользуются одинаковыми моделями аппаратов), или разместить там информацию о том, куда можно обратиться нашедшему ваш телефон и т.п. Здесь уже все зависит от вашей фантазии.

суббота, 24 сентября 2016 г.

Oysters T74HMi LTE. Специальное предложение от Мегафон.

Давненько я с вами ничего не "обозревал" и сегодня мы постараемся исправить эту ситуацию, тем более что несколько дней назад, 19 сентября, на волне разнообразных акционных предложений других операторов, касающихся продвижения тарифных планов "для планшетов" Мегафон запустил специальное предложение для своих абонентов - 4G-планшет с подключенной опцией "Интернет Планшет S". Подробнее об условиях акции вы можете прочитать на официальном сайте оператора, я же лишь напомню, что условия акции различны в различных регионах, поэтому при переходе на сайт Мегафона необходимо не забыть выбрать свой регион из списка.

Итак, что же мы получаем ... по условиям акции (которая в интернет-магазине оператора носит название "Кино в дорогу" или "4G планшет спасает от скуки") мы получаем специальное предложение - планшетный ПК Oysters T74HMi 4G, а также опцию "Интернет Планшет S" на несколько месяцев + пакет сериалов "Амедиатека" в MegaFon.TV. Условия подключения тарифной опции в разных регионах разные, так, например в Москве и МО планшет вам обойдется в 3990 руб., а тарифная опция в 800 руб., в других регионах цена планшета такая же, но опция стоит чуть дороже, уже 1020 руб. Плюс, если вы берете новую SIM-карту вместе с планшетом, то за нее придется "доплатить" еще 200 руб. Итого, если мы покупаем данный комплект в регионе общая стоимость покупки обойдется нам в 5010 руб. + стоимость SIM-карты (если мы берем новую, а не подключаем опцию на уже существующий номер).

Много это или мало - давайте попробуем разобраться вместе. Начнем с самого планшета. Oysters T74HMi 4G представляет собой 7" планшет с IPS матрицей и разрешением экрана 1024x600 пикселей. Сердцем устройства является четырехядерный чип от Mediatek - MT8735W с тактовой частотой 1.3 GHz. Графическая подсистема здесь представлена Mali T720 MP1. Планшет поставляется с одной из последних операционных систем от Google - Android 6.0 Marshmallow и обладает 1 Gb оперативной памяти и 8 Gb встроенной память (естественно необходимо учитывать что примерно половину из этого пространства занимает сама ОС Android). Более подробно с техническими характеристиками новинки можно ознакомиться на коробке:


Как вы уже поняли - в плане технических характеристик ни Мегафон, ни Oysters на этот раз нас ничем не удивили, практически аналогичная модель (за исключением операционной системы) уже представлена у оператора и это Мегафон Login 4 LTE , которая сейчас фактически стоит на 1000 руб. дороже, чем новый Oysters T74HMi 4G. Однако, разница между ними, пусть и формальная, но есть - у T74HMi 4G 2 слота для SIM-карт, в то время как у Login 4 всего один, плюс у новинки шестой Android, а там - пятый. В остальном же можно сказать что девайсы примерно одинаковые. Для вашего удобства я свел характеристики обоих устройств в таблицу:



Планшет Oysters T74HMi 4G Планшет Мегафон Login 4 LTE
Операционная система:Google Android 6.0 (Marshmallow) Google Android 5.1 (Lollipop) 
Процессор:1.3 GHz, 4-ядерный, MediaTek MT8735W (Cortex-A53), графическая подсистема: Mali T720 MP1 1.3 GHz, 4-ядерный, MediaTek MT8735 (Cortex-A53), графическая подсистема: Mali T720 MP2
Память:1 Gb (RAM) + 8 Gb (ROM), поддержка карт памяти microSDHC до 32 Gb 1 Gb (RAM) + 8 Gb (ROM), поддержка карт памяти microSDHC до 32 Gb
Экран:IPS, 7", 1024x600 пикселей, 16 млн. цветов, мультитач 5 точек IPS, 7", 1024x600 пикселей, 16 млн. цветов, мультитач 5 точек
Камера:2 MPix - основная, 0.3 MPix - фронтальная 5 MPix (автофокус) - основная, 0.3 MPix - фронтальная
Количество SIM:  2 (mini-SIM), simlock 1 (mini-SIM), simlock
Стандарты и диапазоны:GSM 850/900/1800/1900 MHz, UMTS 900/2100 MHz, FDD 1/3/7/20 GSM 850/900/1800/1900 MHz, UMTS 900/2100 MHz, LTE B3/B7/B20
Навигация:Модуль GPS GPS; ГЛОНАСС; A-GPS
Беспроводные технологии:Bluetooth 4.0, Wi-Fi 802.11 a/b/g/n (2.4/5 ГГц)  Bluetooth 4.0, Wi-Fi 802.11 a/b/g/n (2.4/5 ГГц) 
Дополнительно:FM–радио, зарядка через разъем Micro-USB FM–радио, зарядка через разъем Micro-USB
Батарея:3200 мА·ч, Li-Ion, 3.7V 3500 мА·ч
Габаритные размеры:188x108x10,8 мм. 188.5x108.4x10 мм.
Вес: около 290 гр. 290 гр.
Доступные цвета: черный черный
Официальный сайт оператора:Планшет Oysters T74HMi LTE + опция "Интернет Планшет S"  Планшет MegaFon Login 4 LTE + тарифная опция "Интернет Планшет S"
Цена: 3990 руб. (по акции), 8000 руб. (без акции)  4990 руб. (по акции), 6490 руб. (без акции)

Как видно, разница между устройствами не такая уж и существенная, от наличия второго слота для SIM-карт для среднестатистического пользователя все равно по большому счету ничего не меняется, т.к. оба слота simlock, т.е. по-умолчанию работа устройства в сети подвижной связи гарантируется только с SIM-картой сети Мегафон, о чем нам и повествует надпись на коробке.

Забегая вперед скажу что устройство бюджетное, поэтому ждать от него многого не стоит, тем не менее для выполнения большинства повседневных задач его должно хватить, ну а более детально я постараюсь рассмотреть все эти моменты ниже. Начнем как обычно с упаковки, комплектации и внешнего вида. На вид коробка в которой поставляется в планшет достаточно дешевая, т.е. в таких коробках поставляются к примеру запчасти для OEM-производителей и т.п., но никак не продукт ориентированный на массового потребителя. Впрочем, не будем забывать о цене устройства и его сегменте (прежде всего помним, что это бюджетная модель, сравнивать черный цвет Oysters T74HMi 4G и черный цвет black onyx нового iPhone 7, пожалуй я тоже не буду, это излишне ;)

Комплектация минимальная:


Планшет, зарядное устройство, micro-USB шнур, руководство пользователя и SIM-карта, если же конечно вы ее брали.



По внешнем виду - тоже ничего необычного, "стандарт". Наэкранные кнопки управления (меню, домой, назад) расположены снизу экрана, сверху динамик и фронтальная камера, кнопки включения питания и качелька управления громкостью на правой кромке. Здесь правда нужно отметить что когда берешь этот планшет в руки, все в нем подчеркивает бюджетность (почему-то с другими бюджетками у меня такого ощущения не возникало) ... я попытался понять почему, т.к. вроде и такой же пластик, дешевенький, но не противный на ощупь, все такое же, но ощущение каких-то "недоделок" не покидало меня. И вот почему. Когда включаешь планшет кажется что изображение находится где-то "в глубине" под толстым слоем стекла. Для примера вы можете взять смартфон или планшет с хорошим разрешением экрана, накрыть его миллиметровым или двух- оргстеклом и попытаться посмотреть на него сверху. Представили? Вот как-то так и в Oysters T74HMi 4G. Изображение хорошее, яркое, для разрешения экрана в 1024x600 точек и IPS матрицы - вполне на уровне. Но если посмотреть на края экрана, особенно под углом - кажется что смотришь "под стекло" и это немного отталкивает (отчасти этот эффект еще был вызван наклеенной транспортной пленкой, когда ее снимаешь он становится значительно меньше). Второй момент которые виден на фото выше - это качество сборки. Когда я попытался снять крышку отсека для установки SIM-карт - удалось мне это сделать с трудом, зато вместе с моим усилием направленным на снятие крышки задняя стенка, которая вообщем-то предусмотрена несъемной (ну защелкнута она там на клипсы, но пользователь снимать ее не должен) вдруг тоже подалась в направлении приложения и силы и стала открываться. Т.е. крышка отсека для установки SIM-карт осталась неподвижной, а задняя стенка чуть не снялась полностью. На фото все это видно.


На этих двух фото я попытался показать вам "глубину стекла" и эффект "аквариума" при взгляде на края экрана, но как раз это получилось не очень, т.е. фото не передает этих ощущений (как я уже и говорил, и еще раз повторюсь, после отклеивания транспортной пленки этот эффект уменьшается). Зато на них видно что экран яркий и на нем все достаточно хорошо видно. К слову об экране. Запас по яркости у него приличный, а углы обзора достойные, так что если закрыть глаза на некоторую зернистость изображения (все-таки 1024x600) для просмотра фильмов или онлайн ТВ в дороге устройство вполне подойдет.

Вот несколько скриншотов интерфейса, на котором видны установленные приложения, доступное пользователю количество свободной памяти (все скриншоты сделаны сразу после включения планшета без установки каких-либо приложений), а также некоторые меню и информация об устройстве:




Здесь же видны и результаты тестирования Antutu Benchmark v6.2.1, итого если подвести краткий итог по скриншотам выше - действительно Android 6.0 с установленными обновлениями безопасности от 1 июня 2016 г., 17343 очка в Antutu, что вполне ожидаемо для MT8735 и ~3.93 Gb доступного пользователю объема памяти. Не забывая о том что Android M поддерживает такую функцию как Adoptable Storage, естественно я решил проверить как она работает в Oysters T74HMi 4G:


Все оказалось стандартно, единственное, после установки microSD планшет автоматически предлагает только выбрать ее в качестве основного устройства для хранения данных. Диалогового окна с вопросом о том каким образом мы хотим использовать SD, как внутреннюю память или как внешнюю SD не возникает. Для того чтобы отформатировать SD как внутреннюю память нужно зайти в ее настройки и выбрать этот пункт в контекстном меню вручную. Ну а далее все стандартно, после форматирования SD как внутренней памяти нам будет автоматически предложено перенести на нее имеющиеся приложения (здесь имейте ввиду что из-за специфики ОС Android полностью перенести приложения на SD нельзя, т.е. часть их все равно останется во внутренней памяти). Для того чтобы вы лучше воспринимали как распределяется память в планшете, т.е. какой процент от приложения хранится во внутренней памяти устройства, а какой на SD отформатированной как внутренняя память (adoptable storage) я решил провести небольшой эксперимент и установить два ресурсоемких приложения: WOT Blitz и Hearth Stone, вот что из этого получилось (скриншот распределения памяти до установки см. выше).


Здесь надо сказать что распаковка ресурсов WOT Blitz на microSD шла неприлично долго, я поймал себя на мысли что оно уже распаковывается более получаса в тот момент когда прогресс распаковки приблизился к 35%. После чего (на отметке в 35%) я запустил секундомер, чтобы хотя бы примерно оценить затраченное на установку игры время. Распаковка от 35% до 42% заняла аж 11 минут, а до 100% - 29 минут. Отчасти это связано с тем, что Sandisk'овская SD установленная в планшет по факту оказалась не такой уж и быстрой. Т.к. внутренней памяти устройства в любом случае не хватит на установку пары-тройки объемных игр, будьте готовы к тому что процесс установки очередного 3D-хита может занять у вас довольно продолжительное время.


Честно говоря я не стал ждать первого запуска Hearthstone, поэтому скриншот выше демонстрирует состояние памяти после скачивания 1.05 Gb контента из Google Play. На левом скриншоте мы видим распределение памяти после установки и запуска WOT, на правом у нас просто добавился скачанный Hearthstone.

Как видно - при установке нескольких "тяжеловесных" приложений место во внутренней памяти устройства расходуется незначительно, так что выгода от Android M и Adoptable Storage очевидна. Единственным минусом здесь (при форматировании SD как внутренней памяти) будет невозможность ее использования в ПК и других устройствах. Т.е. отформатировав SD как внутреннюю память вы не сможете вставить ее в картридер, чтобы, например скопировать фотки, так как в этом случае раздел на ней будет уже не FAT32, а зашифрованный ext4 раздел (кому интересно не так давно я писал как расшифровать содержимое такой SD).


Теперь настало время вставить SIM в планшет и протестировать скорость соединения (понятно что этот параметр субъективен и зависит от местности в которой проводится тестирование, качества покрытия оператора, плотности окружающей застройки и т.п.), но тем неменее без него обзор не был бы полноценным.


Первый скриншот - это SMS уведомления, которые пришли от Мегафон, сразу же после установки SIM-карты, а также результат проверки остатков пакета. Видимо "стоимость SIM-карты в 200 руб." объявленная сотрудниками салона включала в себя 50 руб. за SIM и 150 руб. на баланс номера. Второй - это тест скорости WiFi, третий - тест 4G. Как я уже и говорил, данная информация (11.97 Mbps / 8.09 Mbps) является достаточно субъективной и в другом месте (на другой БС) планшет возможно показал бы и лучшие результаты, но даже достигнутого результата вполне достаточно для просмотра онлайн-видео, закачки "тяжеловесного" контента и т.п. - LTE работает.

Также я установил из Google Play приложение GPS Test для оценки качества GPS приемника:


Не знаю какие погрешности будет выдавать девайс в процессе реального использования в качестве навигатора, но результатами "синтетического теста" я вполне удовлетворен. Планшет практически моментально нашел спутники и определил свое местоположение, при этом, как вы можете видеть на последнем скриншоте - In Use (в использовании) получилось целых 16 спутников.

Пример фото на основную камеру 1600 x 1200  Pixels (1.92 MPixels) (4:3):


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

Если подвести краткое резюме, то Oysters T74HMi 4G это:
  • Все же достаточно неплохое и производительное бюджетное устройство, если рассматривать его в категории до 4000 руб. (т.е. если принимать в расчет именно акционную цену без учета затрат на услги связи). Если же рассматривать заявленную полную стоимость устройства - 8000 руб., то за эти деньги однозначно "нет".
  • Хорошо зарекомендовавший себя в бюджетных системах чип от Mediatek MT8735W (аналог MT6735 для планшетов) и 1 Gb RAM дает неплохую для данной категории устройств производительность в играх и 3D-приложениях, т.е. устройство вполне подойдет в качестве подарка ребенку (который "не жалко", если его случайно уронить и т.д. и т.п.) ... 
  • Поддержка функции Adoptable Storage в Android 6.0 Marshmallow в большинстве случаев поможет решить проблемы с нехваткой свободной собственной памяти устройства, при условии если вы отформатируете SD как внутреннюю память (сделать это лучше сразу, до установки всех приложений).
  • Наличие 4G и двух слотов для SIM-карт можно считать дополнительным плюсом, однако, simlock, т.е. изначальная настройка устройства на использование только с SIM-картами Мегафон немного портит картину (кстати, в устройстве предусмотрена штатная возможность разблокировки, при помощи ввода кода разблокировки сети).
  • IPS матрица имеет достаточный запас по яркости и неплохие углы обзора (что несомненно плюс), однако, малое разрешение экрана и бюджетный модуль дисплея сказываются на качестве изображения, требовательный пользователь наверняка заметит некоторую зернистость. В целом же, если учитывать стоимость девайса, то экран в T74HMi скорее можно похвалить чем поругать.
  • Звук ... если вы до этого подумали что я перечисляю только относительные плюсы - то теперь пойдут минусы. Громкость встроенного динамика достаточна чтобы нормально не прислушиваясь (с вывернутым регулятором громкости на максимум) смотреть ролики на YouTube или онлайн ТВ в закрытом помещении (в квартире, на даче и т.п.) ... Где-нибудь на улице или в дороге, если вы не используете наушники, окружающий шум сможет заглушить динамик планшета и вы рискуете ничего не услышать. Разговорный динамик (т.е. тот который предназначен для звонков / голосовой связи) в моем экземпляре оказался отвратительным. Абонента на другом конце линии вообще не было слышно, даже помещении с идеальной тишиной. Т.е. я разбирал что мне говорят через слово, а то и через два. Использовать разговорный динамик по прямому назначению у меня, увы, не получилось. Поэтому и вам рекомендую на это не рассчитывать, либо же проверить качество голосовой связи непосредственно в салоне, перед покупкой устройства. При разговоре через гарнитуру - таких проблем нет. 
Рекомендовать же Oysters T74HMi к покупке или нет - однозначно ответить сложно. Аудитория изначально заинтересованная в покупке бюджетного устройства вполне может найти его привлекательным (если сравнивать T74HMi с другими моделями представленными в Мегафоне, то он однозначно лучше чем "планшет для водителя" T72HM, и примерно такой же по характеристикам, как более дорогой Login 4), те же пользователи у которых бюджет / цели / задачи позволяют приобрести более дорогую модель - не обратят на него внимания в принципе. В любом случае предложение от Мегафона в качестве "готового решения" - планшет + интернет для него найдет своих потребителей.

p.s. Если у вас есть вопросы, замечания, предложения - буду рад видеть их в комментариях. Также я постараюсь в ближайшее время написать еще один пост посвященный Oysters T74HMi 4G в который войдут какие-то моменты не вошедшие в этот обзор (возможно на основе ваших вопросов и комментариев), а также "по традиции" постараемся осветить вопросы прошивки кастомного recovery (TWRP), получения root, секретных кодов dialer'а и т.п. Ну а на этом пока все ... stay tuned ...

Обновлено 25.09.2016 09:04 (MSK)

Небольшая статистика по HearthStone ... после закачки игры процесс ее первичной инициализации, т.е. распаковка ресурсов, занимает примерно 8 минут. После появления главного меню от нажатия кнопки запуска игры до, собственно, начала игрового процесса проходит примерно секунд 40. Т.е. в принципе играть на нем в HearthStone вполне можно. На всякий случай скриншот распределения памяти при установленных WOT Blitz и Hearthstone:

Как видно, игра распаковала часть своих ресурсов на внутренний накопитель устройства. Т.е. до установки, просто после скачивания, у нас было занято 0.89 Gb на внутреннем накопителе и 4.64 Gb на SD-карте, отформатированной как Adoptable Storage. После установки, объем занятого места на внутреннем накопителе увеличился до 1.92 Gb, а на SD до 6.17 Gb. Но это уже специфика самого приложения HearthStone, а не устройства. Т.к. его разработчики посчитали что для нормальной работы приложения часть ресурсов должна в любом случае располагаться во внутренней памяти устройства, которая по скорости чтения / записи данных быстрее большинства microSD флешек.

Тем не менее, даже при занятых 1.92 Gb на внутреннем накопителе в планшет возможно установить еще не одну игру, при этом объем используемой каждым приложением памяти на внутреннем накопителе будет минимальным, т.к. основной контент будет размещаться на microSD.

Краткий FAQ по устройству (будет обновляться по мере возникновения вопросов)

Q. Есть ли OTG в Oysters T74HMi 4G?
A. Да, OTG есть, подключенная USB мышь отлично заработала:


Q. Возможна ли установка кастомного recovery (TWRP) на этот девайс?
A. А почему нет? TWRP для него вполне можно собрать на базе исходников OmniROM, что я успешно и сделал:


Для интересующихся вот дерево устройства oysters_t74hmi_4g_device_tree для сборки TWRP. Бинарник и инструкции по прошивке пока не выкладываю, желающие могут собрать TWRP самостоятельно на базе выложенного дерева самостоятельно.

Q. А что по-поводу root? 
A. По-поводу root все стандартно, если у вас есть установленный TWRP, то root-права можно получить прошивкой последнего zip'а с SuperSU с chainfire.eu , несколько скриншотов в качестве proof'а:


Q. А не могли бы вы выложить образ вашего TWRP и инструкцию по его прошивке?
A. Пока я не принял такого решения, если когда-нибудь я решу выложить свои наработки, то вы увидите их в этом или отдельном посте посвященном конкретно TWRP и root для Oysters T74HMi 4G. Как быстро это произойдет (и произойдет ли вообще) зависит от интереса пользователей к проекту и проявленной ими активности. Возможно кто-то соберет вам TWRP быстрее, тем более что свой вклад в community я уже сделал, выложив дерево для этого девайса на GitHub.

Q. А есть ли какие-то секретные коды Dialer'а для этого устройства? Инженерное меню или еще что-нибудь?
A. Есть конечно. Ну во-первых это стандартное инженерное меню Mediatek, которое вызывается при наборе комбинации *#*#3646633#*#* (если вам лень запоминать эту комбинацию, то можно установить удобное приложение-меню для быстрого доступа из Google Play - Debug Menu Access) или *#*#29305652#*#*. Во-вторых это меню различных hardware тестов от производителя, которое можно вызвать набрав *#*#35465#*#*, выглядит оно так, как показано на скриншоте справа. Т.е. еще перед покупкой вы можете проверить исправность отдельных компонентов устройства. Отдельное внимание я бы уделил пункту Audio Check в котором можно проверить громкость разговорного динамика (receiver) и громкость внешнего динамика - speaker (забавно, но для проверки громкости в этом тесте используется фрагмент композиции Максим "Знаешь ли ты?", видимо в Oysters её любят ;) Также можно проверить дисплей, тач, вспышку / фонарик и т.п. Ну и в качестве совета - если с тестами все более-менее понятно, то вот различными опциями в инженерном меню я бы злоупотреблять не рекомендовал (оно ведь не зря называется инженерным), т.к. изменение каких-либо параметров смысл которых вы представляете себе не вполне отчетливо может привести к некорректной / нестабильной работе устройства в целом.

Q. А сколько держит батарея?
A. Вот здесь приведен пример теста при интенсивной нагрузке - Oysters T74HMi LTE и Мегафон TV. Тест батареи. В режиме просмотра онлайн ТВ через 4G/LTE приблизительно получается 2 часа и 10 минут до полного разряда.

четверг, 22 сентября 2016 г.

Teeworlds. Собираем под Windows из исходников.

Дело было вечером, делать было нечего ... ;) Началась эта история с того, что один из участников нашего сообщества @kolobus рассказал мне об игре Teeworlds. Для тех кто не в курсе - это такая "ретро" мультиплеерная стрелялка. По первым скриншотам она мне почему-то напомнила червяков, но, как оказалось, геймплей намного динамичнее и фактически это просто неплохой action. Нормальный человек бы посвятил первое знакомство с игрой непосредственно процессу, но меня почему-то зацепило другое. В разделе Downloads на официальном сайте игры я увидел версии для Win32 и Linux 64-bit'а (речь идет о последней на данной момент версии 0.6.3), однако, релиза 0.6.3 для Win64 почему-то не было. Хотя на сайте говорится что как раз в версии сервера 0.6.3 пофикшена уязвимость сервера. Вообщем не долго думая я решил разобраться, а как собрать всё это из исходников, чтобы заполучить бинарники клиента и сервера под Windows 64. В принципе получилось довольно быстро.

Первое что необходимо сделать - это прочитать мануал по сборке, благо разработчики все достаточно подробно описали - Compiling Teeworlds. Ставим Python 2.7, git (в любом случае он будет полезен) и MSVC 2013. Как говорится в мануале плюсом ко всему нам потребуется bam - https://github.com/matricks/bam , однако на Git'е последняя версия -  0.5, а сборочный скрипт bam.lua от игры требует версию 0.4. Ок ... качаем исходники bam-0.4.0 и слегка правим скрипты make_win32_msvc.bat и make_win64_msvc.bat добавляя туда поддержку современных компиляторов. Например для x64:

@echo off

@REM Check for Visual Studio
call set "VSPATH="
if defined VS140COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS140COMNTOOLS%%"
) )
if defined VS120COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS120COMNTOOLS%%"
) )
if defined VS110COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS110COMNTOOLS%%"
) )
if defined VS100COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS100COMNTOOLS%%"
) )
if defined VS90COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS90COMNTOOLS%%"
) )
if defined VS80COMNTOOLS ( if not defined VSPATH (
 call set "VSPATH=%%VS80COMNTOOLS%%"
) )

@REM check if we already have the tools in the environment
if exist "%VCINSTALLDIR%" (
 goto compile
)

if not defined VSPATH (
 echo You need Microsoft Visual Studio 8, 9, 10, 11, 12, 13 or 15 installed
 pause
 exit
)

@REM set up the environment
if exist "%VSPATH%..\..\vc\vcvarsall.bat" (
 call "%%VSPATH%%..\..\vc\vcvarsall.bat" amd64
 goto compile
)

echo Unable to set up the environment
pause
exit

:compile

Для x86 в принципе все то же самое, только вместо vcvarsall.bat нужно использовать vsvars32.bat. Скрипты для сборки bam'а можно посмотреть в Git'е для 0.5.0. В итоге у нас собирается bam.exe ... отлично ... Далее качаем исходники самой Teeworlds - teeworlds-0.6.3-src.zip и распаковываем в отдельную папку. Создаем build.cmd следующего вида (шапка для поддержки компиляторов выше), а затем следующие строки:
cd teeworlds-0.6.3-src
..\bam-0.4.0\bam -c all
..\bam-0.4.0\bam client_release
..\bam-0.4.0\bam server_release
После чего запускаем компиляцию и получаем несколько ошибок в результате, которые касаются функции round. Исправить их довольно просто:

  • Открываем в исходниках Teeworlds заголовочный файл src/base/math.h и ищем там определение функции round - inline int round(float f), заменяем round на roundmy, так чтобы получилось так - inline int roundmy(float f).
  • Затем открываем \src\game\editor\layer_tiles.cpp и ищем в нем метод void CLayerTiles::BrushRotate(float Amount), в нем мы видим вызов  int Rotation = (round(360.0f*Amount/(pi*2))/90)%4; - заменяем его на вызов roundmy, т.е. в итоге у нас получается строка: int Rotation = (roundmy(360.0f*Amount/(pi*2))/90)%4;

Всё, на этом предварительная подготовка исходников закончена. Собираем и получаем бинарники (если вы проводите сборку под Win64, то bam по всей видимости нужно собирать 64-битным, если под Win32, то 32-х).

Ну а кого просто интересует конечный результат, т.е. готовые бинарники клиента и сервера Teeworlds 0.6.3 для Windows 64-bit, то вот они - teeworlds-0.6.3-win64.7z .

Обновлено 22.09.2016 02:51 (MSK)

Да, ну и обнаружив официальный репозиторий teeworlds на GitHub'е - https://github.com/teeworlds/teeworlds я не мог пройти мимо чтобы не попробовать собрать последнюю 0.7 trunk :


Все получилось, единственное, что при сборке использовался уже свежий bam 0.5.0 и более свежая версия SDL 2.0.4 (stable). Результат, а именно бинарники Teeworlds 0.7 trunk можно забрать тут:


В сборку включены стандартные карты, файлы языковых переводов и т.п., а также клиент и сервер. Единственное о чем следует помнить - публичных серверов на версии 0.7 пока не так много и играть вы сможете только на тех серверах у кого он собран c той же GAME_NETVERSION_HASH, у этой сборки он равен "8743be4f24dc7e35".