【发布时间】:2018-08-15 09:55:50
【问题描述】:
我有一个通过 jni 调用本机共享库的 Android 应用程序。这个共享库调用了一些可加载的内核模块。ko
当 jni 调用共享库中调用内核模块的函数时,我的应用程序运行失败。但是当我使用这个共享库编写一个可执行文件时,调用上述函数时它工作正常。
我发现我的应用程序以用户名“u0_axx”运行,而我的可执行文件通过 root 命令行运行。所以可能它没有调用内核模块的权限。
我的问题是这个本机代码如何在 root 权限下运行?或者解决此类问题的解决方案?
Ps:我也尝试使用Runtime.getRuntime().exec("su") 并将<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/> 添加到清单中,但它没有帮助并获得权限被拒绝的异常。我的设备已植根,我的应用被构建为系统应用。
【问题讨论】:
-
在我看来就像 ANDROID: How to gain root access in an Android application? 的副本。 方法 不能有权限。每个进程都授予 Root 权限。
-
这个答案是为了在 Java 中以 root 权限执行 shell 命令。我希望 jni 调用的共享库中的本机代码以 root 权限运行,以便它可以调用内核函数。
-
我还向其他人询问了与该问题相关的问题:stackoverflow.com/questions/51844210/…,但现在我找不到如何为此授予 root 访问权限。
-
我担心answer 很清楚:您不能在 Java 应用程序中拥有 root 权限,即使那是系统应用程序。对于您的特定请求,您需要一些中介进程(以 su 身份运行),它可以接收来自您的 Java 或本机代码的请求,并为您调用内核函数。
-
如果你想要一个更权威的答案,here 它是由 Dianne Hackborn 提供的。
标签: android c java-native-interface native android-source