将原始 Android 的部分与较新的源相结合以创建新图像

将原始 Android 的部分与较新的源相结合以创建新图像

大家好,我想与专业人士分别讨论编译和反编译 Android 源代码和二进制文件。是否可以反编译设备中运行的 Android 操作系统并获取其源代码,以便您可以提取有用的东西,例如设备驱动程序,您也可以稍后使用它们来编译另一个可以安装在同一设备上的二进制文件(映像),但与编辑后的源。

例如,我有一个带有 android 2.3.3 的三星 AAAA,它工作正常,我希望它有 android 4.0.4 ...我可以将它现在拥有的图像 (2.3.3) 反编译为源 (2.3.3) 然后将驱动程序或其他源元素与 4.0.4 的源代码片段连接起来,生成一个新映像(包含 2.3.3 中的一些驱动程序和 4.0.4 中的一些源代码的二进制文件),然后使用该映像将其闪存到设备三星 AAAA。

是否有可能帮助非常感谢。

答案1

是和不是。

是的,您(通常)可以采用旧的源代码并将其与新的源代码结合起来。这就是例如氰基模组正在做(除了其他事情)。

不,您无法反编译构建的映像、提取源代码、将这些逐字放入新的源代码并重新编译。事情没那么简单,有以下几个原因,主要是:

  1. 反编译并不是编译的逆过程。处理代码的常用方式是编译源代码并将它们链接到可执行文件(或库;在 UNIX 系统上通常是极低频这几天归档)。反编译无法(没有附加数据)重现原始源代码,相反,您最终会得到使用二进制文件中存在的标识符的汇编代码。粗略地说,用 C 语言来说:无论导出的对象是什么,都将被正确命名,但static事物却不会。编译器(或链接器,如果低温氧化在构建图像时使用)将只是一个无法从函数中的常规语句部分识别的代码块。

  2. API 兼容性。即使使用内核设备驱动程序的原始源代码,也不能保证您可以在不进行任何更改的情况下使用它来在较新的内核中对其进行编译。内部内核结构可能会发生变化,尤其是早期的 Android 内核经过大量修补(即与普通树非常不同)。

也就是说,这并非不可能。对于初学者,请检查 CM (CyanogenMod) 和其他备用 ROM - 您可能不是第一个遇到完全相同问题的人。如果这不起作用,并且您有(或想要变得)足够的能力,您可能希望获得设备的原始内核源代码(是的,它们必须可以在某个地方访问,如果不是,公司将面临令人不舒服的诉讼的风险)并使用该内核和更新的 Android 内核作为起点。此外,备用 ROM 社区或安卓SE将是比这里更好的提出更具体问题的地方。

相关内容