как переписать код игры на телефоне

Модификация исходного кода android-приложения с использованием apk-файла

Так уж получилось, что приложение для чтения комиксов и манги, которое я использую на своем android-смартфоне, после обновления стало показывать рекламу в конце каждой главы комикса. Данное приложение пару лет назад было доступно на Google Play (платная версия которого и была мной куплена), но было удалено в силу «нарушения авторских прав», после чего ушло в подполье и стало распространятся через сайт разработчика. Увы, достойных альтернатив этому приложению на android и iOS я не нашел, но и смотреть рекламу особо не было желания, тем более я уже покупал версию без рекламы. Сам разработчик почему-то не сделал возможности отключить ее, а на просьбы добавить такую возможность не отозвался. Поэтому пришлось искать альтернативные методы ее отключения. Первое, что пришло в голову, это то, что android-приложения пишутся на java, а значит есть вероятность, что автор не обфусцировал свое приложение и его можно попытаться декомпилировать. Немного подумав, я приступил к работе.

Для начала был загружен сам apk-файл приложения. Затем недолгий поиск по интернету привел меня на сайт http://www.decompileandroid.com/. С его помощью можно было загрузить apk-файл с приложением и на выходе получить набор исходников. Увы, декомпиляция в java-классы происходит не совсем идеально и поэтому восстановить полностью сам проект приложения в IDE(Idea) у меня не получилось, но это позволило проанализировать саму структуру проекта и разобраться как он примерно работает. После проведения анализа, было найдено два перспективных метода в классе BaseReaderFragment.javaplaceAdViewIfNeeded и removeAdViewIfNeeded.

Код метода placeAdViewIfNeeded:

Самое простое, что пришло на ум после чтения кода, это убрать все лишнее, и оставить лишь вызов return;

Но, как уже было сказано, даже если бы я изменил в java-классе что-либо, я бы не смог в итоге скомпилировать приложение в IDE. Поэтому пришлось искать альтернативу. Оказалось, что smali-файлы, которые создаются в процессе декомпиляции, позволяют также после внесения нужных изменений, вновь собрать модифицированное приложение. Увы, сайт, что был приведен выше, позволял лишь получать исходники, но не собирать новые. Поэтому пришлось искать способы сделать это самостоятельно.
Была найдена утилита ApkTools, которая позволяла декомпилировать и компилировать apk-файлы. Кроме того, потребовалась утилита aapt.exe, которая была взята мной из стандартного SDK под андроид в папке android-sdk\build-tools\20.0.0.

Для удобства вызова утилиты из под windows был создан скрипт apktool.bat:

Для декомпиляции приложения были выполнены команды:

После чего, в полученных исходниках был найден файл BaseReaderFragment.smali и нужные нам методы были изменены следующим образом:

Далее пришла очередь сборки apk-файла из исходников.

Сделать это можно cледующей командой:

Но это еще не все. Чтобы приложение можно было установить, его нужно было подписать цифровой подписью. Самый простой способ сделать это – это скачать архив в котором находится утилита для подписи приложений и цифровые сертификаты к ней.

Распаковываем архив, выполняем команду:

Полученный apk-файл можно загружать на телефон, чтобы проверить наше модифицированное приложение. Однако в процессе тестирования изменений оказалось, что объявления больше не показываются, однако сама страница для их показа создается, что не очень приятно. Снова был проанализирован код приложения, найден класс BaseSeamlessReaderFragment, а в нем метод appendPages.

В нем было видно, что строчка:

создает дополнительную страницу, помимо тех, что есть в главе манги, с параметром, отвечающим за показ объявлений. Было решено удалить эту строчку и посмотреть результат. Снова заглядываем в аналогичный smali-файл(BaseSeamlessReaderFragment$4) и удаляем строчку:

Снова проводим сборку apk-файла из исходников и подписываем наше приложение. После установки и тестирования приложения экран с рекламой окончательно исчез, что и было конечной целью.

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

Источник

Как вводить чит коды на Андроид – открываем новые возможности игрового мира

Некоторые пользователи, столкнувшись со сложностями в прохождении той или иной игры, используют специальные чит-коды, значительно упрощающие игровой процесс. Однако, если на компьютере введение не вызывает никаких вопросов, то как вводить чит коды на Андроид, если на смартфоне или планшете в игре клавиатура попросту отсутствует?

14570p

Что такое чит-код и для чего он нужен

«Чит» (от англ. cheat) переводится как «жульничество», но, насколько жульническим можно назвать использование чит-кодов? В большинстве видеоигр или играх для ПК эти коды изначально встроены разработчиком и представляют собой определённый набор символов. Делается это для того, чтобы тестировать ПО на стадии разработки. К примеру, воспользовавшись чит-кодом, разработчик не станет проходить все уровни игры, чтобы протестировать последний, а попадёт сразу на нужный уровень.

Другая возможность, которую не предусматривали разработчики – изменение в запущенной игре содержимого памяти, а также данных, хранящих весь объём информации, касающейся прогресса игрока, либо файлов сохранения (конфигурационные файлы). Эта схема существенно сложнее, но она даёт возможность трансформировать переменную игры, либо любой её параметр. Применение таких чит-кодов требует использования специальных программ, отвечающих за какой-то определённый адрес памяти, содержащий нужную информацию о персонаже.

ch3

Как ввести чит код на Андроиде

Ну, если с чит-кодами мы в общих чертах разобрались, то основной вопрос нашей темы пока остаётся открытым. Если для ввода читов, скажем, на ПК мы используем клавиатуру, то как это сделать на устройствах Android?

С помощью стандартной клавиатуры

На самом деле для ввода кодов можно воспользоваться стандартной клавиатурой, сделав возможным её вызов непосредственно в игре. Для этого нам потребуется программа-редактор документов Smart Office 2 (можно скачать прямо на нашем сайте или в Google Play), которую нужно установить на свой аппарат.

Теперь открываем игру, загруженную в память устройства (на скриншоте «Criminal Case», но это может быть любая другая игра), после чего сворачиваем её, сделав свайп и нажав кнопку «home»:

igra 1

Затем запускаем Smart Office 2, нажимаем «Новый документ» и выбираем любой формат документа, к примеру, DOC. Теперь нижней части дисплея нажимаем кнопку «Правка» (на планшетах для этого действия нажимаем, расположенную вверху кнопку «Клавиатура»):

k1

После проделанных действий у нас появится клавиатура, которая не будет убираться, после того, как мы свернём приложение. Нам осталось через диспетчера задач выбрать свою игру. Это можно сделать длительным нажатием на кнопку «Home» или, как на скриншоте (смартфон Huawei Honor 5А), крайнюю правую кнопку в виде квадратика с правой стороны дисплея (см. выше). “Тапаем” по игре и, когда она откроется, мы увидим, что клавиатура осталась на месте:

k41

С помощью стороннего софта (GameKeyboard+)

Не исключено, что описанный выше способ для вашего устройства неактуален, в таком случае можно для ввода чит-кодов воспользоваться приложением “GameKeyboard+”. Это специальная клавиатура, разработанная для современных устройств с ОС Android в целях комфортного управления игровым процессом.

Чтобы использовать эту возможность для введения чит-кодов, скачиваем и устанавливаем GameKeyboard+ на свой Андроид (приложение распространяется на платной основе). Запустив программу, мы видим главную страницу и начинаем действовать согласно представленному руководству.

Первым шагом (нажимаем на поле step 1) выбираем клавиатуру – ставим галочку в строке “Game Keyboard“, откроется окошко, в котором нужно подтвердить выбранное действие (кнопка “Да“):

kb 11

Вторым шагом (step 2) выбираем метод ввода. После того, как мы нажмём строку с третьим шагом (step 3) появится геймпад и другие инструменты управления. В некоторых играх потребуется их настройка (например, чтобы открыть инвентарь в Undertale). Для этого нажимаем кнопку “Usage Mode” и в выпавшем окне ставим галочку в строке “Edit Mode“:

kb 21

Для удаления ненужных кнопок нажимаем поочерёдно на каждую из них, после чего в открывшемся окошке нажимаем кнопку “Remove“. Для завершения действия “тапаем” на строку “tap Top-Right screen corner/Vol-Up…” и в открывшемся меню “Select Action” жмём кнопку “Отмена” (на скриншоте третий фрагмент):

kb 31

Если есть необходимость вызвать только клавиатуру (к примеру, чтобы ввести коды GTA Vice City и др.), то для некоторых моделей устройств достаточно после первого и второго шага (см. скриншот 1 и 2) нажать кнопку “Usage Mode” и поставить галочку в поле “Show Qwerty” (первый фрагмент скриншота см.ниже).

После появления геймпада нам нужно нажать кнопку “Settings” (настройки) и проставить галочки в пунктах:

kb 51

По окончании настройки выходим из Game Keyboard (кнопка «Выход») и запускаем игру. При необходимости вызвать клавиатуру для введения читов используем кнопку «Громкость+»:

igra 3

Если понадобится вызвать геймпад, жмём на его изображение в левом нижнем углу клавиатуры, это действие откроет наэкранную крестовину (т.е. клавиши курсора), а также левую и правую кнопки мыши (кнопки «А» и «В»). Для возврата в режим клавиатуры – кнопка «Х». Нажатие кнопки «назад» на смартфоне полностью уберёт клавиатуру (или геймпад).

В настройках можно, поставив галочку, сделать клавиатуру полупрозрачной, изменить конфигурацию и размер геймпада.

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

Надеемся, что представленные хак-инструменты помогли вам в решении вопроса, как вводить читы на Андроид. Напоминаем, что будем благодарны, если кто-то поделится с нашими читателями своим способом, отличным от описанных. Удачи!

Источник

Разработка игры под Android на Python на базе Kivy. От А до Я: подводные камни и неочевидные решения. Часть 1

Некоторое время тому назад я решил попробовать написать что-то на Python под Android. Такой странный для многих выбор обусловлен тем, что я люблю Python и люблю Android, а ещё люблю делать необычное (ну хорошо, не самое обычное). В качестве фреймворка был выбран Kivy — фактически, безальтернативный вариант, но он мне очень понравился. Однако, по нему не так уж много информации (нет, документация отличная, но иногда её недостаточно), особенно на русском языке, а некоторые вещи хоть и можно реализовать, но их то ли никто раньше не делал, то ли не счёл нужным поделиться информацией. Ну а я счёл 🙂 И этот пост тому результатом.

Под катом я расскажу обо всех этапах разработки, о том, как развивалась простая идея и как для этого приходилось искать новые возможности, о возникших подводных камнях и багах, о неочевидных решениях и устаревшей документации 🙂 Цель — описать в одном тексте основные пункты, чтобы человеку, решившему написать что-то немного сложнее игры Pong из официального туториала, не приходилось перерывать официальный форум поддержки и StackOverflow и тратить часы на то, что делается за пару минут, если знаешь, как.

0. Если вы впервые слышите о Kivy.

… то всё зависит от того, любите ли вы Python и Android, и интересно ли вам в этом разобраться. Если нет — проще забить 🙂 А если да, то начать нужно с официальной документации, гайдов, и уже упомянутого официального туториала по игре Pong — это даст базовое представление о фреймворке и его возможностях. Я же не буду останавливаться на столь тривиальных вещах (тем более, для понимания базовых принципов туториал отлично подходит) и сразу пойду дальше. Будем считать, что это было вступление 🙂

1. Немного о моей игре

Для начала нужна была идея. Мне хотелось что-то достаточно простое, чтобы оценить возможности фреймворка, но и достаточно интересное и оригинальное, чтобы не программировать ради программирования (это здорово, но когда это не единственная цель — это ещё лучше). Я неплохо проектирую интерфейсы, но не умею рисовать, поэтому игра должна была быть простая графически, или вообще текстовая. И тут так уж сложилось, что у меня есть заброшенный сайт с цитатами, с которого я когда-то начинал свой путь в web-разработке (я о нём даже писал на Хабре много лет назад). Поэтому идея возникла такая: игра-викторина «Угадай цитату». В русскоязычном Google Play ничего подобного не было, а в англоязычном была пара поделок низкого качества с сотней скачиваний.

Почти сразу же стало понятно, что просто так отгадывать цитату за цитатой — скучно. Так появились первые «фишки», которые, в итоге, и определили итоговую игру. В первую очередь это были тематические пакеты (то есть пакеты цитат, объединённые одной темой или автором) и баллы (которые начисляются за отгадывание цитат и прохождение пакетов, и тратятся на подсказки и разблокировку новых тем), а также статистика, достижения и избранное.

Так всё начиналось (кликабельно):
image loader image loader image loader

Ну ладно, ладно, больше не буду показывать такой ужас 🙂 Кстати, вот так оно выглядит сейчас (тоже кликабельно, скрины взяты с Google Play):
image loader image loader image loader

Первые проблемы начались с первого же экрана…

2. Kivy тормоз или я что-то делаю не так?

Один мой друг любит отвечать на такие вопросы «да» 🙂 На самом деле, некоторые вещи в Kivy действительно работают медленно, например, создание виджетов. Но это не значит, что это дело нельзя оптимизировать. Об этом я и расскажу.

Так как цитаты и темы хранятся в БД, то, само собой, кнопки с пакетами генерируются динамически. И вот тут-то я обнаружил, что происходит это очень медленно: примерно полсекунды на список из 20 кнопок. Возможно, это и не очень много при загрузке приложения, но при переходе на главный экран из других внутренних экранов приложения — непозволительно много. Здесь стоит отметить, что кнопка к тому моменту уже представляла собой, на самом деле, набор из нескольких элементов, визуально составляющих одну кнопку:

image loader

Первым моим побуждением было тем или иным образом закешировать их, и, действительно, опыт показал, что если создать все виджеты заранее, и сохранить их как свойство объекта StartScreen, то всё (кроме первой генерации) работает достаточно быстро. Однако же, данные в кнопках нужно периодически обновлять (хотя бы то же количество отгаданных цитат). Да и загрузку новых пакетов я уже тогда планировал. Конечно, не проблема реализовать и это, но я решил не изобретать велосипед и подумать.

Сначала стоило убедиться, что проблема именно в создании виджетов, поэтому я за несколько минут набросал простенькое приложение на два экрана, в каждом из которых генерировался набор строк из лейбла и чекбокса количеством 50 шт. 🙂

Запустил на своём стареньком Moto G (gen3) и получил:

И далее в том же духе. Поиск по этому вопросу ничего не дал, поэтому я обратился к разработчикам. И получил ответ: «Создание виджетов относительно медленное, особенно в зависимости от того, что они содержат. Для создания больших списков лучше использовать RecycleView». Здесь хочу пояснить, почему я вообще описываю этот момент, ведь описание RecycleView есть в документации. Да, действительно, есть, но мало кто способен изучить и запомнить всю документацию перед тем, как начнёт разработку, и найти нужный инструмент бывает непросто, особенно если он нигде не описан в контексте решения конкретной проблемы. Теперь же он описан 🙂

Более чем в 100 раз быстрее. Впечатляет, не правда ли?

В завершение следует упомянуть, что RecycleView — не панацея. Он не подходит, если размер элемента зависит от содержимого (например, Label, размер которого меняется в зависимости от количества текста).

3. Сервисы. Автозапуск и перезапуск

Следующая проблема, с которой я столкнулся, не поддавалась решению так долго, что я уже малодушно подумывал счесть данный фреймворк непригодным и забить 🙂 Проблема была с сервисами (в Android так называется процессы, выполняющиеся в фоновом режиме). Создать сервис не так уж и сложно — немного сбивает с толку устаревшая документация, но и только. Однако, в большинстве случаев, много ли толку от сервиса, который, во-первых, не запускается автоматически при загрузке телефона, а во-вторых, не перезапускается, если «выбросить» приложение свайпом из диспетчера задач? По-моему, нет.

На тот момент по этой теме была всего лишь одна статья в официальной wiki, но она, хоть и называлась «Starting Kivy service on bootup», на самом деле всего лишь рассказывала, как при загрузке телефона запустить приложение, но не его сервис (да, такое тоже бывает полезно, но значительно реже, как по мне). Ту статью я, в итоге, переписал, а здесь расскажу подробности.

Допустим, у нас есть примитивный сервис, который всего-то и делает, что периодически выводит в лог строку (этим мы заранее исключаем баги, которые могут возникать из-за особенностей самого сервиса).

Из приложения мы запускаем его методом основного класса при помощи PyJnius:

Если APK собран правильно, при запуске приложения сервис будет стартовать, но этого недостаточно.

Для начала, попробуем сделать так, чтобы он перезапускался при остановке приложения (например, при снятии его из диспетчера задач). Конечно, можно было бы использовать startForeground, но это уже не совсем фоновое выполнение задачи 🙂 Для него потребуется, как минимум, уведомление — это не всегда подходит. В данном случае идеально подходит флаг START_STICKY, но мы же пишем на Python, что делает задачу не столь тривиальной — по крайней мере, при помощи PyJnius она уже не решается.

Ура, сервис рестартится. Всё? Конечно, нет 🙂 Потому что он тут же валится с ошибкой:

Проблема в функции onStartCommand(Intent intent, int flags, int startId), поскольку после перезапуска intent у нас null. Что ж, перепишем и её:

Проблема в том, что функция nativeStart() не получает нужных Extras. К сожалению, два из них мне пришлось захардкодить. В итоге выглядит это так:

Перейдём к автозапуску сервиса при запуске телефона. После предыдущей проблемы это будет уже проще. (На самом деле же всё было наоборот — я очень долго не мог понять, что именно нужно добавить, поскольку информации об этом не было вообще нигде, и сами разработчики тоже не знали, как решить данную задачу. И только разобравшись параллельно с вопросом перезапуска, я понял, что нужно сделать.)

Для начала понадобится разрешение RECEIVE_BOOT_COMPLETED — это просто. А затем — BroadcastReceiver, его придётся добавить в AndroidManifest вручную, но это тоже не проблема. Проблема в том, что в нём писать 🙂

Решение для запуска приложения (не сервиса) выглядит так:

Сначала я попытался просто переписать его для сервиса:

Думаю, вам уже понятно, что проблема в тех самых Extras. Мне же тогда об этом было узнать неоткуда. Но не буду тянуть, рабочий код выглядит так:

Локализация и мультиязычность

В целом, для локализации можно использовать gettext, или же поступить ещё проще — создать папку lang, в ней по файлу на каждый язык (например, en.py и ru.py), определить там все слова и фразы в виде переменных/констант, и далее подключить нужный модуль. Примерно так:

Статическая переменная использована для того, чтобы языковые константы было удобно использовать в kv-файле:

Источник

Cпособы ввода читов для игр на Android смартфонах

Мобильный гейминг развивается невероятными темпами. Сегодня графика в игре на смартфоне выглядит так, как несколько лет назад выглядела на мощных консолях и это не предел. Это направление будет развиваться, ведь ничто не заменит возможность просто достать телефон из кармана и отдохнуть несколько минут в любимом приложении. Не удивительно, что появилось такое понятие как чит на игры Android, специальный код, который позволяет сделать процесс более увлекательным и получить некоторые преимущества.

Чит-коды в играх Android: что это и как пользоваться?

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

lazy placeholder

В играх Android также есть возможность вводить коды для получения тех или иных преимуществ. Работает все так, как и на компьютере, но пользователи попросту не знают, как вводить читы Android и поэтому они пользуются меньшим спросом. На самом же деле в этом процессе нет ничего сложного, разобравшись один раз, можно будет использовать коды практически везде, где они предусмотрены. Есть несколько способов ввода комбинаций в Android приложениях, вы можете подобрать себе тот, который проще всего реализовать и который работает в вашей любимой игре.

Как вводить читы на Android?

Если речь идет о компьютере, то здесь все просто, перед вами клавиатура, можно вводить код и получать результат. Иногда необходимо выполнить некие действия в игре, или нужно заработать очки, зажать несколько клавиш и потом использовать символы. Но куда вводить чит Android, ведь клавиатуры перед глазами нет, только сенсорный экран и интерфейс.

Способ 1: в чат
lazy placeholder

Это самый простой способ, его можно реализовать без стороннего софта и профессиональных навыков. Но необходимо понимать, что работает такой вариант не всегда, если только сама игра поддерживает его. Чтобы воспользоваться этим методом ввода чит-кодов, необходимо выполнить следующие действия:

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

Способ 2: с помощью Smart Office 2

lazy placeholder

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

Итак, чтобы ввести код с помощью Smart Office 2, необходимо выполнить такие действия:

Если смартфон слабый, то изначально рекомендуется очистить список запущенных программ, а уже потом запускать игру и Smart Office 2. В случае нехватки оперативной памяти, система закроет приложение и данный способ не будет работать.

Способ 3: через GameKeyboard+

lazy placeholder

Если предыдущее приложение создавалось для других целей и пользователи попросту научились использовать «Баг» в своих целях, то GameKeyboard+ создана именно для решения проблемы с чит-кодами.

Чтобы воспользоваться этим способом, нужно выполнить следующее:

Способ 4: для эмуляторов Android на ПК

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

Реальный пример ввода читов в GTA San Andreas на Android

Для многих использование читов началось именно с GTA. В этой игре огромное количество кодов, которые позволяли полностью изменить процесс и добиться невероятных результатов. Сегодня GTA San Andreas отлично работает на Андроиде, при этом все комбинации, которые вы могли использовать на компьютере, можно применять и на телефоне. Запустив GTA San Andreas Android, как вводить коды многие не знают, поэтому мы сейчас рассмотрим все на реальном примере.

Как вводить читы в GTA San Andreas на Android:

lazy placeholder

Есть также и еще один способ, как ввести чит код на Android в GTA San Andreas. Вы можете подключить любую USB-клавиатуру к смартфону или планшету, используя переходник. В этом случае можно будет вводить коды через физическое внешнее устройство и все будет работать.

Источник

Общеобразовательный справочник
Adblock
detector