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