我尝试直接读取文件,但即使这样也行不通(它每次都要求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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)