使用平台签名对应用程序进行签名后,我们可以获得什么样的访问权限



我已经构建了一个自定义ROM,并获得了该构建的平台密钥。现在我正在创建一个使用平台密钥签名的系统应用程序。

现在,我想让应用程序在system/priv应用程序文件夹中写一些东西。当我在根手机中运行具有超级用户访问权限的应用程序时,代码就可以工作了。

但是,对于使用平台密钥签名的应用程序来说,这种访问可能吗?

我尝试过以下几种:

public class MainActivity extends AppCompatActivity {
private static final String DEBUG_TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        Log.i(DEBUG_TAG, "Here");
        Process process = Runtime.getRuntime().exec("chmod 777 /system/priv-app");

        DataOutputStream dataOutputStream = new DataOutputStream(process.getOutputStream());

        dataOutputStream.writeBytes("touch /system/priv-app/foo.txtn");
        dataOutputStream.flush();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine())!= null) {
            stringBuilder.append(line + "n");
        }
        Log.i(DEBUG_TAG, stringBuilder.toString());
    } catch (Exception e) {
        e.printStackTrace();
        Log.i(DEBUG_TAG, "IO Error");
    }
}
}

我没有从应用程序的运行时获得任何输出,甚至没有错误,但文件不是在目录中创建的。

是否存在实现错误或无法访问?

系统应用程序具有系统级访问权限。要重新安装系统分区,您需要具有root访问权限,因此如果没有"外部"帮助,您将无法写入privap-app目录。

如果您正在构建自己的自定义ROM,您可以创建一个Daemon,该Daemon将在具有root访问权限的Android堆栈的较低级别上运行(有关如何在启动时运行可执行Daemon的详细信息,请参阅Android引导)。您可以通过本地套接字与守护程序通信,并使用它来重新装载系统分区和复制所需的文件。

您可以参考以下教程,该教程解释了如何创建一个将打开套接字并等待传入连接的本机服务器:Unix套接字。

默认情况下,系统文件夹安装为只读。有了root访问权限,你可以重新安装它,但我不建议像这样运行超过必要的时间(比将应用程序安装在priv应用程序文件夹中所需的时间更长)。首先,如果它安装了rw,并且你进行了出厂重置,你会用砖砌你的设备(除非你有一个恢复分区)。

最新更新