Объединение частей оригинального Android с новыми источниками для создания нового изображения

Привет, я хотел поговорить с профессионалами о компиляции и декомпиляции Android-файлов и двоичных файлов соответственно. Можно ли декомпилировать ОС Android, запущенную на устройстве, и получить ее источник, чтобы вы могли извлекать полезные вещи, такие как драйверы устройств, которые впоследствии можно использовать для компиляции другого двоичного файла (изображения), который может быть установлен на одном устройстве, но с отредактированным источником.

Например, у меня есть Samsung AAAA с android 2.3.3, и он работает нормально, и я хочу, чтобы у него был Android 4.0.4 … могу ли я декомпилировать изображение, которое у него есть сейчас (2.3.3), в источник (2.3.3), тогда возьмите драйверы или какой-либо другой элемент-источник, присоедините его к сегменту источника 4.0.4, чтобы создать новое изображение (двоичное с некоторыми драйверами от 2.3.3 и некоторым источником из 4.0.4), затем используйте это изображение, чтобы запустить его в устройство Samsung AAAA.

Возможно ли это помочь?

Да и нет.

Да, вы можете (обычно) взять старый исходный код и объединить его с более новым. Это то, что делает CyanogenMod (помимо других вещей).

Нет, вы не можете декомпилировать построенное изображение, извлечь источники, отбросить эти дословные данные в более новые источники и перекомпилировать. Это просто не так просто, по нескольким причинам, в основном:

  1. Декомпиляция – это просто не обратная компиляция. Обычным способом обработки кода является компиляция ссылки источника, связывающей их с исполняемым файлом (или библиотекой; в UNIX-системах обычно это ELF- файл в эти дни). Декомпиляция не может (без дополнительных данных) воспроизводить исходный источник, вместо этого вы получите код сборки, в котором используются идентификаторы, присутствующие в двоичном формате. Rougly in C говорит: все, что экспортируется, будет называться правильно, но static вещи не будут. Независимо от того, что получает встроенный компилятор (или компоновщик, если LTO используется при построении изображения), это будет просто блоком кода, который не распознается из частей, которые были регулярными операторами в функции.

  2. Совместимость API. Даже с оригинальным исходным кодом, скажем, драйвером устройства ядра, нет никакой гарантии, что вы можете просто использовать его без каких-либо изменений для его компиляции в новом ядре. Внутренние структуры ядра могут измениться, и особенно ранние ядра Android были сильно исправлены (т.е. сильно отличаются от ванильных деревьев).

Тем не менее, это невозможно. Для стартера проверьте CM (CyanogenMod) и другие альтернативные ПЗУ – вы, возможно, не первый, с той же проблемой. Если это не работает, и вы (или хотите стать) достаточно способны, вы, вероятно, захотите получить исходные источники ядра для своего устройства (да, они должны быть доступны где-то, если они не были бы компанией, будут рисковать неудобными судебными процессами ) и использовать это и новое ядро ​​Android в качестве отправной точки. Кроме того, альтернативные сообщества ПЗУ или Android SE будут лучше задавать более конкретные вопросы, чем здесь.