Невозможно разобрать apk файл null
Выделил файлы, нажал «Копировать», «Переместить», «Извлечь» или что-то в таком духе и выбрал конечную папку… Кажется, с таким алгоритмом знакомы практически все пользователи компьютеров и телефонов. Но иногда даже в этом процессе могут произойти сбои, особенно на телефонах. То файл куда-то денется, то выскакивает ошибка. Мы расскажем, что делать при появлении ошибки «извлечения (или копирования), проверьте файлы» на Андроид.
Причины появления
В основном эта проблема появляется с программами, которые устанавливаются не через официальный сервис Google Play, а из сторонних источников и загружаются как отдельные apk файлы. В сервисе же система автоматически проверяет каждый скачиваемый на устройство файл, и заранее может предупредить пользователя, что для его телефона приложение не подходит. В этом случае вообще не будет доступна загрузка программы или игры на смартфон.
Вот основные причины возникновения ошибки при синтаксическом анализе пакета:
- Файл, который вы пытаетесь скачать, загружен не полностью;
- В телефоне установлен запрет на установку приложений из неизвестных источников;
- Версия приложения не соответствует версии операционной системы.
Во всех случаях проблему можно решить разными способами, о которых и пойдет речь дальше.
Сначала нужно определить, в чем же проблема, и почему не устанавливается тот или иной apk файл. Для этого поэтапно проводим все действия, начиная с самых простых.
Разрешаем установку из неизвестных источников
По умолчанию в операционной системе Андроид установка из неизвестных источников запрещена, чтобы пользователь не смог навредить своему смартфону. Дело в том, что сторонние приложения и игры могут содержать вирусы, трояны и прочие зловредные коды.
Вам нужно разрешить установку таких приложений.
-
Для этого заходим в «Настройки» аппарата и выбираем пункт «Параметры безопасности».
Внимание! Действия, описанные выше, могут навредить вашему устройству. Рекомендуем загружать apk только с проверенных сайтов и обязательно каждый файл проверять через антивирус на компьютере, например, Касперского.
Еще лучше загружать apk на сайт «Вирустотал». Он позволяет осуществлять проверки сразу по 50 популярным антивирусам.
И так, теперь проверяем, исчезла ли синтаксическая ошибка или нет. Нет? Тогда идем дальше!
Просмотр и модификация
Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь 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
Рассмотрим опции 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 появятся все извлеченные и дизассемблированные файлы пакета.
Решение проблемы
Как мы уже говорили, причин у проблем может быть много. Для каждой должно быть свое решение, но описать многие из них мы не можем. Потому будем рады, если вы предложите в комментариях свои способы решения проблемы. А теперь к делу.
Причина ошибки синтаксического анализа пакета Андроид
Первым делом нужно определить, какие причины приводят к тому, что смартфон отказывается устанавливать приложение через APK-файл, выдавая ошибку синтаксического анализа пакета. Эксперты выделяют следующие факторы, вызывающие проблему:
- запрет на установку из неизвестных источников;
- блокировка со стороны антивируса;
- повреждение APK-файла;
- несовместимость приложения.
Исходя из анализа причин возникновения проблемы, можно сказать, что ошибка появляется вследствие программных неполадок. Следовательно, решить проблему можно в домашних условиях, не обращаясь в сервисный центр. Главное – внимательно изучить инструкцию и реализовать алгоритм на практике.
Несовместимость приложения
Чтобы проверить версию операционной системы, необходимо открыть настройки устройства и перейти в раздел «О телефоне». Здесь вы увидите пункт «Версия Android», где и указана необходимая информация. Далее нужно посетить сайт, где производилась загрузка APK. Если версия, указанная на ресурсе загрузки выше, чем в настройках телефона, то приложение будет нельзя установить.
Попытаться решить проблему можно следующим образом:
- Перейдите в раздел «О телефоне», а затем – «Обновление ПО».
- Если апдейт будет найден, то нажмите кнопку «Загрузить», а потом – «Установить».
Если телефон не может найти обновления, то на вашем устройстве установлена максимальная версия операционной системы. Конечно, вы можете обновить ее вручную, скачав установочный пакет через неофициальные источники, однако в таком случае работоспособность гаджета не гарантируется.
Препарирование. Отключаем рекламу
Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.
Поиск кода рекламы в 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
Общие форматы
Начнем с того, что чаще всего и скачивают с интернета, а именно картинки, видео, музыку, документы Офиса (и не только) и так далее. С точки зрения ОС, у этих файлов нет права на выполнение, потому проблему с вирусом и запретом на установку сразу откидываем. Первым делом попробуем проверить, а все ли файлы такие испорченные. Алгоритм действий:
- Откройте предпочитаемый браузер.
- Введите в поисковике любое слово, а потом скачайте первую попавшуюся картинку или аудиофайл (если не скачивается музыка).
Попробуйте запустить его в разных программах. Если и новый скачанный ресурс оказался нерабочим, и ни одна программа не смогла открыть его, значит, проблема в браузере. Попробуйте сбросить его настройки. Для этого выполните действия ниже:
- Найдите страницу о выбранном для загрузки файлов браузере и откройте ее.
- Нажмите на кнопки, «Закрыть», «Очистить кэш», «Стереть все».
Теперь откройте браузер и попробуйте снова. В принципе, можно попробовать и другой клиент для загрузки.
Третье решение, которое мы можем предложить – это установка стороннего проводника. Рекомендуем выбрать Cx проводник, а после предоставить доступ к файлам. Также, если речь идет об архивах, то попробуйте скачать приложение WinRAR для телефонов.
Проверка версии приложения
У каждого apk-файла, как и у приложений в Google Play, имеется своя минимальная версия операционной системы, при наличии которой и будет осуществляться инсталляция. Если версия Андроида ниже, чем рекомендуемая версия устанавливаемого apk, то вполне понятно, почему возникает синтаксическая ошибка.
Для решения этой проблемы есть 3 способа:
- Найти версию программы, которая будет соответствовать версии вашего Android;
- Обновить ОС на устройстве до максимальной версии, соответствующей приложению;
- Искусственно изменить требования версии через специальный инструмент.
Думаю, что в первых двух вариантах все понятно. Мы же специально рассмотрим и третий вариант с использованием отдельной программы, которая позволит нам изменить требуемую версию операционной системы и корректно установить apk файл. Это в основном подходит тем пользователям, у кого установлена старая версия ОС.
Дополнительные способы решения проблемы
Есть еще несколько способов, предоставляющих возможность установить приложение или игру из apk, если все перечисленные методы не смогли решить проблему.
- Включаем отладку по USB. В некоторых случаях такой подход позволяет решить проблему, но это не панацея, и шанс не особо велик. Для включения этой опции нужно зайти в «Настройки» своего аппарата и кликнуть по вкладке «О телефоне». Прокрутите полосу вниз, пока не найдете пункт «Номер сборки». Кликните по нему 7 раз, чтобы активировать режим разработчика. Теперь переходите обратно в «Настройки» и прокручиваете еще раз вниз, пока не дойдете по пункта «Меню разработчика». В нем находите пункт «Отладка по USB» и активируете.
- Отключение антивирусов. Иногда установка не осуществляется из-за антивируса, который установлен у вас в смартфоне. Порою сигнатуры, которые подаются антивирусом, ложные, и файл блокируется просто так. Но это единичные случаи. Если действительно уверены, что данный apk-файл — безопасный, отключайте антивирус и попробуйте инсталлировать приложение.
Внимание! Пункты меню в Android могут отличаться, и в некоторых версиях «Отладка по USB» может находиться в других каталогах или вкладках, вызываться другими действиями, но во всех версиях Андроида она присутствует!
Иногда некоторые приложения на Android чем-то не устраивают пользователя. В качестве примера можно привести назойливую рекламу. А то бывает и так — всем хороша программа, да только перевод в ней или кривой, или вовсе отсутствует. Или, например, программа триальная, а получить полную версию возможности нет. Как же изменить ситуацию?
Отключаем антивирус
Возникнуть синтаксическая ошибка может из-за блокировки установки антивирусной программой. Большинство антивирусов пытаются выполнить блокировку инсталляции тех программ, которые могут быть подозрительными или ненадежными на их взгляд. Поэтому причина ошибки может быть в блокировке антивирусом файла .apk с целью предотвращения установки «подозрительного» софта.
Как проверить Android на шпионские программы
Редактирование файла программой APK Editor
Для работы требуется программа APK Editor. Она есть в двух версиях. Нужна Pro версия, так как именно в ней активирована функция редактирования нужных нам параметров. Стоимость на данный момент составляет 159 рублей. Это небольшая цена за такой прекрасный пакет инструментов.
APK Editor Pro — это универсальный и мощный редактор apk-файлов. Позволяет не только менять минимальные версии для приложений, но еще:
- удалять лишние рекламные объявления;
- менять фон изображений, макеты, разрешение;
- русифицировать интерфейс и пункты меню;
- поменять текст;
- добавить какие-то свои кнопки и вкладки.
Для простых операций не требуется особых навыков, а вот для сложной модификации приложения уже нужны профессиональные навыки работы с подобными инструментами и знание архитектуры приложений под нашу ОС.
- Зайдите в Google Play и скачайте Pro версию на свой смартфон. Откройте программу.
- Далее кликните по вкладке «Выберите apk-файл» и укажите путь к приложению, которое не устанавливается на вашем смартфоне.
- Нажмите на этом файле и подержите несколько секунд палец, чтобы появилось контекстное меню. В нем выберите пункт «Редактирование ресурсов». Внимание! Здесь может появиться ошибка «Невозможно разобрать apk-файл». Это нормальное явление, которое не влияет на нашу процедуру. Просто проигнорируйте данное оповещение.
- Перед вами появится большое количество строчек и подписей на английском языке, но нужно кликнуть по вкладке «Манифест», которая расположена в правом нижнем углу экрана.
- Ждете, пока система прогрузит все файлы. Появится большой список строк и различных параметров.
- Нужно найти параметр «uses-sdk android:minSdkVersion». Он может быть как в начале списка, так и в середине. Но обычно встречается вначале. Нажмите на него, чтобы появилось меню редактирования. Здесь появится две вкладки, в которых будет написано двухзначное число. Это число и указывает на минимальную версию операционной системы Android, с которой будет работать телефон.
Ниже мы предоставили таблицу, чтобы вы могли понять, на какие именно значения нужно менять данные параметры.
Версия операционной системы | Код (API) | Код версии (название ОС) |
Android 5.1 | 22 | LOLLIPOP_MR1 |
Android 5.0 | 21 | LOLLIPOP |
Android 4.4W | 20 | KITKAT_WATCH |
Android 4.4 | 19 | KITKAT |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Android 4.2, 4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.1, 4.1.1 | 16 | JELLY_BEAN |
Android 4.0.3, 4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.0, 4.0.1, 4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 2.3.4 Android 2.3.3 | 10 | GINGERBREAD_MR1 |
Android 2.3.2 Android 2.3.1 Android 2.3 | 9 | GINGERBREAD |
Как пользоваться этой таблицей? Например, на смартфоне установлена операционная система 4.2.2, а приложение, которое вы загружаете, требует минимальную версию Android — 5.0. Чтобы apk-файл успешно был установлен на смартфоне, в редакторе необходимо изменить параметры на 17 в обеих строчках. И так можно подстроить любое приложение под любую версию операционной системы. Но учтите, что стабильной работы на очень старых Андроидах никто не гарантирует!
Изменили значения? Отлично! Теперь нажимаете кнопку «Сохранить», после чего система обратно переадресует на экран с другими строчками и параметрами. Здесь в верхнем правом углу еще раз нужно кликнуть по вкладке «Сохранить» и дождаться, пока система заново пересоберет файл и сохранит его.
Процесс сборки файла напрямую зависит от объема информации, которая в нем хранится. Чем больше весит apk-файл, тем дольше будет программа компилировать приложение, поэтому ждите до конца и не думайте, что телефон завис!
В конце появится оповещение о том, что apk-файл сохранен, и рядом будет полный путь этого приложения. Можете попробовать установить его из этого же меню, так как будет вкладка «Установить» или можете проследовать через файловый менеджер к папке с сохранением и попробовать инсталлировать приложение оттуда. Если вы все сделали правильно, то установка будет успешной.
Внимание! Файл сохраняется как дубликат вашего apk, поэтому не путайте их! Старый файл так и будет выдавать синтаксическую ошибку, поэтому нужно осуществлять установку нового, созданного в программе APK Editor Pro.
Введение
В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.
Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.
Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?
Проверка manifest-файла приложения
Для начала разберем способ решения проблемы, который подойдет только тем пользователям, которые вносили изменения в системные файлы или дистрибутив приложения. Зачастую у таких людей не устанавливается APK-файл из-за некорректных данных, представленных в AndroidManifest.xml. Он закреплен за каждой программой, установленной на смартфоне, и появляется только после распаковки архива. Для решения проблемы требуется:
- Найти папку, где хранится AndroidManifest.xml.
- Запустить файл.
Если вы не относите себя к числу разработчиков и уверены, что не вносили изменения в AndroidManifest.xml, то можете смело переходить к основным вариантам решения проблемы. Но перед этим проверьте название APK-файла. В качестве окончания должно указываться расширение «.apk».
Если его нет – добавьте необходимую пометку, после чего приступайте к действиям по устранению неполадок.
Проверка версии приложения
У каждого apk-файла, как и у приложений в Google Play, имеется своя минимальная версия операционной системы, при наличии которой и будет осуществляться инсталляция. Если версия Андроида ниже, чем рекомендуемая версия устанавливаемого apk, то вполне понятно, почему возникает синтаксическая ошибка.
Для решения этой проблемы есть 3 способа:
- Найти версию программы, которая будет соответствовать версии вашего Android;
- Обновить ОС на устройстве до максимальной версии, соответствующей приложению;
- Искусственно изменить требования версии через специальный инструмент.
Думаю, что в первых двух вариантах все понятно. Мы же специально рассмотрим и третий вариант с использованием отдельной программы, которая позволит нам изменить требуемую версию операционной системы и корректно установить apk файл. Это в основном подходит тем пользователям, у кого установлена старая версия ОС.
Синтаксическая ошибка при установке приложения на Android — основная причина
Самая распространенная причина того, что возникает ошибка при синтаксическом анализе во время установки приложения из apk — неподдерживаемая версия Android на вашем устройстве, при этом, не исключено, что ранее это же приложение работало исправно, но его новая версия перестала.
Примечание: если ошибка появляется при установке приложения из Play Маркет, то навряд ли дело в неподдерживаемой версии, поскольку в нем отображаются только поддерживаемые вашим устройством приложения. Однако, возможно «Синтаксическая ошибка» при обновлении уже установленного приложения (если новая версия не поддерживается устройством).
Чаще всего причина кроется именно в «старой» версии Android в случаях, когда на вашем устройстве установлены версии до 5.1, либо используется эмулятор Android на компьютере (в которых тоже обычно установлена Android 4.4 или 5.0). Однако, и в более новых версиях возможен этот же вариант.
Чтобы определить, в этом ли причина, вы можете поступить следующим образом:
- Если вы заходите в браузере на Play Маркет, войдя под той же учетной записью Google, что используется на вашем устройстве, вы увидите сведения о том, поддерживают ли ваши устройства это приложение под его названием.
- Если устанавливаемое приложение загружается из стороннего источника в виде файла apk, а при поиске в Play Маркет на телефоне или планшете не находится (при этом точно присутствует в магазине приложений), то дело, вероятно, тоже в том, что оно у вас не поддерживается.
К сожалению, это не всегда возможно: есть приложения, которые с самой первой версии поддерживают Android не ниже 5.1, 6.0 и даже 7.0.
Также существуют приложения, совместимые только с определенными моделями (марками) устройств или с определенными процессорами и вызывающие рассматриваемую ошибку на всех остальных устройствах вне зависимости от версии Android.
APK-файлы
С установочными файлами приложений все куда интереснее. Нередко бывает, что в такие файлы прячут трояны, стиллеры, кейлоггеры и прочие вирусы. Разумеется, встроенный антивирус или сторонний сканер сразу обнаружат такой файл и прежде, чем он начнет действовать, удалят.
Иногда по ошибке удаляются даже «чистые» установщики, потому что попросту не имеют прикрепленных сертификатов. В таком случае попробуйте временно удалить сторонний антивирус, а в настройках устройства запретить удалять подозрительные файлы. В зависимости от встроенного сканера на телефоне и модели устройства алгоритм действий меняется.
Если боитесь, что это все же вирус, то закиньте его на сайт Virus Total. Это удобный ресурс, позволяющий проверить ресурс многими антивирусами.
Также не исключаем возможность, что проблема связана с запретом на установку из незнакомых источников. Решение:
- Найдите браузер, из которого происходило скачивание.
- В настройках разрешений поставьте галочку напротив «Установки из неизвестных источников».
- Попробуйте снова запустить установщик. После появления ошибки «Не удалось открыть файл» переустановите его через браузер.
Надеемся, что эти способы помогли решить неприятную проблему. Напоминаем, что мы всегда рады конструктивной критике и полезным советам в комментариях. Благодарим за прочтение.
Из статьи вы узнаете
Дополнительные способы решения проблемы
Есть еще несколько способов, предоставляющих возможность установить приложение или игру из apk, если все перечисленные методы не смогли решить проблему.
- Включаем отладку по USB. В некоторых случаях такой подход позволяет решить проблему, но это не панацея, и шанс не особо велик. Для включения этой опции нужно зайти в «Настройки» своего аппарата и кликнуть по вкладке «О телефоне». Прокрутите полосу вниз, пока не найдете пункт «Номер сборки». Кликните по нему 7 раз, чтобы активировать режим разработчика. Теперь переходите обратно в «Настройки» и прокручиваете еще раз вниз, пока не дойдете по пункта «Меню разработчика». В нем находите пункт «Отладка по USB» и активируете.
- Отключение антивирусов. Иногда установка не осуществляется из-за антивируса, который установлен у вас в смартфоне. Порою сигнатуры, которые подаются антивирусом, ложные, и файл блокируется просто так. Но это единичные случаи. Если действительно уверены, что данный apk-файл — безопасный, отключайте антивирус и попробуйте инсталлировать приложение.
Внимание! Пункты меню в Android могут отличаться, и в некоторых версиях «Отладка по USB» может находиться в других каталогах или вкладках, вызываться другими действиями, но во всех версиях Андроида она присутствует!
Перезагрузка файла и проверка целостности
Попробуйте загрузить файл из других источников или используйте другой загрузчик для скачивания данных из интернета. Так как apk-приложения — это, по сути, разновидность архива, иногда они не догружаются до конца, в связи с чем и возникают проблемы.
Если после загрузки приложений из других источников возникает та же проблема, переходим к следующему пункту.
Разрешаем установку из неизвестных источников
По умолчанию в операционной системе Андроид установка из неизвестных источников запрещена, чтобы пользователь не смог навредить своему смартфону. Дело в том, что сторонние приложения и игры могут содержать вирусы, трояны и прочие зловредные коды.
Вам нужно разрешить установку таких приложений.
-
Для этого заходим в «Настройки» аппарата и выбираем пункт «Параметры безопасности».
Внимание! Действия, описанные выше, могут навредить вашему устройству. Рекомендуем загружать apk только с проверенных сайтов и обязательно каждый файл проверять через антивирус на компьютере, например, Касперского.
Еще лучше загружать apk на сайт «Вирустотал». Он позволяет осуществлять проверки сразу по 50 популярным антивирусам.
И так, теперь проверяем, исчезла ли синтаксическая ошибка или нет. Нет? Тогда идем дальше!
То, о чем молчат другие источники
Еще один небольшой совет. Если все описанные способы не помогли, скорее всего, проблема в самом приложении, которое вы пытаетесь установить. Быть может, разработчик «собрал» файл с битыми файлами или ошибся в коде, из-за чего и возникают подобные проблемы.
Обязательно поищите в интернете, удалось ли кому-то из пользователей установить эту программу на свой смартфон или нет. Скорее всего, вас таких много!
Поврежденный или не полностью загруженный APK-файл
Проблема может быть связана не с телефоном, а с APK-файлом. Дело в том, что на некоторых сайтах размещаются поврежденные APK. Возможно, вы скачали именно такой файл, а потому при попытке установки приложения появляется ошибка синтаксического анализа пакета.
Еще один вариант – остановка загрузки установочного пакета. Если файл скачался не до конца, то инсталляция не может быть выполнена. В обоих случаях пользователям рекомендуется заново загрузить APK-файл. Только после того, как вы убедитесь в загрузке файла на 100 %, его можно запускать, устанавливая тем самым программу.
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;
- пример снятия триала с приложения.
Редактирование файла программой APK Editor
Для работы требуется программа APK Editor. Она есть в двух версиях. Нужна Pro версия, так как именно в ней активирована функция редактирования нужных нам параметров. Стоимость на данный момент составляет 159 рублей. Это небольшая цена за такой прекрасный пакет инструментов.
APK Editor Pro — это универсальный и мощный редактор apk-файлов. Позволяет не только менять минимальные версии для приложений, но еще:
- удалять лишние рекламные объявления;
- менять фон изображений, макеты, разрешение;
- русифицировать интерфейс и пункты меню;
- поменять текст;
- добавить какие-то свои кнопки и вкладки.
Для простых операций не требуется особых навыков, а вот для сложной модификации приложения уже нужны профессиональные навыки работы с подобными инструментами и знание архитектуры приложений под нашу ОС.
- Зайдите в Google Play и скачайте Pro версию на свой смартфон. Откройте программу.
- Далее кликните по вкладке «Выберите apk-файл» и укажите путь к приложению, которое не устанавливается на вашем смартфоне.
- Нажмите на этом файле и подержите несколько секунд палец, чтобы появилось контекстное меню. В нем выберите пункт «Редактирование ресурсов». Внимание! Здесь может появиться ошибка «Невозможно разобрать apk-файл». Это нормальное явление, которое не влияет на нашу процедуру. Просто проигнорируйте данное оповещение.
- Перед вами появится большое количество строчек и подписей на английском языке, но нужно кликнуть по вкладке «Манифест», которая расположена в правом нижнем углу экрана.
- Ждете, пока система прогрузит все файлы. Появится большой список строк и различных параметров.
- Нужно найти параметр «uses-sdk android:minSdkVersion». Он может быть как в начале списка, так и в середине. Но обычно встречается вначале. Нажмите на него, чтобы появилось меню редактирования. Здесь появится две вкладки, в которых будет написано двухзначное число. Это число и указывает на минимальную версию операционной системы Android, с которой будет работать телефон.
Ниже мы предоставили таблицу, чтобы вы могли понять, на какие именно значения нужно менять данные параметры.
Версия операционной системы | Код (API) | Код версии (название ОС) |
---|---|---|
Android 5.1 | 22 | LOLLIPOP_MR1 |
Android 5.0 | 21 | LOLLIPOP |
Android 4.4W | 20 | KITKAT_WATCH |
Android 4.4 | 19 | KITKAT |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Android 4.2, 4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.1, 4.1.1 | 16 | JELLY_BEAN |
Android 4.0.3, 4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.0, 4.0.1, 4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 2.3.4 Android 2.3.3 | 10 | GINGERBREAD_MR1 |
Android 2.3.2 Android 2.3.1 Android 2.3 | 9 | GINGERBREAD |
Как пользоваться этой таблицей? Например, на смартфоне установлена операционная система 4.2.2, а приложение, которое вы загружаете, требует минимальную версию Android — 5.0. Чтобы apk-файл успешно был установлен на смартфоне, в редакторе необходимо изменить параметры на 17 в обеих строчках. И так можно подстроить любое приложение под любую версию операционной системы. Но учтите, что стабильной работы на очень старых Андроидах никто не гарантирует!
Изменили значения? Отлично! Теперь нажимаете кнопку «Сохранить», после чего система обратно переадресует на экран с другими строчками и параметрами. Здесь в верхнем правом углу еще раз нужно кликнуть по вкладке «Сохранить» и дождаться, пока система заново пересоберет файл и сохранит его.
Процесс сборки файла напрямую зависит от объема информации, которая в нем хранится. Чем больше весит apk-файл, тем дольше будет программа компилировать приложение, поэтому ждите до конца и не думайте, что телефон завис!
В конце появится оповещение о том, что apk-файл сохранен, и рядом будет полный путь этого приложения. Можете попробовать установить его из этого же меню, так как будет вкладка «Установить» или можете проследовать через файловый менеджер к папке с сохранением и попробовать инсталлировать приложение оттуда. Если вы все сделали правильно, то установка будет успешной.
Внимание! Файл сохраняется как дубликат вашего apk, поэтому не путайте их! Старый файл так и будет выдавать синтаксическую ошибку, поэтому нужно осуществлять установку нового, созданного в программе APK Editor Pro.
Что делать, чтобы решить проблему
Принцип решения проблемы напрямую зависит от причины, которая ее вызвала. Поскольку ранее мы выделили сразу несколько факторов, можно забыть о существовании универсального способа устранения неполадок. В то же время ничего не мешает нам привести несколько вариантов решения проблемы на основе выделенных причин.
Отключить антивирус
Ранее мы уже говорили, что ошибка может появляться в том случае, если на телефоне запрещена установка приложений из неизвестных источников. Однако еще одной причиной возникновения проблемы является блокировка инсталляции софта со стороны антивируса, который видит в APK-файле угрозу. Следовательно, для устранения неполадок нужно временно отключить защиту.
- Перейдите во вкладку «Антивирус».
- Тапните по иконке настроек.
- Деактивируйте пункт «Проверять перед установкой».
Теперь антивирус не будет проверять приложения перед установкой, благодаря чему ошибка синтаксического анализа пакета должна исчезнуть. Если этого не произойдет, обратитесь к альтернативным вариантам решения проблемы.
Итоги
Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.
Декомпиляция приложений
В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:
Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:
В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.
Причины появления
В основном эта проблема появляется с программами, которые устанавливаются не через официальный сервис Google Play, а из сторонних источников и загружаются как отдельные apk файлы. В сервисе же система автоматически проверяет каждый скачиваемый на устройство файл, и заранее может предупредить пользователя, что для его телефона приложение не подходит. В этом случае вообще не будет доступна загрузка программы или игры на смартфон.
Вот основные причины возникновения ошибки при синтаксическом анализе пакета:
- Файл, который вы пытаетесь скачать, загружен не полностью;
- В телефоне установлен запрет на установку приложений из неизвестных источников;
- Версия приложения не соответствует версии операционной системы.
Во всех случаях проблему можно решить разными способами, о которых и пойдет речь дальше.
Сначала нужно определить, в чем же проблема, и почему не устанавливается тот или иной apk файл. Для этого поэтапно проводим все действия, начиная с самых простых.
Заключение
Мы перечислили основные способы устранения синтаксической ошибки на смартфоне под управлением Андроид, и в 99% случаев один из них точно поможет решить проблему. Но при этом советуем загружать приложения только из Google Play или на сайтах, у которых хорошая репутация (можно понять по отзывам пользователей).
Если же проблема так и не разрешилась, напишите в комментариях свою модель телефона, версию Android и название приложения, которое вы решили установить!
Включить отладку по USB
Иногда синтетическая ошибка возникает по причине того, что на смартфоне была запрещена «Отладка по USB». Это опция не влияет непосредственным образом на распаковку APK, но не стоит исключать уникальность вашего случая. Поэтому рекомендуется активировать отладку, после чего повторить процесс установки. Сначала вам нужно выполнить подготовительные действия:
Подготовительные действия необходимы для того, чтобы в настройках телефона появился новый раздел «Для разработчиков». Теперь вы можете открыть его и активировать пункт «Отладка по USB». После этого попробуйте еще раз установить приложение.
Почему не открываются загрузки на Андроид
Вообще ошибка извлечения может появиться в любой папке, где происходит копирование ресурсов из архива либо другой директории. Но чаще всего проблема касается именно каталога с загружаемыми установщиками. Обусловлено это тем, что туда попадают загрузочные дистрибутивы, музыка из интернета, фото и видео, а также много чего еще. Все эти ресурсы объединяет одна особенность – они скачиваются потоком, а потому иногда могут повредиться при загрузке.
Проще говоря, часть файла при скачивании попросту не догрузилась, а потому прочитать его невозможно. Но это только одна из причин. На деле их может быть куда больше. Например, для медиаресурсов стоит выделить следующие проблемы:
- нечитаемый формат;
- битый файл (причем испорченный даже на сервере, откуда скачивался);
- отсутствие ассоциированной программы для открытия;
- проблема с самой папкой Download.
Невозможно перечислить все случаи, нужно рассматривать каждую ситуацию отдельно. А вот для пользовательских приложений с расширением apk могут быть вообще отдельные причины. Среди них:
- Автоматический встроенный антивирус обнаружил вирус и мгновенно удалил файл.
- В настройках запрещена установка apk из сторонних ресурсов.
Разрешить установку приложений из неизвестных источников
Как правило, владельцы Android-устройств устанавливают приложения через Play Маркет или другие магазины. Операционная система предусматривает установку путем распаковки APK-файлов, но по умолчанию блокирует ее в целях безопасности. Из-за этого может возникнуть ошибка при синтаксическом анализе пакета. Чтобы ее убрать, нужно:
- Перейти в раздел «Расширенные настройки», а затем – «Конфиденциальность».
- Активировать ползунок, расположенный напротив пункта «Неизвестные источники».
Названия пунктов меню могут отличаться в зависимости от версии операционной системы и производителя телефона. Также важно заметить, что на некоторых устройствах установка из неизвестных источников разрешается для отдельных программ. Например, если вы пытаетесь распаковать APK через «Проводник», то разрешение нужно выдавать именно для него. После выполнения всех указанных действий проблема должна быть исчерпана.
Устройство 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
Другие статьи в выпуске:
Читайте также: