4

AFAIK 每个 android 应用程序都安装有自己的用户权限。如果应用程序A包含本机库(即/data/data/com.app.A/lib/libA.so),我可以System.load("/data/data/com.app.A/lib/libA.so")从应用程序B使用吗?

在我拥有的设备上,/data/data/com.app.A/lib/libA.so设置了其他读取权限,因此我可以从另一个应用程序加载它。但这对所有安卓系统都有效吗?

4

2 回答 2

0

我得出的结论是,即使在技术上是可行的,也应该非常不鼓励这样做。Android 文档对此并不清楚,但安全策略为每个应用程序分配了一个用户 ID,以便应用程序 A 不能干扰应用程序 B,除非通过 Android 框架。

我能看到的唯一例外是两个应用程序由相同的密钥签名,例如由同一个开发人员。

因此,不应允许加载外部应用程序的本机库,如果在未来的 Android 版本中删除其他读取权限也就不足为奇了。

不确定当一个应用程序实际上是一个库项目时会发生什么,例如 OpenCV Manager 的情况。在这种情况下,App A 与 App B(包含本机库)一起编译,并且 System.load() 由 App B 的代码执行,即使在 App A 的运行时进程中执行也是如此。(欢迎对此发表评论;))

于 2013-11-08T12:25:56.083 回答
-1

Even if you are able to load it because of the permission you won't be able to execute the functions inside the libA.so because it has different function signature related to package name and Class name defined in app A

JNIEXPORT jint JNICALL Java_com_android_A_class_method(JNIEnv *d, jobject e, jstring f)
{
//some action

}

Hence no harm done even if you are able to load it from another app B.

于 2012-10-08T10:25:55.007 回答