我正在开发一个Android项目,其中包含嵌入在apk中的原生“.so”文件。每当我们需要发布错误修复时,我们现在发布一个带有“.so”的新apk文件。但这是一个巨大的文件,效率不高。
所以我的问题是,是否可以更新“.apk”中的“.so”,只更改相关的“.o”文件?意味着保持“.so”文件的其余部分相同,我们只能更新那些已更改的“.o”文件吗?类似于某些系统如何推动其错误修复。
答案 0 :(得分:1)
无法更新动态库(.so
)的部分内容。它不像静态库(.a
),它本质上只是一个带有目标文件的普通存档。动态库更像是通常的可执行文件,可以被认为只是一个没有main
的程序。实际上,共享库通常编译为PIC,总体而言,如果库的一部分发生更改,则应更新所有其他部分。
说,在某个函数a
的代码中还有一条指令,后跟函数b
和c
。然后,b
和c
的地址应该按照添加到a
的指令的大小来增加。然后,应使用新地址更新此动态库中b
和c
的所有调用网站。
尽管如此,它可以在理论上完成,但实施成本远远高于它的利润。