Как работает Android-система с Java-банками?

В /system /framework имеется большое количество Java-банеров, например am.jar . Я понимаю, что Android использует Java в очень запутанном виде (по крайней мере для меня). Я не совсем понимаю, как работает dalvik.

В принципе, я не понимаю, как Android запускает эти банки. Может кто-нибудь объяснить, как это происходит, и, возможно, как я могу запускать свои собственные банки? Я на Resurrection Remix, 6.0.1, с Xposed framework, если это помогает.

Спасибо

<

Ответы и комментарии:

Что вы пытаетесь выполнить, запустив собственные JAR? Новые приложения, изменение поведения ОС и т. Д.?
Создан 18-05-2017 06:50 Mufasa

@Mufasa Я просто хочу знать, как это работает. Я не хочу запускать свои собственные. (По крайней мере на данный момент)
Создан 18-05-2017 07:14 Tyler Richardson

@Mufasa Я знаю, что сейчас это уже немного, но если он только выполняет .dex'es, то для чего они предназначены .jar?
Создан 18-06-2017 09:45 Tyler Richardson

Я не совсем уверен, но я думаю, что они связаны с процессом загрузки, базовыми файлами и, возможно, соображениями совместимости. В конце концов, JAR - это только ZIP-файлы с определенной структурой каталогов в них - им не нужно строго их использовать для исполняемого кода. Общая идея заключается в том, что Android обычно не выполняет JAR в пользовательском пространстве во время нормальной работы. Также см. Stackoverflow.com/q/30656933/2291, в котором обсуждается, как большинство этих JAR имеют в них простые метаданные.
Создан 19-06-2017 02:58 Mufasa

Вы можете запускать Jar-файлы, используя app_process, который заменяет исполняемый файл java на Android. Например, глядя в / system / bin / am, мы видим, что он действительно работает exec app_process $ base / bin com.android.commands.am.Am "$ @" Вы упомянули о запуске Xposed. Если вы выполните ручную установку этой структуры, вы увидите, что она разворачивает банку в / system / framework и заменяет app_process измененным, в котором добавляются крючки. Также рекомендуется прочитать измененный код app_process. Обратите внимание, что вам может понадобиться этот ответ для фактического запуска ваших приложений. Наконец, обратите внимание, что вы, похоже, неправильно поняли ссылку на ответ stackoverflow в комментариях (https://stackoverflow.com/q/30656933/2291). Банки установлены. В более новых системах они преобразуются (и файлы, удаленные из банки) в АРТ и выполняются как собственный код (то есть машинный язык). В более старых системах я думаю, что файлы класса java преобразуются в Dex-байт-код и запускаются в VM Dalvik. Это означает, что байт-код Dex запускается в Dalvik так же, как байт-код Java запускается виртуальной машиной Java на лету. В любом случае файлы JAR всегда содержат код.
Создан 25-12-2017 09:42

Это довольно большой вопрос; это очень сложная и большая система. Если вы больше не можете сузить свой вопрос, то короткий ответ - из документов Android: Dalvik VM является виртуальной машиной только для интерпретатора, которая выполняет файлы в формате Dalvik Executable (.dex) Подобно Java JVM, но другая реализация оптимизирована для моделей использования Android. Также посмотрите, что такое Dalvik и dalvik-cache? который описывает его немного больше. В противном случае я предлагаю вам ознакомиться с документацией Google по этому вопросу, чтобы узнать больше о любых частях интересующей вас системы dalvik. (Если бы мы попытались ответить на все это здесь, потребовалось бы почти бесконечное прокручивание страницы (преувеличение немного ), чтобы описать все разные части и части, как и почему это работает.
Создан 23-05-2017 11:38 Community♦ 1