AFAIK每个Android应用程序都安装有自己的用户权限。如果app A 包含本机库(即/data/data/com.app.A/lib/libA.so
),我可以使用应用 B 中的System.load("/data/data/com.app.A/lib/libA.so")
吗?
在我拥有的设备上,/data/data/com.app.A/lib/libA.so
设置了其他读取权限,因此我可以从其他应用加载它。但这对所有Android系统都有效吗?
答案 0 :(得分:0)
我得出的结论是,即使技术上可行,也应该高度劝阻。 Android doc对此并不清楚,但安全策略会为每个应用分配一个用户ID,以便app A不会通过Android框架干扰app B.
我能看到的唯一例外是2个应用程序是由同一个密钥签名的,例如由同一个开发人员。
因此,不应该允许加载外部应用程序的本机库,如果在Android的未来版本中删除了其他读取权限,那就不足为奇了。
不确定当一个应用程序实际上是一个库项目时会发生什么,就像OpenCV Manager一样。在这种情况下,App A与App B(包含本机lib)一起编译,System.load()由App B的代码执行,即使在App A的运行时进程中执行也是如此。 (欢迎提出意见;))
答案 1 :(得分:-1)
即使你因为权限而能够加载它,你也无法执行libA.so中的函数,因为它具有与app name中定义的包名和类名相关的不同函数签名 A 强>
JNIEXPORT jint JNICALL Java_com_android_A_class_method(JNIEnv *d, jobject e, jstring f)
{
//some action
}
因此,即使您能够从其他应用程序B加载它也不会造成任何伤害。