HarmonyOS鸿蒙Next中如果HAR中包含.so,那么.so中的全局变量是否在不同引用者之间是隔离的?

HarmonyOS鸿蒙Next中如果HAR中包含.so,那么.so中的全局变量是否在不同引用者之间是隔离的?

如图所示,HAP中包含HAR1、HAR2,还有myHAR。其中myHAR中包含有第三方库libaaa.so,libaaa.so中有若干全局变量。

HAP、HAR1、HAR2都会去引用myHAR,那么根据har包的性质,是不是myHAR会被复制三份?如果是的话,libaaa.so也就被复制了三份。

那么是不是HAP、HAR1、HAR2都会去调用各自的libaaa.so?是否可以理解为:这样就实现了myHAR包被不同的HAP和HAR包引用时,其中的libaaa.so中的全局变量是被隔离的,会各自用各自的libaaa.so中的全局变量,从而无法被互相修改导致干扰?


更多关于HarmonyOS鸿蒙Next中如果HAR中包含.so,那么.so中的全局变量是否在不同引用者之间是隔离的?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

在上述问题中,HAP中包含有HAR1、HAR2,还有myHAR,若相同模块中引用myHAR及HAR1、HAR2引用myHAR不会破坏myHAR的单例,单例中的资源是相同的,能够相互干扰。若想破坏HAR的单例模式,可在不同hap中使用,或者HAP和HSP模块同时引用myHAR模块。上述问题可参考如下链接:多HAP/HSP引用相同HAR包的影响

更多关于HarmonyOS鸿蒙Next中如果HAR中包含.so,那么.so中的全局变量是否在不同引用者之间是隔离的?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,HAR包含的.so文件中的全局变量默认情况下是进程内共享的。如果HAR被多个Ability或应用引用,全局变量会在同一进程内共享。若需隔离,需使用独立进程模式部署Ability,每个Ability运行在独立进程中,此时.so的全局变量会按进程隔离。鸿蒙通过HAP的进程模型实现资源隔离。

在HarmonyOS Next中,HAR包中的.so文件确实会在每个引用它的模块中产生独立副本。当HAP、HAR1和HAR2都引用包含libaaa.so的myHAR时,每个模块会获得自己的myHAR副本,包括独立的libaaa.so文件。

这种机制确保了:

  1. 每个模块加载的是自己副本中的libaaa.so
  2. .so文件中的全局变量在各模块间是隔离的
  3. 避免了全局变量被不同模块意外修改的问题

这种隔离是通过HAR包的静态打包特性实现的,每个引用方获取的是完整的独立副本,包括其中的native库。这种设计确实能有效防止不同模块间的全局变量干扰。

回到顶部