如何在运行时替换Android中的动态库?

如何在运行时替换Android中的动态库?,android,dynamic-library,Android,Dynamic Library,我应该在Android中替换一个动态库。例如,任何应用程序都使用a.so。我没有应用程序的源代码,我从谷歌市场下载它。我确信它使用了a.so。但我需要我的应用程序使用我自己的a.so,我在其中使用相同的功能原型、常量和宏编写,我只更改一些函数的实现,然后编译它以获取a\u我的.so。在这种情况下,我如何才能声称应用程序使用a_my.so而不是a.so。我能把a.so全部替换为a\u我的.so吗 主要用途:它是将系统动态库(特别是我想用libGLESv20.so)替换为我自己的版本。您需要更清楚地

我应该在Android中替换一个动态库。例如,任何应用程序都使用
a.so
。我没有应用程序的源代码,我从谷歌市场下载它。我确信它使用了a.so。但我需要我的应用程序使用我自己的
a.so
,我在其中使用相同的功能原型、常量和宏编写,我只更改一些函数的实现,然后编译它以获取
a\u我的.so
。在这种情况下,我如何才能声称应用程序使用
a_my.so
而不是
a.so
。我能把
a.so
全部替换为
a\u我的.so


主要用途:它是将系统动态库(特别是我想用libGLESv20.so)替换为我自己的版本。

您需要更清楚地了解您使用的语言。如果你没有“你的”应用程序的源代码,那么它就不是“你的”应用程序。这只是一个你从别人那里下载的应用程序。如果没有源代码,您将无法重新编译它。所以,即使我们告诉你如何链接a_my.So。这一点毫无意义,因为如果没有源代码,您将无法重新编译应用程序。是的,有一些工具允许对android应用程序进行反向编译,但是这些工具不能完美地工作(除了最简单的项目)。对不起,我的英语不好。我不需要重新编译应用程序。我需要该应用程序使用另一个版本的*。所以改为标准。嗯??假设我只关注你问题的第二部分。答案是:“视情况而定”。Android构建在嵌入式Linux之上,因此继承了Linux的安全模型。因此,如果您想在运行时更改共享对象库,则只有在您具有该设备的root访问权限,或者您可以修改和编译自己的源代码并使用自己的密钥(基于该共享对象库)对该应用程序进行签名时,才有可能更改(即使没有root访问权限,第二个选项也只会影响您的应用程序,而不会影响其他人编写的任何其他应用程序)。因此,主要问题是。您是否拥有该设备的root访问权限?或者您是否将编译自己的ROM?如果没有,请不要指望您的共享库能够影响其他人编写的第三方应用程序。根据设计,Android/Linux安全模型不允许这样做。但是否存在任何不完全取代*的方法。因此(a.So到我的a.So)但只替换应用程序用于查找*.so的路径(在应用程序使用a.so/lib/a.so的路径之前,现在将使用/home/dir/dir2/a.so)。