Android:如何在使用相同证书签名的项目之间共享代码

tom*_*ash 15 android code-signing certificate apk

在有关代码签名的Android 文档中,我们可以读到:" 通过使用相同的证书签署多个应用程序并使用基于签名的权限检查,您的应用程序可以以安全的方式共享代码和数据. "

如何才能完成这样的代码共享?是否可以在运行时发布主应用程序和多个可交换插件然后发现它们?什么是源代码看起来像什么是"标准"意图的优势来自/到不同的APK包?

hac*_*bod 9

使用Context.createPackageContext()为您感兴趣的另一个.apk实例化一个包.如果使用与您相同的证书进行签名,并且您使用相同的共享用户ID,则可以使用该标志加载其代码进入您的进程,允许您从上下文中获取ClassLoader并实例化您想要的任何类.

否则,如果它们没有签名并明确使用相同的共享使用ID,则只能加载其资源.

请注意,一旦该应用程序上市,您就无法更改应用程序的共享用户ID(转换为其他内容或在拥有和不具有共享用户ID之间移动).


Sha*_*hay 5

假设您要调用动态加载类的公共函数。使用以下代码片段:

Context friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE);
Class friendClass = friendContext.getClassLoader().loadClass("packageName.className");
Class noparams[] = {}; //say the function (functionName) required no inputs
friendClass.getMethod("functionName", noparams).invoke(friendClass.newInstance(), null);
Run Code Online (Sandbox Code Playgroud)