Как из obb файла сделать cpk

Обновлено: 07.07.2024

Чтобы разобраться, как установить игру с кэшем на Android, расставим все точки над И.

В Google Play Market для разработчиков, искусственно установлен лимит:

  • допустимый размер приложения - 5 Гб;
  • допустимый размер установочного файла (расширение .apk) - 100 Мб (по состоянию на 28.09.2015).

Это значит, что приложение, вес которого меньше 100 Мб, упаковано только в один установочный .apk-файл. Если вес приложения больше 100 Мб (что характерно для игр), кроме .apk файла до 100 Мб, создается еще .obb-файл, в котором хранится вся остальная информация. Обычно, эта информация называется "игровой кэш" - совокупность различных файлов (мультимедиа, графика, скрипты), которые нужны для работы игры.

Подготовительные работы

Установить игру с кэшем, загрузив ее с Play Market не составит труда. Процесс происходит автоматически: сперва установка .apk файла, после загрузка игрового кэша в .obb-файл.

Для установки игры с кэшем на планшет или смартфон вручную, нужно следующее:

Если вы скачали файлы на компьютер, переместите их на Android-устройство.

Процесс установки

Обычно папка с кэшем игры упакована в zip-архив поэтому нужно распаковать его:

    Откройте ES Проводник и перейдите в раздел, где находятся файлы. Если вы загружали контент сразу на Android-устройство, файлы находятся в разделе "Загрузка" (SDCard/Download).







Если в архиве находится одна папка с кэшем, вы можете сразу распаковать ее в /storage/emulated/0/Android/obb, выбрав вместо "Текущий путь" - "Выбрать путь".

Ссылка на официальный документ производства продукции:

Предисловие:

В магазине приложений Google Play есть ограничение на загрузку в 100 МБ. Приложения, размер которых превышает этот размер, должны загружать лишнюю часть в виде расширенного файла. Всего может быть загружено 2 расширенных файла. Максимальный размер каждого файла может составлять 2 ГБ, а формат файла obb [расширенный Файл может использовать любой формат файла (ZIP, PDF, MP4 и т. Д.). Вне зависимости от любого формата файла, Android считает, что это файлы obb (непрозрачные двоичные двоичные объекты).
Для каждого приложения каталог может содержать только до 2 расширенных файлов. Одним из них является основной файл расширения, а другим - файл расширения патча, поэтому обычно требуется обрабатывать только основной файл расширения.

1. Правила именования OBB

Имя файла состоит из четырех частей, в том числе:

  • main | patch: используется для указания того, является ли это основным расширением или дополнительным расширением.
  • расширение-версия: код версии загруженного в данный момент apk.
  • имя-пакета: имя пакета apk
  • obb: суффикс на самом деле является zip-файлом, Google play автоматически изменит zip-файл на obb-файл.

Например, предположим, что ваша версия APK (versionCode) 25, а имя вашего пакета - com.example.app. Если основной файл расширения загружен, файл переименовывается в:

  • При загрузке APK, OBB будет загружен отдельно, вы не можете просто обновить файл OBB
  • При загрузке приложения файл OBB загружается в каталог% external storage% / Android / obb / package name

Во-вторых, метод генерации OBB:

1. Google официальный инструмент JobB

Сделано вOBB(Opaque Binary Blob)Инструмент для форматирования файлов, вAndroid SDKв%ANDROID——HOME/tools%вЕсть работа под инструменты / bin。

Примечание. Если вы не настроили среду Android SDK, вам нужно открыть командное окно и перетащить jobb.bat в окно cmd, чтобы выполнить

2. Используйте WinRAR для сжатия (рекомендуется)

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

tip: Если ваш файл расширения - это какой-то мультимедийный файл, и вы не хотите распаковывать пакет ресурсов, а используйте вызов воспроизведения мультимедиа
(например, MediaPlayer.setDataSource () и SoundPool.load ()) непосредственно воспроизводят файлы мультимедиа в пакете ресурсов.
Тогда вы не должны сжимать файл при создании пакета расширения файла, а просто упаковать его. Метод сжатия: хранилище




Процесс сжатия

3. Где сохранить расширенные файлы

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

Для каждого приложения каталог может содержать только до 2 файлов расширения. Один - это основной файл расширения, а другой - файл расширения патча. При обновлении программы, если есть новые файлы расширений, новые файлы будут перезаписывать старые файлы расширений.
Если вам нужно распаковать файл расширения для использования, будьте осторожны, чтобы не удалить файл .obb, и не разархивируйте файл в этот каталог. Вы должны сохранить разархивированные файлы в каталог, возвращенный getExternalFilesDir (). Если возможно, лучше использовать формат файла, который программа может прочитать непосредственно, без необходимости разархивировать файл снова. Команда разработчиков Android предоставляет проект (APK Expansion Zip Library), который может напрямую читать содержимое ZIP-файла без распаковки файла.
Следует отметить, что файлы, хранящиеся в общей области хранения системы, также могут быть доступны пользователям и другим приложениям.

В-четвертых, использование файлов расширения APK

Для использования файлов расширений в приложении требуются два дополнительных элемента библиотеки Android:

  • Google Market Licensing package-
  • Google Market APK Expansion Library package-

После загрузки используйте каталог google_market_licensing \ library в файле market_licensing-r02.zip для создания проекта библиотеки;
Затем используйте google_market_apk_expansion \ downloader_library в market_apk_expansion-r01.zip для создания другого библиотечного проекта.
В то же время для упрощения обработки файлов расширений формата ZIP файл market_apk_expansion-r01.zip также содержит проект библиотеки для обработки файлов ZIP: google_market_apk_expansion \ zip_file Если вы используете формат файла расширения ZIP, вы также можете создать этот проект библиотеки.

1. Объявление необходимых разрешений

Примечание. По умолчанию уровень API, необходимый для загрузки проекта библиотеки, равен 4, а для проекта библиотеки ZIP с расширением APK требуется уровень API 5.
После того, как подготовка завершена, давайте посмотрим, как использовать файл расширения.

2. Реализация сервиса загрузчика

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

  • Зарегистрируйте BroadcastReceiver для отслеживания изменений в состоянии сетевого подключения устройства. Если сетевое соединение отключено, загрузка приостанавливается, а если сетевое соединение восстанавливается, загрузка продолжается. -
  • Запланируйте уведомление RTC_WAKEUP, которое можно использовать для запуска службы загрузки после прекращения службы загрузки.
  • Генерация уведомления (Notification) для отображения хода загрузки и статуса ошибки загрузки
  • Разрешить вашей программе вручную приостановить и возобновить загрузку

Убедитесь, что общая область хранения смонтирована и доступна.Перед загрузкой файла проверьте, существует ли файл и достаточно ли места для хранения. Уведомить пользователя, если есть проблема.

getSALT (): стратегия разрешений используется для генерации случайного набора байтов для Обфускатора.

getAlarmReceiverClassName (): возвращает имя класса BroadcastReceiver, используемое для перезапуска процесса загрузки в вашей программе. В некоторых случаях, когда служба загрузки неожиданно прерывается, загрузите ее снова через класс BroadcastReceiver. Например, программа управления процессами прекратила загрузку.

  • Ниже приведен код реализации класса DownloaderService:

Затем объявите службу в файле манифеста. Это очень просто!

  • Реализация AlarmReceiver
    Чтобы обнаружить процесс загрузки и перезапустить службу загрузки, DownloaderService организует сигнал тревоги RTC_WAKEUP для отправки намерения в BroadcastReceiver программы. Вы должны определить этот BroadcastReceiver для вызова функции, предоставляемой библиотекой загрузчика, и использовать эту функцию, чтобы проверить состояние загрузки и перезапустить службу загрузки, если это необходимо.
    Реализовать этот класс также очень просто. Вообще говоря, просто переписать функцию onReceive () и вызвать функцию DownloaderClientMarshaller.startDownloadServiceIfRequired ()
    Определите, что AlarmReceiver наследуется от BroadcastReceiver следующим образом:

Затем объявите получателя в файле манифеста. Это очень просто!

3. Начните загрузку файла расширения

Основная активность программы (активность, запускаемая с помощью значка Launcher) должна отвечать за проверку наличия файла расширения и запуск службы загрузки, если он не существует.
Чтобы использовать библиотеку Downloader для загрузки, выполните следующие действия:

1) Проверьте, был ли файл загружен
Класс Helper в библиотеке Downloader содержит несколько функций, упрощающих этот шаг:
getExtendedAPKFileName(Context, c, boolean mainFile, int versionCode)
doesFileExist(Context c, String fileName, long fileSize)
Например, в примере проекта проверьте наличие файла с помощью следующей функции в функции onCreate () Activity:

Здесь объект XAPKFile хранит номер версии и размер известного файла расширения и является ли он основным файлом расширения. Если функция возвращает false, запустите службу загрузки.

2) Запустите загрузку с помощью функции DownloaderClientMarshaller.startDownloadServiceIfRequired (Context c, PendingIntenttificationClient, ClassserviceClass).
Параметры этой функции следующие:

  • context: Your application’s Context.
  • messagesClient: PendingIntent, используемый для запуска основной операции. Используется в уведомлениях, созданных DownloaderService для отображения прогресса загрузки. Когда пользователь выбирает уведомление, система вызывает PendingIntent, чтобы открыть действие, которое отображает ход загрузки (вообще говоря, действие, которое начинает загрузку).
  • serviceClass: класс, унаследованный от DownloaderService в программе. При необходимости служба будет запущена для начала загрузки.

Эта функция возвращает целое число, чтобы указать, нужно ли загружать файл. Существуют следующие значения:

  • NO_DOWNLOAD_REQUIRED: указывает, что файл уже существует или загружается в данный момент.
  • LVL_CHECK_REQUIRED: указывает, что для авторизации требуется получить URL-адрес для загрузки файла расширения.
  • DOWNLOAD_REQUIRED: указывает, что URL-адрес файла расширения был получен, но загрузка еще не началась.
  • LVL_CHECK_REQUIRED и DOWNLOAD_REQUIRED по сути одинаковы, в общем случае вам не нужно обращать внимание на это состояние. Вызовите startDownloadServiceIfRequired () в вашей основной деятельности, вам нужно только увидеть, является ли возвращаемое значение NO_DOWNLOAD_REQUIRED. Если возвращаемое значение не равно NO_DOWNLOAD_REQUIRED, библиотека загрузчика начинает загрузку. Вам следует обновить интерфейс программы, чтобы отобразить ход загрузки, если возвращаемое значение равно NO_DOWNLOAD_REQUIRED, это означает, что файл был загружен и ваша программа может нормально запускаться.

3) Когда возвращаемое значение функции startDownloadServiceIfRequired () не равно NO_DOWNLOAD_REQUIRED,
Вызовите функцию DownloaderClientMarshaller.CreateStub (клиент IDownloaderClient, ClassdownloaderService) для создания экземпляра IStub. Этот экземпляр IStub обеспечивает функцию привязки между Activity и службой загрузки, так что ваша Activity может получить событие загрузки.
Для функции CreateStub () требуется класс, который реализует интерфейс IDownloaderClient и класс реализации DownloaderService в качестве параметров. Вообще говоря, пока Activity реализует интерфейс IDownloaderClient.
Команда разработчиков Android рекомендует создавать объекты IStub в функции onCreate () в Activity (созданной после функции startDownloadServiceIfRequired ()).

Когда функция onCreate () возвращается, Activity выполнит функцию onResume () и вызовет функцию connect () IStub в этой функции. Также вызовите функцию отсоединения IStub в функции onStop ().

Вызовите connect (), чтобы связать Activity и DownloaderService.

4. Обработка прогресса загрузки

Чтобы получать информацию о ходе загрузки, вам необходимо реализовать интерфейс IDownloaderClient. Интерфейс имеет следующие функции:

onServiceConnected(Messenger m)
После инициализации IStub эта функция будет вызываться обратно. Параметры этой функции используются для доступа к вашему DownloaderService. Вы можете использовать функцию DownloaderServiceMarshaller.CreateProxy () для создания этого объекта IDownloaderService. Затем вы можете использовать этот объект для управления службой загрузки, такой как приостановка и возобновление загрузки.

onDownloadStateChanged(int newState)
Эта функция вызывается при изменении состояния загрузки, например, при запуске загрузки или завершении загрузки.

Значением параметра newState является одна из констант, определенных в интерфейсе IDownloaderClient (начиная с STATE_);
Текстовое описание состояния можно получить с помощью функции Helpers.getDownloaderStringResourceIDFromState (), чтобы пользователи могли легче его понять. Например, соответствующее текстовое описание STATE_PAUSED_ROAMING: «Загрузка приостановлена, потому что вы находитесь в роуминге / в настоящее время в роуминге, загрузка остановлена»

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

Есть также несколько полезных функций:

  • requestPauseDownload()
    Приостановить загрузку
  • requestContinueDownload()
    возобновить загрузку
  • setDownloadFlags(int flags)
    Установите логотип загрузки. В настоящее время поддерживается только один флаг: FLAGS_DOWNLOAD_OVER_CELLULAR. Загрузите файлы расширения через мобильную сеть. По умолчанию этот флаг не включен, поэтому по умолчанию загрузка только через WIFI.
5. Читайте расширенные файлы

После загрузки файла расширения APK мы рассмотрим, как его использовать. Однако для некоторых реализаций Android 6.0 (уровень API 23) и более поздних версий все еще требуются разрешения, поэтому необходимо объявить разрешения хранения в манифесте приложения и запросить разрешения внешнего хранилища во время выполнения, как показано ниже:

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

Совет: (Zip-библиотека находится в / extras / google / google_market_apk_expansion / zip_file /)

Используйте класс APKExpansionSupport для получения ресурсов в obb
Предоставьте несколько способов доступа к расширенному имени файла и ZIP-файлу:

    getAPKExpansionFiles()
    ZipResourceFile
  • getInputStream(String assetPath)
    Предоставьте InputStream для чтения файлов в ZIP-файле. Требуемый путь assetPath должен быть относительно корня содержимого файла ZIP.
  • getAssetFileDescriptor(String assetPath)
    Предоставьте AssetFileDescriptor для файлов в файле ZIP. Требуемый путь к assetPath должен быть указан относительно корня содержимого файла ZIP. Это полезно для определенных API-интерфейсов Android, для которых требуется AssetFileDescriptor

Прежде всего, чтобы получить путь к файлу расширения, вы можете выполнить операцию с помощью следующего кода:

Иногда некоторые приложения на Android чем-то не устраивают пользователя. В качестве примера можно привести назойливую рекламу. А то бывает и так — всем хороша программа, да только перевод в ней или кривой, или вовсе отсутствует. Или, например, программа триальная, а получить полную версию возможности нет. Как же изменить ситуацию?

Введение

В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.

Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.

Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?

Декомпиляция приложений

В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:

Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:

В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.

Устройство APK-пакетов и их получение

Пакет приложения Android, по сути, является обычным ZIP-файлом, для просмотра содержимого и распаковки которого никаких специальных инструментов не требуется. Достаточно иметь архиватор — 7zip для Windows или консольный unzip в Linux. Но это что касается обертки. А что внутри? Внутри же у нас в общем случае такая структура:

  • META-INF/ — содержит цифровой сертификат приложения, удостоверяющий его создателя, и контрольные суммы файлов пакета;
  • res/ — различные ресурсы, которые приложение использует в своей работе, например изображения, декларативное описание интерфейса, а также другие данные;
  • AndroidManifest.xml — описание приложения. Сюда входит, например, список требуемых разрешений, требуемая версия Android и необходимое разрешение экрана;
  • classes.dex — компилированный байт-код приложения для виртуальной машины Dalvik;
  • resources.arsc — тоже ресурсы, но другого рода — в частности, строки (да-да, этот файл можно использовать для русификации!).

Перечисленные файлы и каталоги есть если не во всех, то, пожалуй, в абсолютном большинстве APK. Однако стоит упомянуть еще несколько не столь распространенных файлов/каталогов:

  • assets — аналог ресурсов. Основное отличие — для доступа к ресурсу необходимо знать его идентификатор, список asset’ов же можно получать динамически, используя метод AssetManager.list() в коде приложения;
  • lib — нативные Linux-библиотеки, написанные с помощью NDK (Native Development Kit).

Этот каталог используют производители игр, помещая туда движок игры, написанный на C/C++, а также создатели высокопроизводительных приложений (например, Google Chrome). С устройством разобрались. Но как же получить сам файл пакета интересующего приложения? Поскольку без рута с устройства забрать файлы APK не представляется возможным (они лежат в каталоге /data/app), а рутить не всегда целесообразно, имеется как минимум три способа получить файл приложения на компьютер:

  • расширение APK Downloader для Chrome;
  • приложение Real APK Leecher;
  • различные файлообменники и варезники.

Какой из них использовать — дело вкуса; мы предпочитаем использовать отдельные приложения, поэтому опишем использование Real APK Leecher, тем более что написан он на Java и, соответственно, работать будет хоть в винде, хоть в никсах.

Настройка Real APK Leecher

Настройка Real APK Leecher

Просмотр и модификация

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

Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:

Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:

Далее просто сваливаем содержимое обоих архивов в каталог

/bin и добавляем его в $PATH:

Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.

Импорт APK в Virtuous Ten Studio

Импорт APK в Virtuous Ten Studio

Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.

Рассмотрим наиболее интересные опции первой команды:

  • -s — не дизассемблировать файлы dex;
  • -r — не распаковывать ресурсы;
  • -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
  • --frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
  • -f — форсированная сборка без проверки изменений;
  • -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.

Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:

После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.

Препарирование. Отключаем рекламу

Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.

Поиск кода рекламы в jd-gui

Поиск кода рекламы в jd-gui

Итак, с помощью одного из приведенных способов скачай приложение из маркета. Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:

После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.

Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:

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

В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:

  • Target File — выходной файл хранилища ключей; в нем обычно хранится одна пара ключей;
  • Password и Confirm — пароль для хранилища;
  • Alias — имя ключа в хранилище;
  • Alias password и Confirm — пароль секретного ключа;
  • Validity — срок действия (в годах). Значение по умолчанию оптимально.

Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.

Создание ключа в apk-signer

Создание ключа в apk-signer

WARNING

Чтобы подписать приложение с помощью apk-signer, ты должен установить Android SDK и указать полный путь до него в настройках приложения.

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

Теперь этим ключом можно подписать APK. На вкладке APK Signer выбираем только что сгенерированный файл, вводим пароль, алиас ключа и пароль к нему, затем находим файл APK и смело жмем кнопку «Sign». Если все пройдет нормально, пакет будет подписан.

Так как мы подписали пакет нашим собственным ключом, он будет конфликтовать с оригинальным приложением, а это значит, что при попытке обновить софтину через маркет мы получим ошибку.

Цифровая подпись необходима только стороннему софту, поэтому если ты занимаешься модификацией системных приложений, которые устанавливаются копированием в каталог /system/app/, то подписывать их не нужно.

Обычно авторы приложений создают специальные классы для вывода рекламы и вызывают методы этих классов во время запуска приложения или одной из его «активностей» (упрощенно говоря, экранов приложения). Попробуем найти эти классы. Идем в каталог smali, далее com (в org лежит только открытая графическая библиотека cocos2d), далее kauf (именно туда, потому что это имя разработчика и там лежит весь его код) — и вот он, каталог marketing. Внутри находим кучу файлов с расширением smali. Это классы, и наиболее примечателен из них класс Ad.smali, по названию которого нетрудно догадаться, что именно он выводит рекламу.

Мы могли бы изменить логику его работы, но гораздо проще будет тупо убрать вызовы любых его методов из самого приложения. Поэтому выходим из каталога marketing и идем в соседний каталог particle, а затем в virtualtorch. Особого внимания здесь заслуживает файл MainActivity.smali. Это стандартный для Android класс, который создается Android SDK и устанавливается в качестве точки входа в приложение (аналог функции main в Си). Открываем файл на редактирование.

Внутри находится код smali (местный ассемблер). Он довольно запутанный и трудный для чтения в силу своей низкоуровневой природы, поэтому мы не будем его изучать, а просто найдем все упоминания класса Ad в коде и закомментируем их. Вбиваем строку «Ad» в поиске и попадаем на строку 25:

Здесь происходит создание объекта. Комментируем. Продолжаем поиск и находим в строках 433, 435, 466, 468, 738, 740, 800 и 802 обращения к методам класса Ad. Комментируем. Вроде все. Сохраняем. Теперь пакет необходимо собрать обратно и проверить его работоспособность и наличие рекламы. Для чистоты эксперимента возвращаем удаленную из AndroidManifest.xml строку, собираем пакет, подписываем и устанавливаем.

Наш подопытный кролик. Видна реклама Он же, но уже без рекламы

Оп-па! Реклама пропала только во время работы приложения, но осталась в главном меню, которое мы видим, когда запускаем софтину. Так, подождите, но ведь точка входа — это класс MainActivity, а реклама пропала во время работы приложения, но осталась в главном меню, значит, точка входа другая? Чтобы выявить истинную точку входа, вновь открываем файл AndroidManifest.xml. И да, в нем есть следующие строки:

Они говорят нам (и, что важнее, андроиду) о том, что активность с именем Start должна быть запущена в ответ на генерацию интента (события) android.intent.action.MAIN из категории android.intent.category.LAUNCHER. Это событие генерируется при тапе на иконку приложения в ланчере, поэтому оно и определяет точку входа, а именно класс Start. Скорее всего, программист сначала написал приложение без главного меню, точкой входа в которое был стандартный класс MainActivity, а затем добавил новое окно (активность), содержащее меню и описанное в классе Start, и вручную сделал его точкой входа.

Открываем файл Start.smali и вновь ищем строку «Ad», находим в строках 153 и 155 упоминание класса FirstAd. Он тоже есть в исходниках и, судя по названию, как раз и отвечает за показ объявлений на главном экране. Смотрим дальше, идет создание экземпляра класса FirstAd и интента, по контексту имеющего отношение к этому экземпляру, а дальше метка cond_10, условный переход на которую осуществляется аккурат перед созданием экземпляра класса:

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

Больше упоминаний FirstAd в коде нет, поэтому закрываем файл и вновь собираем наш виртуальный факел с помощью apktool. Копируем на смартфон, устанавливаем, запускаем. Вуаля, вся реклама исчезла, с чем нас всех и поздравляем.

  • Перевод приложений Android;
  • пример снятия триала с приложения.

Итоги

Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.

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

Что такое кеш для игр на Android, для чего он нужен

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


Установка дополнительных файлов для игры на телефоне

К примеру, пользователь установил новую галерею из официального магазина приложений Google Play Market. После установке появляются кэш-файлы. В них хранятся пиктограммы — маленькие иконки для предварительного просмотра фотографий и другая похожая информация. Чем больше мультимедиа, тем тяжелее cache.

Обратите внимание! Если пользователь удалит информацию о программе, то после следующего запуска вместо иконок будут серые квадратики. Однако через несколько секунд буфер-файлы загрузятся по новой.

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

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

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

Где и как скачать кэш

Перед тем как распаковать кэш к игре на андроид, его необходимо найти и загрузить на устройство. Как правило, файл находится на том же сайте, где APK-файл. Есть два способа, как его скачать:

  • с телефона или планшета;
  • при помощи компьютера.

Если мобильное устройство подключено к сети Wi-Fi, то можно скачать с его помощью. Преимущество метода — не придется включать ноутбук или ПК. Однако для некоторых пользователей навигационная система на андроид неудобная для использования.

Обратите внимание! При использовании компьютера можно также найти торрент файл. Это позволит загрузить архив быстрее. Также возможно подключить смартфон через USB-кабель и распаковать при помощи ПК либо ноута.


Установщик игры и архив с кэшем

Чем распаковать кэш игр на андроид

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

На смартфонах с новой прошивкой с этой задачей справляется вшитый проводник. Распаковка зачастую не занимает больше пяти минут. Однако в некоторых случаях понадобится скачать дополнительный софт. Одна из лучших утилит — RAR for Android.

Важно! Настоятельно рекомендуется скачивать приложения только с официального магазина Google Play Market. В противном случае можно заразить устройство вредоносным ПО.

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

Обратите внимание! Еще один полезный архиватор — 7Zipper для андроид. С его помощью также можно открывать и копировать файлы с разными расширениями.

Как установить кэш к игре на ОС андроид

Прежде всего нужно определиться с файловым менеджером. Если стандартный софт открывает архивы, как, например, на устройствах от китайского концерна Xiaomi, то можно им воспользоваться. Нужная директория — «sdcard, android, obb». Однако если по умолчанию стоит установка на внутренний накопитель, то необходимо искать путь файлов там.

Подготовка к установке

Прежде всего нужно выполнить некоторые действия:

  1. Открыть настройки.
  2. Пролистать вниз до раздела «Личная информация» или «Конфиденциальность».
  3. Выбрать пункт «Безопасность».
  4. Затем тапнуть на «Администрирование». Во вкладке нужно включить возможность устанавливать программное обеспечение из неизвестных источников.


Опция для разрешения установки программ из неизвестных APK

Обратите внимание! В устройствах от разных производителей названия параметров отличается. На это влияют следующие факторы: официальная или пиратская прошивка, наличие дополнительной оболочки (MIUI, EMUI), версия операционной системы.

Если необходимых настроек нет, то стоит воспользоваться строкой поиска в опциях, куда нужно ввести ключевые слова. Главное — найти что-то похожее на вышеупомянутый пункт.

Загрузка нужных файлов на телефон или планшет

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

  • если на сайте в блоке с информацией о файле есть название видеоускорителей (Adreno, Mali, PowerVR, Tegra и проч.), то нужно скачивать архив под конкретный графический ускоритель (название можно узнать при помощи программы CPU-Z);
  • если есть надпись «root», то необходимо получить права суперпользователя.

Установка игры с кэшем на андроид

Следующая инструкция поможет поставить игру на смартфон и добавить кэш:


Директория для установки дополнительных файлов для игры

Важно! На операционной версии Android 5.0 и более ранних буфер-данные необходимо разместить во внутренней памяти, а не на SD-карте.

Довольно распространенная проблема — нет папок data, obb. В таком случае достаточно просто их создать собственноручно. Такое происходит с новыми устройствами либо со смартфонами, которые недавно были восстановлены до заводских настроек.

Возможно ли перенести кэш игры с памяти Android телефона на внешний накопитель

Если необходимо перенести буфер-данные с внутреннего хранилища на карту памяти, то нужно сделать следующее:


Интерфейс программы для переноса кэша на флешку

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

Некоторые игры не работают без кэша, поэтому его нужно скачивать отдельно. Однако недостаточно просто загрузить файл. Необходимо знать, как распаковать папки, а также куда их закидывать. Решить это помогут вышеописанные инструкции. Главное — предварительно посмотреть всю информацию на сайте с файлом.

Читайте также: