Android 如何仅使用较新的.o文件更新.so文件?

Android 如何仅使用较新的.o文件更新.so文件?,android,linux,linker,shared-libraries,native,Android,Linux,Linker,Shared Libraries,Native,我正在从事一个Android项目,该项目在apk中嵌入了一个原生的“.so”文件。每当我们需要发布一个bug修复程序时,我们现在都会发布一个带有“.so”的新apk文件,该文件有修复程序。但这是一个巨大的文件,效率不高 因此,我的问题是,是否可以仅使用已更改的相关“.o”文件更新“.So”中的“.apk”?这意味着保持“.so”文件的其余部分不变,我们可以只更新那些已更改的“.o”文件吗?类似于某些系统推动其错误修复的方式。不可能更新动态库的部分(。因此)。它不像静态库(.a),它本质上只是一个

我正在从事一个Android项目,该项目在apk中嵌入了一个原生的“.so”文件。每当我们需要发布一个bug修复程序时,我们现在都会发布一个带有“.so”的新apk文件,该文件有修复程序。但这是一个巨大的文件,效率不高


因此,我的问题是,是否可以仅使用已更改的相关“.o”文件更新“.So”中的“.apk”?这意味着保持“.so”文件的其余部分不变,我们可以只更新那些已更改的“.o”文件吗?类似于某些系统推动其错误修复的方式。

不可能更新动态库的部分(
。因此
)。它不像静态库(
.a
),它本质上只是一个包含对象文件的普通存档。动态库更像是一个普通的可执行文件,可以看作是一个没有
main
的程序。事实上,共享库通常作为一个整体进行编译,如果库的一部分发生了更改,那么所有其他部分都应该更新

比如说,在某个函数
a
的代码中还有一条指令,后面是函数
b
c
。然后
b
c
的地址应该根据添加到
a
的指令的大小而增加。然后,此动态库中
b
c
的所有调用站点都应使用新地址进行更新


这就是说,从理论上讲,这是可以做到的,但实现的成本远远高于从中获得的利润。

您可以为
分发二进制差异升级。因此
。仅在
中交换
.o
是不可能的,因为不仅仅是将它们打包到一个文件中,还需要更多的工作。但是您可能不应该这样做,因为您无法在不完全通过安装/升级机制替换的情况下修改已安装的.apk,尽管您可以通过其他方式分发补充的.so文件。详细、熟练地使用动态链接器可能会让一些本机方法覆盖现有方法,但这将非常棘手。