android – 打开任何SQLiteDatabase作为suroot

android – 打开任何SQLiteDatabase作为suroot,第1张

概述我知道,我可以以root用户身份启动进程,但是如何创建具有给定路径的SQlite Database(ANY路径,即另一个应用程序数据库)?作为此根进程中的此root用户… 我尝试直接读取文件,但即使这样也行不通(它每次都要求root访问权限)并且它只打印一个空结果(因为找不到sqlite3) String path = "/data/data/<app_package>/databases/<da 我知道,我可以以root用户身份启动进程,但是如何创建具有给定路径的sqlite Database(ANY路径,即另一个应用程序数据库)?作为此根进程中的此root用户…

我尝试直接读取文件,但即使这样也行不通(它每次都要求root访问权限)并且它只打印一个空结果(因为找不到sqlite3)

String path = "/data/data/<app_package>/databases/<database_name>"; Process p = Runtime.getRuntime().exec("su sqlite3 -csv " + path + " \"select * from test\";"); StringBuilder res = new StringBuilder(); String line; while ((line = bufferedReader.readline()) != null)     res.append(line + "\n");

实际上,我想阅读另一个应用程序数据库的内容,我该如何正确地做到这一点?我满足于以下两个解决方案之一:

>将查询的内容作为csv或类似内容获取
>以root身份获取sqliteDatabase对象,使用给定的数据库路径(首选,因为它更灵活)

部分解决方案:

看到我的回答……

但是:还有一个问题,它每次都要求su权限,我该如何避免这种情况?

解决方法 以下工作到目前为止,只有一个问题:它每次都要求权限…可能是因为新的进程……

try{String dbname = "<database_name>";String packageSrc = "<package_source>";String pathSource = "/data/data/" + packageSrc + "/databases/" + dbname;String pathTarget = "/data/data/" + MainApp.getAppContext().getPackagename() + "/databases/" + dbname;// 1) delete old copIEd @R_502_6852@// 2) copy @R_502_6852@// 3/4) set permissions of copIEd @R_502_6852@String commandDelete = "rm " + pathTarget + "\n";String commandcopy = "cat " + pathSource + " > " + pathTarget + "\n";String commandCHOwn = "chown root.root " + pathTarget + "\n";String commandCHMod = "chmod 777 " + pathTarget + "\n";Process p = Runtime.getRuntime().exec("su");OutputStream os = p.getoutputStream();os.write((commandDelete).getBytes("ASCII"));os.flush();os.write((commandcopy).getBytes("ASCII"));os.flush();os.write((commandCHOwn).getBytes("ASCII"));os.flush();os.write((commandCHMod).getBytes("ASCII"));os.flush();os.close();try{    p.waitFor();    if (p.exitValue() != 255)    {        sqliteDatabase db = sqliteDatabase.openDatabase(pathTarget,null,sqliteDatabase.OPEN_Readonly);        // be happy and work with the database    }}catch (InterruptedException e){    // error}}catch (IOException e){// error}
总结

以上是内存溢出为你收集整理的android – 打开任何SQLiteDatabase作为su / root全部内容,希望文章能够帮你解决android – 打开任何SQLiteDatabase作为su / root所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1125242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存