Другие консоли: Samsung Galaxy Ace,Samsung Galaxy Tab 10.1 GT-I7510, Nokia Lumia 625, Nokia Lumia 1020
Регистрация: 13.05.2006
Адрес: Москва
Возраст: 36
Сообщений: 5,711
Вы сказали Спасибо: 302
Поблагодарили 542 раз(а) в 368 сообщениях
Сила репутации: 1
Репутация: 550 
(очень-очень хороший человек)
Итак, начнем...
Инструментарий
Нам понадобиться следующие программы:
1. Apk Manager(скачать можно здесь).
2. Любой текстовый редактор(сгодится и виндовый блокнот).
3. Ida Pro 5.5(можно найти в инете, на трекерах).
4. Любой шестнадцатеричный редактор(наприер, UltraEdit).
Теперь давайте задумаемся, что представляет собой оптимизация игры под экраны HVGA/QVGA?
Ее можно разделить на несколько этапов. Основные:
Отключение проверки кеша(необходимо для того чтоб можно было переконвертировать вступительный ролик меньшее разрешение).
Назначение аппаратной кнопки, на какое-либо действие(необходимо для телефонов без мультитача).
Прежде чем приступить к какому-либо этапу оптимизации, нам необходимо добраться до исходного кода программы, оригинальный исходный код мы разумеется не получим, но можем получить JAVA-байт код, чего вполне для нашей задачи будет достаточно. Для этого мы будем использовать "Apk Manager".
Установка и работа с "Apk Manager".
В установке нет ничего сложного, просто разархивируйте его в любую папку. Также рекомендую в файле Script.bat, находящемуся в папке с "Apk Manager", изменить "set heapy=64" на большее значение, например на 256 или 512, для предотвращение проблем с большими апк-файлами.
Работа с "Apk Manager" тоже не представляет сложностей. Необходимый апк-файл кладем в папку "place-apk-here-for-modding", запускаем "Script.bat" и в появившемся окне, с зеленным текстом, жмем "9" и "Enter". Менее чем через минуту, в папке "projects" получаем распакованный апк-файл. Запаковываем аналогично, запускаем "Script.bat", жмем "11", "Enter", на вопрос "является ли апк системным?", жмем "n". И в конце, когда апк-файл запакован, подписываем его, для этого жмем "12" и "Enter". В итоге получаем в папке "place-apk-here-for-modding" файл с именем signed[имя оригинального апк-файла].apk. Дополнительно про "Apk manager" можно почитать здесь.
Далее по-тексту jписание процесса распаковки/запаковки апк-файлов.
Также прежде чем начинать, рекомендуем сначала просмотреть список команд JAVA-байт кода.
Теперь можно преступить непосредственно к оптимизации, для примера будем использовать игру "Modern Combat: Sandstorm".
Смена разрешения рендеринга на HVGA/QVGA.
Большинство игр под андроид, пишется с использованием OpenGL, в OpenGL разрешение задается функцией "glViewPort", ее и будем использовать. Наиболее оптимальным, функцию "glViewPort" размещать в функции "OnDrawFrame". Для этого, с помощью поиска, в папке "smali", которая находится в папке с распакованым апк-файлом, ищем файл, содержащий функцию "OnDrawFrame". Обычно этот файл имеет имя "GameRenderer.smali" или "[Название игры]Renderer.smali", в нашем случае это "SandstormRenderer.smali". Открываем его в блокноте, или другом текстовом редакторе, и находим в нем функцию "OnDrawFrame".
Вот фрагмент этой функции.
Мы добавили 3 константы(v6,v7,v8), присвоили им значение координат левого нижнего(v6;v6) и правого верхнего(v8;v7) угла экрана и передали их в функцию "glViewport". Я думаю понятно, почему для координат левого нижнего угла и для X и для Y используется одна и также константа v6? Так как и X и Y в этом углу равны между собой. Кроме этого изменяем 2-ю строчку в функции ".locals 6" на ".locals 9", это определяет количество констант/переменных используемых в функции, так как мы добавили 3 константы, то 6+3=9. Также обратите внимание, что имена констант (v6,v7,v8), не берутся случайно, а выбираются ориентируясь на уже используемые в функции константы. Если вдруг кто не понял, 0x1E0 в десятичном будет 480, а 0x140 - 320.
Также обратим внимание на функцию "onSurfaceCreated".
Мы добавили 3 константы(v6,v7,v8), присвоили им значение координат левого нижнего(v6;v6) и правого верхнего(v8;v7) угла экрана и передали их в функцию "glViewport". Я думаю понятно, почему для координат левого нижнего угла и для X и для Y используется одна и также константа v6? Так как и X и Y в этом углу равны между собой. Кроме этого изменяем 2-ю строчку в функции ".locals 6" на ".locals 9", это определяет количество констант/переменных используемых в функции, так как мы добавили 3 константы, то 6+3=9. Также обратите внимание, что имена констант (v6,v7,v8), не берутся случайно, а выбираются ориентируясь на уже используемые в функции константы. Если вдруг кто не понял, 0x1E0 в десятичном будет 480, а 0x140 - 320.
Также обратим внимание на функцию "onSurfaceCreated".
В этом коде переменным v3 и v4 присваивается реальное разрешение экрана устройства и передается функции "nativeInit". Так как игра все-таки рассчитана под разрешение 480х800, лучше чтоб игра думала что у вас устройство именно с таким разрешением. по-этому этот код заменяем на
const/16 v3, 0x320
const/16 v4, 0x1E0
Если этого не сделать могут возникнуть проблемы.
(Можно задать и 480х720, т.к. пропорции у экранов с 480х800 и 320х480 разные и при "сжатии" картинка будет немного сплюснута. Но в этом случае, на этапе "Корректировка координатной сетки сенсорного экрана", коэффициент необходимо будет считать не от 800, а от 720 и будет он не 1,666666666666667, а 720/480=1,5)
Примечание
В других играх вместо этого кода, может быть что-то наподобие этого
Или имена переменных быть не v3, v4 а v1, v2. Или вообще ничего подобного не быть, тогда и менять ничего не нужно .
Или если возникают проблемы, то можно на всякий случай пройтись поиском по всем "*.smali" файлам и позаменять все вызовы функций "Landroid/view/Display;->getWidth()I" и "Landroid/view/Display;->getHeight()I", хуже от этого не будет.
Для некоторых игр, проделанной нами работы достаточно и они благополучно меняют разрешения всей графики на необходимое. Для этого снова запаковываем апк-файл и проверяем на телефоне как он работает. Если все удачно то переходим к пункту "Корректировка координатной сетки сенсорного экрана". Если нет то читаем дальше. В нашем случае, с игрой Modern Combat: Sandstorm, не все гладко, игровая графика смаштабировалась до необходимого разрешения, а меню - нет. Это значит, что где-то вызывается функция "glViewPort", и снова меняет разрешение на 480х800. Так-как в файлах "*.smali" функция "glViewPort" не вызывается, можно проверить с помощью поиска, следовательно дело в библиотеке "libsandstorm.so".
Основная идея следующего шага, удалить с библиотеке все вызовы функции "glViewPort".
Для анализа библиотеки нам понадобится "Ida Pro". Для удобства копируем "libsandstorm.so" в любую папку, запускаем "Ida Pro" и жмем на кнопку "New"
Далее выбераем "Various files", "Unknown file" и жмем "Ок".
В окне открытия файла указываем путь к библиотеке "libsandstorm.so" и жмем "Открыть".
В следующем окне изменяем "Processor type" на "ARM processorARM710a", далее жмем "Set" и "Ок".
Если после этого, появятся еще окна с чем либо, жмем "Ок". Теперь необходимо дождаться окончания дизассемблирования. Процесс этот достаточно долгий, по-этому можно пойти покурить или попить кофе
О том что дизассемблирования закончено, укажет сообщение "The initial autoanalysis has been finished." в нижнем окне "Output window".
Для большего удобства, в нашем случае, кликаем правой кнопкой мышки по голубой области, и в контекстном меню выбираем "Text view". Перемещаемся в самое начало ассемблерного кода, для осуществление поиска "glViewPort".
Жмем комбинацию клавиш "Alt+T" и в появившемся диалоге для поиска вводим "glViewPort" и жмем "Ок".
Нас интересуют вызовы функций "BLX glViewport", "BL glViewport", "B glViewport", "BX glViewport" и т. д. Любые другие упоминания о "glViewport" мы игнорируем, жмакаем "Ctrl+T" и продолжаем поиск.
Найдя необходимое место, переключаемся на "Hex View-A".
Удостоверяемся, что вызов функции занимает 4 байта и это "CE F7 D4 E8"(в вашем случае эти цифры могут быть другими), это необходимо для того чтоб видеть что нужно исправлять и не затереть случайно ничего лишнего.
Вызов этой функции нам необходимо выпилить, для этого нужно заменить "CE F7 D4 E8"(в вашем случае эти цифры могут быть другими) на "C0 46 С0 46"(Внимание!!! на "C0 46 С0 46" заменяем только в том случае, если в библиотеке используются инструкции Thumb, если используются только ARM инструкции - заменять необходимо на "00 00 A0 E1". Проверить какие используются инструкции достаточно просто. Посмотрите ближайшие инструкции в HEX виде, если среди них есть 2-х байтовые - значит используются инструкции Thumb, если все 4-х байтовые - значит ARM."). Запоминаем адрес "001F994A" и запускаем шестнадцатеричный редактор, я использую "UltraEdit". Открываем в нем нашу библиотеку.
Для того чтоб переместится по нужному нам адресу, жмем "Ctrl+G", в появившееся окно вводит "0x001F994A" и жмем "Ок".
Переместившись мы видим, что попали туда, куда нужно, весь шестнадцатеричный код сходится с тем что мы видели в "Ida Pro" на вкладке "Hex View-A".
Исправляем "CE F7 D4 E8" на "C0 46 С0 46".
Если вы ищите какую-то игру для андроида, то можете написать запрос Т У Т, а если программу, тогда пишите запрос Т У Т
Народ! Помогите пожалуйста с проблемкой! У меня аппарат zopo C2 android 4.2.1 При попытке вставить изображение в ММС картинка обрезается до 20 Кб! При этом естественно теряется все качество! Как отключить это сжатие?
Другие консоли: Samsung Galaxy Ace,Samsung Galaxy Tab 10.1 GT-I7510, Nokia Lumia 625, Nokia Lumia 1020
Регистрация: 13.05.2006
Адрес: Москва
Возраст: 36
Сообщений: 5,711
Вы сказали Спасибо: 302
Поблагодарили 542 раз(а) в 368 сообщениях
Сила репутации: 1
Репутация: 550 
(очень-очень хороший человек)
SAGA, на сколько помню, для MMC это нормально. Оно всегда сжимала рисунки. Не проще ли фотку отправить по мылу? Ведь встроенный клиент есть и интернет есть. MMC сейчас ни кто и не пользуется скорее всего.
А так посмотрю, есть ли возможность такая, просто с ММС ни когда и не работал на андроиде.
Если вы ищите какую-то игру для андроида, то можете написать запрос Т У Т, а если программу, тогда пишите запрос Т У Т
DeAmouSE, Безусловно проще ))) есть масса прог, агентов, скайп, вассап и тд. Но сложнее для родной тетки которая знает ММС и не знает интернет ))) В целом с ммс никаких проблем, то есть видео зажимает и отправляет на полноценных 300 кб, а вот с фото, где детализация важнее, как то сложно. И к слову, уже сменил множество устройств андроид, а вот с ммс столкнулся только сейчас (((
DeAmouSE, все это установлено, и максимальный размер указан 300 кб ((( Тут походу пач какой то нужен, немного в инете смотрел вплоть до вшивания какой то инфы. Уже чес говоря и ММС не столько волнует сколько столь печально сложившиеся обстоятельства и невозможность понять что к чему
Другие консоли: DS Lite(R4), Wii, GameCube, PS2(FreeMCBoot)
Регистрация: 08.11.2012
Адрес: Вятка
Сообщений: 249
Вы сказали Спасибо: 46
Поблагодарили 63 раз(а) в 33 сообщениях
Сила репутации: 1
Репутация: 63 
(скоро придёт к известности)
Ребят очень нужна помощь.помогите поставить battlefield bad company 2 на Xperia E. Год назад на хперии тайпо игра шла на ура, а на Е которая мощнее ни в какую(( все что есть на 4пда все пробовал и ничего( уж очень нравится игра,помогите чем можете
SILENT-Pavel, для этого нужен пк, установленные на нем adb утилиты и программа APKTool. С помощью нее можно распаковать apk, внести изменения и собрать.
всем привет) прошу помощи. на sony xperia j не хочет работать проводная гарнитура с тремя кнопками, гарнитура рабочая на macbook работает, на nexus тоже. разъем на телефоне рабочий, обычные наушники работают. до этого была гарнитура с одной клавишей - работала. прошивка официальная jelly bean. до этого ice cream кастом, тоже не работала. поэтому и прошил на обновленный стандарт
Другие консоли: Samsung Galaxy Ace,Samsung Galaxy Tab 10.1 GT-I7510, Nokia Lumia 625, Nokia Lumia 1020
Регистрация: 13.05.2006
Адрес: Москва
Возраст: 36
Сообщений: 5,711
Вы сказали Спасибо: 302
Поблагодарили 542 раз(а) в 368 сообщениях
Сила репутации: 1
Репутация: 550 
(очень-очень хороший человек)
Не надо кидать сюда.
Зайти в нужный раздел на форуме. И там уже создавать тему с игрой, оформив её по шаблону, который указан в разделе. Да и вы уже я смотрю, создали тему которая находится тут. Зачем тут писать про свою игру?
Если вы ищите какую-то игру для андроида, то можете написать запрос Т У Т, а если программу, тогда пишите запрос Т У Т
Помогите! Lenovo A3500 FL. Выдали корпоративный. Заточен под одну wi-fi сеть. На экране 2 ссылки - Хром и их фирменная звонилка voip. Рекавери TWRP как то так, кастомная в общем. Прошивка 4.4.2 Нельзя даже левый wi-fi подключить, только в офисе. Вопрос: Как разблокировать все функции и при этом чтобы внешне он был как положено 2 проги и писец. Я два дня с андройдом знаком. Спасибо заранее !
CHICAGO добавил 30.08.2015 в 17:04
Форум жив?!
Последний раз редактировалось CHICAGO; 30.08.2015 в 17:04.
Причина: добавил, подумав