Ich versuche, die Datenbank von einer anderen Anwendung zugreifen und seinen Inhalt an die Konsole aus (root), aber aus irgendeinem Grund erhalte ich diese Antwort:Fehler: unvollständige SQL: ls
E/[Error]: Error: incomplete SQL: ls
E/[Error]: exit
I don verstehe nicht wirklich, warum das passiert. Ich habe versucht, meine Syntax in Escape-Zitate zu setzen, ich versuchte andere SQLite-Befehle, aber es scheint nicht richtig zu funktionieren.
Ich kann auf die Datenbank zugreifen und drucken Sie Inhalte mit ADB über meinen PC mit dem gleichen Pfad, und wenn ich den Knopf in meiner Anwendung drücken fragt mich für Root-Zugang, so dass diese 2 sind nicht die Probleme.
Mein verdummt Code:
onCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnCon = (Button)findViewById(R.id.button1);
btnCon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RunWithRoot("su shell -c sqlite3 \"data/data/app.package/databases/Database.db\" \"select * from messages;\"");
}
});
}
RunWithRoot
private void RunWithRoot(String textView) {
try {
String line;
Process process = Runtime.getRuntime().exec(textView);
OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
stdin.write(("ls\n").getBytes());
stdin.write("exit\n".getBytes());
stdin.flush();
stdin.close();
BufferedReader br =
new BufferedReader(new InputStreamReader(stdout));
while ((line = br.readLine()) != null) {
Log.d("[Output]", line);
}
br.close();
br =
new BufferedReader(new InputStreamReader(stderr));
while ((line = br.readLine()) != null) {
Log.e("[Error]", line);
}
br.close();
process.waitFor();
process.destroy();
} catch (Exception ex) {
}
}
Kennt jemand, was ich falsch mache? Ich bin sehr neu in der Android-Entwicklung und noch neueren zu root. Wenn mich jemand damit in die richtige Richtung werfen könnte, wäre das sehr geschätzt.
PS: Diese App wird nur für den persönlichen Gebrauch, so dass ich keine Schecks müssen sehen, ob die Menschen Wurzel haben, oder wenn der Pfad vorhanden ist, etc .. Ich habe gehört, schon ein paar Entwickler den Köpfen Sorgen heh
Warum machst du 'stdin.write ((" ls \ n "). GetBytes());'? –
@ScaryWombat Heilige Scheiße Ich bin wirklich sehr blind. Vielen Dank! Allerdings heißt es: "Datenbank kann nicht geöffnet werden" data/data/app.pkge/databases/Database.db ": Datenbankdatei kann nicht geöffnet werden" jetzt –
Ist der Pfad korrekt? –