Как установить программы на старый андроид
Иногда некоторые приложения на 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
Другие статьи в выпуске:
Просмотр и модификация
Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь 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 появятся все извлеченные и дизассемблированные файлы пакета.
Препарирование. Отключаем рекламу
Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет 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
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. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.
Мобильные технологии развиваются так быстро, что мы уже не успеваем менять смартфоны. Вроде бы только купил новый девайс, а на рынке уже появились более продвинутые модели с большим количеством памяти, процессорных ядер и поддержкой NFC. И черт бы с ними, с ядрами, два, четыре, восемь, хоть шестнадцать. Новая версия ОС тормозит! Вот это настоящая проблема.
Эту статью я адресую всем тем, кто до сих пор пользуется смартфонами, вышедшими до появления версии Android 4.0, всем тем, кому «посчастливилось» купить девайс с 512 Мб оперативной памяти, а через месяц вышел Ice Cream Sandwich, и пришлось остаться на 2.3 или мириться с тормозами. В общем, для обладателей доисторических, но любимых HTC Desire, Motorola Defy и Samsung Galaxy S.
Обладателем одного из таких девайсов являюсь и я сам. Около трех лет назад за сегодняшнюю цену Nexus 4 я приобрел смартфон Motorola Defy. Это такой кирпич с экраном на 3,7 дюйма, 1 ГГц процессором, 512 Мб оперативной памяти и защитой от грязи и воды. С ним я проходил около года и впоследствии заменил на Galaxy Nexus, однако отдать или продать побитую, несколько раз тонувшую и прошедшую со мной через все, что только можно, моторолу не решился. Смартфон действительно был хорош, удобен, легко помещался в кармане и выдерживал любые испытания.
Проблема была только в том, что по умолчанию на Defy ставили Android 2.2, который впоследствии можно было обновить только до 2.3. Жадная и ленивая моторола оборвала все надежды владельцев, сказав, что 4.0 на смартфоне не будет — маловато памяти в зверьке.
К счастью, портировать Android 4.0 на Defy начали почти сразу после открытия исходников, и ко времени, когда необходимость в 4.X назрела, разработчики выкатили хороший полноценный порт (рассказ о том, через что они прошли, чтобы сделать это в условиях неломаемого залоченного загрузчика, достоин отдельной статьи). Но даже уже вылизанный Android 4.X (в лице CyanogenMod 10.2) работал на старом девайсе из рук вон плохо. Мизерный по нынешним временам объем памяти просто душил систему, и она постоянно держалась на пределе возможностей. В сравнении с 2.3, новая версия была просто невероятным тормозом, пользоваться которым не было никакого желания. Начались поиски любых путей оптимизации.
В сущности, все последующее повествование и есть рассказ о том, как заставить работать Android 4.3 (CyanogenMod 10.2) на Motorola Defy или любом другом устаревшем устройстве похожей конфигурации (в частности, точно такая же начинка была у Motorola Droid и похожая у Samsung Galaxy S). Впрочем, все сказанное будет справедливо вообще для любого девайса на Android 4.X, начиная от Samsung Galaxy Nexus и заканчивая HTC One.
Итак, у нас есть смартфон под управлением Android 4.X, и он безбожно тормозит. Приложения запускаются долго, промотка происходит с задержками, общий FPS около 5–10 кадров. Проблемы здесь, как и положено, две: процессор и память.
Официальные системные требования Android 4.X — это процессор на 1 ГГц и 1 Гб оперативной памяти. Только такой смартфон может пройти сертификацию и получить возможность продажи с предустановленным Google Play. Все, что ниже, — нет. И никакого запаса по памяти или частотам здесь нет, это край, ниже которого начинаются тормоза. Не из-за кривости чьих бы то ни было рук, а по причине функциональности ОС, которая с выходом Ice Cream Sandwitch действительно серьезно возросла (ну или можно все свалить на Java).
Сколько памяти потребляет Android 4.X? Много. Только что загруженная операционная система занимает около 350 Мб, за вычетом кода ядра и невыгружаемых компонентов на девайсе с 512 Мб памяти свободными остаются около 120 Мб. Среднее современное приложение вроде Twitter или Instagram во время своей работы может сожрать до 50 Мб. То есть оперативная память будет исчерпана уже после включения аппарата и запуска пары-тройки приложений.
Да, тебе не нужна одновременная работа нескольких программ, однако Android — это не Windows, он не завершает работу приложения при его закрытии, а всего лишь сворачивает, в результате чего софт продолжает жрать память, даже когда ты им не пользуешься. Чтобы ось не сдохла от нехватки памяти, в критические моменты просыпается процесс, названный Low Memory Killer, и беспощадно убивает фоновые приложения.
Современный Android-софт очень прожорлив
Другие статьи в выпуске:
Для нас Low Memory Killer очень важный инструмент. Это не просто топорная прибивалка софта, а интеллектуальный механизм, который можно перенастроить под любые нужды. Алгоритм работы этого внутриядерного процесса основан на значениях «важности», которые присваиваются каждому работающему в системе приложению и могут изменяться во времени. Всего таких значений шесть:
- FOREGROUND_APP — видимое на экране приложение, его убивать нельзя ни в коем случае;
- VISIBLE_APP — работающий в фоне процесс, отвечающий за вывод той или иной информации на экран (иконка в строке состояния, выдвижная панель, виджет и так далее), его лучше тоже не убивать;
- SECONDARY_SERVER — фоновый сервис, такой как музыкальный проигрыватель, будильник, синхронизация данных, обычно может быть убит без серьезных последствий для системы в целом, но с потерей функциональности;
- HIDDEN_APP — работающее в фоне приложение, может быть убито в любой момент, но это скажется на его функциональности;
- CONTENT_PROVIDER — фоновый сервис, отвечающий за хранение и предоставление какой-либо информации (настройки, фотографии, что угодно), но в данный момент простаивающий (клиентов нет), может быть безболезненно убит;
- EMPTY_APP — любой фоновый процесс (приложение), который ничего не делает, первый кандидат на убийство.
Важность приложений каждой группы растет снизу вверх. То есть при нехватке памяти Low Memory Killer начнет убийство с последней группы и, если памяти снова будет не хватать, будет продвигаться выше. Само понятие «дефицит памяти» у Low Memory Killer определяется шестью порогами, по одному на каждую группу процессов. На всех смартфонах (и прошивках) значения этих порогов разные, например, на Motorola Defy с CM-10.2 на борту они такие:
Свободной памяти меньше 70 Мб — убиваются безработные фоновые приложения, меньше 55 Мб — в расход пойдут Content Porovider’ы и так далее. Когда памяти останется всего 25 Мб, будет убито используемое в данный момент приложение, но вероятность такого исхода крайне мала; после убийства всех остальных приложений память занимать будет просто некому.
Красота всего этого механизма в том, что он может быть перенастроен в любой момент. В Android есть файл /sys/module/lowmemorykiller/parameters/minfree , который можно прочитать, чтобы получить текущие значения порогов или записать в него новые значения (через запятую в 4-килобайтных блоках), которые вступят в силу сразу после записи. То же самое можно сделать, используя приложение Auto Memory Manager, MinFree и аналоги.
Какие значения будут подходящими? Здесь все зависит от способа использования смартфона. Если аппарат тебе нужен только для того, чтобы звонить, читать почту и твиттер, значения лучше либо оставить как есть, либо убавить (но не рекомендую ставить ниже 50 Мб). Тогда система будет освобождать память только в крайнем случае, и все приложения, которыми ты часто пользуешься, останутся в памяти и будут запускаться мгновенно.
Если же ты привык использовать смартфон для запуска большого количества самых разных приложений и игр, то значения лучше повысить (в Auto Memory Manager это можно сделать за один тап, нажав кнопку Aggressive). Тогда в системе всегда будет оставаться достаточно памяти для запуска сразу нескольких тяжелых приложений, и она не будет тратить время на освобождение оперативки.
Еще один радикальный вариант — это повысить лимиты двух последних групп до максимума, в результате чего Android фактически превратится в однозадачную систему, каковой до недавнего времени была iOS и до сих пор остается Windows Phone (условно, конечно). Другими словами, система будет автоматически убивать приложения сразу после их закрытия, но только в том случае, если софтина не будет в этот момент ничего делать. Системные компоненты при этом останутся висеть в памяти.
Независимо от того, какой из вариантов ты выберешь, стоит поиграть с возможными значениями, чтобы найти оптимальные.
Все наши манипуляции с Low Memory Killer не принесут особого прироста производительности, если память системы будет забита разными клиентами Facebook, VKontakte, Hangouts Google+ и прочими. Обычно такой софт стартует сразу после загрузки системы и попадает либо в группу SECONDARYSERVER, либо в HIDDENAPP (иногда в CONTENT_PROVIDER), так что до него механизм очищения памяти добирается только в последнюю очередь, а даже если добирается, через некоторое время софтина перезапускается (обычно это связано с каким-либо системным событием).
Поэтому вторым пунктом в нашем плане улучшения скорости работы будет избавление от всех подобных приложений. Нет, реально нужные, конечно, лучше оставить, а те, которые стоят для галочки, — удалить. Если ты используешь стороннюю прошивку, типа CyanogenMod, стандартный архив Gapps (тот, который прошивается после самой прошивки) лучше заменить на минимальный (goo.im/gapps/minimal). Из гугловских приложений в нем только сам маркет и Gmail, а Hangouts, карты и куча других сервисов вырезаны, поэтому они тоже не будут стартовать во время загрузки и жрать память (любой из них можно установить из маркета).
Кроме Google-сервисов, довольно много памяти могут отъесть сервисы и автоматически запускаемые приложения самого Android. Удивительно, но в памяти работающей Android-системы можно легко обнаружить кучу софта, которым ты вообще не пользуешься. Это может быть диктофон, калькулятор, «Черная дыра» (к сожалению, это всего лишь живые обои), а также сервисы голосового набора (набора номера, не поиска), календаря и синтезатора речи. Причем если первые просто были запущены во время загрузки и довольно быстро вытесняются Low Memory Killer, то вторые — это полноценные сервисы, которые висят в памяти на протяжении всей жизни смартфона.
Многие из этих сервисов можно отключить через стандартный диспетчер приложений, даже не имея root. Достаточно перейти в «Настройки -> Приложения -> Все», тапнуть по нужной софтине и нажать кнопку «Отключить» (ну или «Удалить», а затем «Отключить», если были установлены обновления). Вот список приложений, которые, с точки зрения инженеров Google, можно безболезненно отключать:
- Голосовой набор (com.android.voicedialer)
- Диктофон (com.android.soundrecorder)
- Календарь (com.android.calendar)
- Калькулятор (com.android.calculator)
- Обновление CyanogenMod (com.cyanogenmod.updater)
- Память календаря (com.android.providers.calendar)
- Синхронизация закладок (com.google.android.syncupdaters.bookmarks)
- Синхронизация календаря (com.google.android.syncupdaters.calendar)
- Стандартные заставки (com.android.dreams.basic)
- Фоновые рисунки (com.android.musicvis и com.android.magicsmoke)
- Черная дыра (com.android.galaxy4)
- com.android.wallpaper.holospiral
- Email (com.android.email)
- Picasa Uploader (com.google.android.apps.uploader)
- Pico TTS (com.svox.pico)
В скобках я привел системное имя приложения так, чтобы в случае необходимости ты мог не просто отключить, но и удалить его (а зачем зря тратить место?). Все системные приложения хранятся в каталоге /system/app и могут быть удалены с помощью любого файлового менеджера с поддержкой root.
По умолчанию система не позволит отключить некоторые весьма прожорливые, но тем не менее важные сервисы. К таким относятся, к примеру, «Телефон» (это приложение входит в группу FOREGROUND_APP и поэтому всегда висит в памяти), «Эквалайзер» (только в CyanogenMod и производных), Google Backup Transport (~45 Мб), ответственный за бэкап установленного софта в облаке Google (восстанавливается после переустановки прошивки, например), «Меню SIM-карты» и Fused Location (~45 Мб), сервис, который собирает данные о местоположении со всех возможных источников (сотовая сеть, IP-адрес, барометр, GPS, компас) и на их основе вычисляет точное положение смартфона на карте. Приложения типа навигаторов будут работать и без него, но с меньшей точностью.
Избавиться от всех этих процессов поможет root-приложение Bloat Freezer. Оно позволяет отключить не только приложения, дозволенные к отключению самой системой, но и вообще любые, в том числе главный системный процесс android.process.acore. Кроме приведенных выше пожирателей памяти, безболезненно можно прибить еще такое количество системных приложений, что мне будет проще привести список тех, которые отключать нельзя. Вот они:
Все остальное можно безболезненно выключить (ну или оставить те, которые еще могут пригодиться, например FM-радио). Когда все будет сделано, открываем любой менеджер процессов, прибиваем все пользовательские процессы и смотрим, сколько памяти занято. В моем случае 200 Мб. Очень даже недурно в сравнении с изначальными 350 Мб.
Отключаем бесполезный голосовой набор Отключив Fused Location и Google Backup Transport, мы освободим 90 Мб памяти Отключаем системные сервисы с помощью Bloat Freezer
После чистки система занимает меньше 200 Мб!
Второе, что мы можем, — это отучить прожорливые приложения что-либо делать в фоне. Для этого есть замечательное приложение Greenify (требует root), которое позволяет заморозить выбранные приложения так, чтобы они вообще не могли работать, пока не видны на экране. Запускаем Greenify, нажимаем «+» и видим список работающего софта, рассортированный по степени прожорливости, тапаем по нужному приложению и все, отныне в фоне оно всегда будет спать.
Некоторым приложениям незачем работать в фоне
Что еще можно сделать для ускорения работы смартфона и очистки его памяти? В целом больше ничего. Есть, конечно, еще такие совсем радикальные методы, как замена тяжелого софта на простые легкие аналоги, хакинг софта с целью вырезания ресурсов, но все это плохо согласуется с идеей иметь полнофункциональный смартфон. Проще тогда поставить Android 2.3 (CyanogenMod 7) и вообще забыть о проблемах производительности.
Тем не менее есть еще два действенных совета. Первый — это активация технологии zRam, которая позволяет выделить небольшой фрагмент оперативной памяти и создать из него виртуальный своп-раздел со сжатием данных. В результате общий объем оперативной памяти виртуально увеличится, высвободив лишних 50–100 Мб.
Проблема с активацией zRam только в том, что сама технология есть далеко не в каждом ядре. Большинство кастомных ядер, а также ядра прошивок CyanogenMod, Paranoid Android и AOKP обычно включает поддержку zRam, но это не всегда верно. Стоковые прошивки обычно поставляются с ядрами без zRam. В CyanogenMod и производных активировать Z-RAM можно через меню «Настройки -> Производительность -> Управление памятью -> Использовать zRam». По умолчанию система выделяет под сжатый своп 18% памяти, но при необходимости значение можно увеличить до 26%. В других прошивках zRam активируется с помощью приложения Trickster Mod (вкладка «Специфичные функции»), однако так можно выделить только 10% памяти.
Второй действенный совет — это перенос всех приложений во внутреннюю память вместо установки на карту памяти. Тут выигрыш состоит в том, что встроенная NAND-память смартфона по определению намного быстрее памяти SD-карты, поэтому запуск приложения из внутренней памяти будет происходить быстрее. Более того, сам по себе механизм запуска приложений с SD-карты в Android реализован с использованием шифрованных контейнеров, что также вносит дополнительные издержки.
Перенеся все приложения во внутреннюю память, мы добьемся ускорения их запуска. Уже установленный на карту памяти софт можно легко вернуть назад через настройки: «Приложения -> Сторонние -> Выбор приложения -> Перенести на смартфон». Чтобы вообще отключить функцию установки новых приложений на карту памяти, нужны права root и эмулятор терминала. Запускаем терминал и набираем две команды:
Теперь по умолчанию весь софт будет устанавливаться во внутреннюю память. Чтобы настройка сохранялась между перезагрузками, берем любой файловый менеджер с поддержкой root, переходим в каталог /system/etc/init.d/ и создаем такой файл 99disable-app2sd.sh :
И с помощью все того же файлового менеджера ставим на него бит исполнения. Это рецепт для CyanogenMod и производных. На стоковых прошивках сначала необходимо установить приложение Universal Init.d, запустить его и включить переключатель на главном экране приложения.
Активируем zRam в CyanogenMod Активируем zRam с помощью TricksterMod По умолчанию Android предпочитает устанавливать софт на SD-карту
Применяя все описанные в статье приемы, мне удалось существенно поднять скорость работы при использовании Motorola Defy с CyanogenMod 10.2 на борту. Смартфон, конечно, не приблизился к скорости Nexus 4 и других современных девайсов, но в сравнении с настройками по умолчанию комфорт от использования повысился в разы и приблизился к таковому при использовании стокового Android 2.3.
Выявить приложения, которые просыпаются во время сна смартфона и садят его батарею, можно с помощью приложения Wakelock Detector.
Если ты не пользуешься поиском Google на домашнем экране, то рекомендую удалить/отключить приложение «Google поиск». Экономия: 10–15 Мб и место на рабочем столе (строка поиска исчезнет).
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
«Это приложение было создано для более ранней версии android». Если вы когда-то сталкивались с этой фразой при запуске приложения и вы решили во что бы то ни стало запустить приложение, в этой статье я расскажу как это сделать.
Сразу хочу предупредить способ не универсальный так, как по факту вы будете использовать Android версии 5.1.1.
Как и в случае с Windows для запуска старых игр, нам понадобится эмулятор или виртуальная машина. В нашем случае – второе.
VMOS – это приложение на основе виртуальной машины (ВМ). VMOS может быть установлен в виде обычного приложения для системы Linux или Android с помощью технологии VM. Что даёт возможность запустить виртуальную Android-систему в оконном режиме.
Скачивание и установка
В теории скачать VMOS можно с официального сайта, где доступны APK-файлы. На практике официальная версия не заработает без файла VMOS Tool, который официально нигде не скачать. Ссылка на рабочий APK-файл будет в конце поста.
Сам процесс установки и запуска ничем не отличает от любого другого Android-приложения. Поэтому я его не буду здесь описывать. Установите сначала сам VMOS, затем VMOS Tool. После чего запустите приложение VMOS.
Через некоторое время запустится виртуальная машина с Android 5.1.1 на борту.
Запуск старых приложений
Поскольку тема этого поста запуск устаревших приложений, я не буду вдаваться во все возможности виртуальной машины. А остановлюсь конкретно на решении нашей задаче.
Сам процесс максимально прост. Ведь перед вами по сути обычный смартфон на старом Android.
Скачайте APK-файл вашего приложения на смартфон и запустите VMOS. После запуска виртуалки на нижней панели нажмите на значок передачи файлов.
В открывшемся окне нажмите Импорт, выберите APK и VMOS автоматически установит приложение. Его иконка появится на рабочем столе. Нажмите на неё и пользуюсь приложением как обычно.
Актуальную ссылку на весь набор файлов можно найти под катом 👇 после подписки.
Если вы читаете отзывы, которые пользователи оставляют в Google Play, то вам хотя бы раз попадалось на глаза высказывание в стиле «приложение супер, но после обновления перестало работать».
Да, бывают случаи, когда после обновления программа полностью или частично теряет работоспособность. И если вас по какой-то причине не устраивает апдейт, вы можете откатиться на предыдущую версию.
Что может быть плохого в апдейтах?
Наиболее распространенные проблемы, на которые жалуются пользователи после обновления программ, следующие:
- баги;
- прекращение поддержки старых версий Android;
- несовместимость приложения с аппаратными характеристиками устройства;
- до неузнаваемости измененный интерфейс;
- отсутствие привычных функций;
- обилие рекламных окон.
Если вы столкнулись хотя бы с парой пунктов из перечисленного, вам наверняка захочется откатиться на старую версию приложения.
Как установить старую версию Android-приложения?
К сожалению, сделать это через официальный магазин не получится. Google Play разрешает разработчикам выставлять только одну версию APK, поэтому с каждым обновлением приложение перезаливается, а его предыдущую версию удаляют.
При этом Google тщательно следит за тем, чтобы на устройствах пользователей всегда были установлены свежие версии приложений. Для этого было придумано автоматическое обновление.
Так что если вы хотите пользоваться именно старой версией программы, скачивать ее придется со стороннего ресурса.
Что стоит сделать перед установкой старого приложения
Для начала подготовьте свой смартфон. По умолчанию система запрещает установку приложений откуда бы то ни было, кроме как из официального магазина. Зайдите во вкладку «безопасность» и поставьте галочку напротив пункта «неизвестные источники». После этого вы сможете установить APK, скачанное с любого сайта.
Однако эта инструкция не актуальна для восьмой версии Android. В Oreo вам придется давать разрешение на запуск сторонних APK какому-либо приложению, например, Google Drive или Chrome. Это зависит от того, каким образом приложение попадет на ваш смартфон: если вы собираетесь скачать его с помощью браузера, дайте разрешение Chrome или тому обозревателю, который используете. Данная настройка находится во вкладке «конфиденциальность и безопасность» - «еще» - «установка неизвестных приложений».
Не забудьте отключить автоматическое обновление приложений
Отключите автоматическое обновление в Google Play. В противном случае магазин быстро обнаружит на вашем устройстве неактуальное ПО, и вы даже не заметите, как оно обновится.
Удалив ненужное приложение, вы сотрете все связанные с ним данные, настройки, игровой прогресс и т.п. При желании можете сделать бэкап и сохранить его в облаке, чтобы потом восстановить в старой версии приложения.
Удалите обновленное приложение и переходите к поиску нужной версии.
Где можно скачать старые версии приложений?
Бесплатно скачать старые версии APK можно с таких сайтов, как APKMirror, 4PDA, UpToDown, APK4Fun и APKPure. В описании вы найдете всю нужную информацию: версию приложения, предупреждения о багах и несовместимости и т.д.
Установка предельно проста: качаете файл, находите в памяти устройства и запускаете. Все.
Будь в курсе последних новостей из мира гаджетов и технологий
Как устанавливать на Android несовместимые с устройством приложения
Некоторые разработчики ограничивают совместимость своих приложений: указывают, на каких моделях оно работает, в каких странах, с каким оператором и версиями Android. В Google Маркете такое приложение показано как несовместимое, хотя чаще всего эта несовместимость надуманная и его все же можно установить.
В некоторых случаев установке приложения препятствует проверка характеристик устройства магазином приложений Play Маркет. Так, например, происходило с выпущенным в это воскресенье мобильным кошельком Тинькова — из маркета он не устанавливался на смартфоны с FullHD-экранами, а установка APK-файла происходила без проблем.
APK-файл можно поискать в интернете или попросить у тех, кто успешно установил нужное вам приложение. Эти файлы хранятся в памяти телефона в папке data/app. Достать их оттуда можно на устройстве с root-доступом с помощью файлового менеджера. Чтобы поставить такое приложение, зайдите в настройки безопасности, разрешите установку приложений из неизвестных источников, затем скопируйте APK-файл на устройство и запустите его.
Это приложение не найти в Google Маркете, оно доступно на сайте разработчиков и работает только на устройствах с root-доступом. Приложение меняет системный идентификатор, чтобы вместо мало распространенного устройства магазин увидел популярное, которое, скорее всего, поддерживается.
2. Откройте Market Helper, выберите тип устройства (планшет, телефон), производителя и модель, страну, оператора сотовой связи.
5. Попробуйте установить приложения, которые были несовместимы. Чтобы вернуть устройство к исходному состоянию, нажмите «Restore» в списке доступных устройств, а затем «Activate» или просто перезагрузите его (обязательно должен быть включен Wi-Fi или передача данных).
Этот способ требует root-доступа к файловой системе и спасает только от несовместимости с самим устройством. Если запрет установлен на уровне версии операционной системы или страны, он не поможет.
1. Установите файловый менеджер Root Explorer, ES Проводник или Total Commander, запустите, зайдите в его настройки и активируйте доступ к root-директориям.
2. Зайдите в папку «System» и найдите файл «build.prop». Сохраните его резервную копию в надежное место.
4. Измените значение строк «ro.product.model» и «ro.product.manufacturer», например, на «Galaxy S4» и «Samsung» — устройство будет притворяться популярным смартфоном Samsung Galaxy S4.
5. Зайдите в «Настройки» > «Диспетчер приложений», найдите в списке Google Play Маркет, откройте сведения о нем и нажмите «Очистить данные» и «Очистить кэш».
Читайте также: