Когда я обновляю пользовательское ПЗУ, всегда есть инструкция по очистке кеша Dalvik . Я не вижу причин, почему это обязательно.
Наблюдая за логарифмом во время загрузки системы, я ясно вижу, что если приложение изменилось, его dex
файл становится недействительным, а затем создается заново. Тем не менее, когда я упоминаю об этом где-либо, меня встречает тишина. Как будто даже некоторые разработчики ПЗУ не знают об этом, и они делают это только потому, что знают все остальные.
Итак, вопросы:
Идеальный ответ будет включать ссылки на соответствующий код, поэтому у меня будет ссылка в следующий раз, когда это произойдет.
Чтобы ответить на ваши вопросы:
Я не знаю ни одной версии Android, в которой Dalvik не становился недействительным при загрузке. Может в начальной версии 1.0 было такое, я правда не знаю, прошли Эклер, Фройо, Имбирный пряник, Мороженое Сэндвич. Вам нужно заглянуть в исходное дерево и перебазировать его обратно в CupCake или Donut (1.5 и 1.6 соответственно).
Подробная причина :)
Причина, по которой следует использовать Wipe Cache , заключается в том, что ко всем apk, включая системные apk, прикреплен файл dex , когда ПЗУ загружается в первый раз, Android-Dalvik просматривает каждый из этих apk и извлекает dex-файл из него и поместите его в кеш, /data/dalvik-cache
тем самым ускорив выполнение самого приложения.
У большинства ПЗУ есть apk -файлы, отредактированные odex , кеш встроен в сам apk в виде внешнего файла.
У многих моддеров пользовательских ПЗУ эти apk деодексированы , что означает, что файл dex заменяется и переупаковывается, чтобы упростить создание темы / изменение apk.
Когда вы прошиваете пользовательское ПЗУ и не очищаете кеш, к apk более нового пользовательского ПЗУ будет прикреплен другой файл dex , и когда Dalvik просматривает их, он видит существующий кэшированный файл dex, найденный в каталоге, и пропустит его, то при запуске приложения вам гарантировано принудительное закрытие или ANR (приложение не отвечает).
Вы не теряете данные как таковые, если вы используете ClockWorkMod Recovery и выбрано Wipe Data , тогда да, все настройки, относящиеся к приложениям, стираются начисто — посмотрите в /data/app
.
Таким образом, вы можете Wipe Cache , но не Wipe Data , то, что сделано эффективно, размещено в новых apks на месте, в которых сохранены настройки. Это был довольно распространенный сценарий с ночными версиями CyanogenMod, когда прошивалась нестабильная / тестовая сборка ПЗУ, а настройки сохранялись при очистке кеша. Пробег будет варьироваться в зависимости от того, какие приложения загружены из маркета (скорее всего, настройки изменились бы в зависимости от версии).
Для достижения наилучших результатов было бы разумно выполнить как Wipe Data , так и Wipe Cache , чтобы обеспечить целостность и отсутствие программных ошибок в самом приложении.
Да, это означало бы, что время загрузки будет медленнее, но его начальный момент отключения. После этого он будет загружаться быстрее. На самом деле, в двух словах, явная очистка самого кеша через CWM на самом деле помогает ускорить его и обеспечить отсутствие остатков предыдущей версии на месте, которые могут быть испорчены (теперь, на этом этапе, я понимаю ваш вопрос, так что, честно говоря, на самом деле не замечено, что Android не выполняет аннулирование самого кеша при загрузке при перепрошивке нового ПЗУ ..)
Используйте источник Луки серьезно! :D
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
это загрузочный код для каждой среды выполнения apk. Он взаимодействует с собственным кодом C, найденным в dalvik
дереве каталогов, которое содержит определенные инструкции набора микросхем для интерпретации байт-кода в apk для собственного набора инструкций ЦП. ARMv6 в значительной степени является взломанной версией ARMv5 (который был исходным чипсетом в более старых версиях Android до Eclair), поэтому вы не увидите ARMv6 в исходном коде AOSP от Google. CyanogenMod будет иметь этот ARMv6 в своем исходном коде.
РР
т0мм13б
РР
data/data
ноdata\dalvik-cache
. Возможно только системные.т0мм13б
т0мм13б
РР
РР
т0мм13б
Голли Джер
Анвар