2016-03-04 19 views
7

Sto cercando di creare un browser di file di root, tuttavia, ho alcuni problemi ad accedere alle directory root. Quando provo ad accedere a/data, la cartella è vuota.Accesso root con java.io.file su Android

Quando faccio questo:

File file = new File("/data/"); 

e quindi richiedere per le voci in quella directory, è vuota. (Nessun accesso root). So come eseguire semplici comandi di root usando un Process, ma poi non funzionerà sui telefoni senza root. Quindi ho bisogno di qualcosa che funzioni su tutti i telefoni.

Ho pensato di utilizzare File per i dispositivi senza radici e il comando ls per i dispositivi rooted, ma non so se sia la soluzione migliore. Potrei anche usare semplicemente ls con o senza root, ma mi piacerebbe usare File.

C'è un modo per creare un browser per i file di root, mantenendo anche il supporto per i telefoni non rooted?

Grazie

+0

È necessario controllare https://github.com/Stericson/RootTools e https://github.com/Stericson/RootShell – Guillaume

+0

Ho provato con il metodo 'File.listRoots()' e ho elencato i file con successo. e ad un certo punto mi mostra le cartelle di sistema quando ho usato il metodo 'file.getParent()'. – ELITE

+0

@Guillaume Non è quello solo per i dispositivi rooted? Voglio che funzioni su tutti i dispositivi. Inoltre preferisco non usare librerie esterne. –

risposta

1

Il tuo suggerimento è corretto. Non si può veramente usare File sui dispositivi rooted per accedere alle cartelle non disponibili senza root, quindi in questo caso dovrete sicuramente fare affidamento su ls. Fondamentalmente è possibile scegliere tra l'utilizzo di ls ovunque e l'utilizzo di un'astrazione che nasconderà i dettagli. In quest'ultimo caso si avrà un'interfaccia simile a File che utilizzerà File o ls in basso.

Ricordo di aver lavorato sullo stesso problema mentre stavo progettando il mio browser di file, e ho optato per la seconda soluzione. È più veloce usare File, quindi questa soluzione presenta alcuni vantaggi in termini di prestazioni. Ho anche dovuto scrivere il mio ls perché non volevo fare affidamento su quello fornito dal sistema in quanto non ci sono garanzie sull'output che fornisce.

Suggerisco anche di leggere How-To SU, ha molti dettagli utili su come chiamare correttamente i comandi.

+0

Sì, ho pensato di utilizzare entrambi i metodi. Non conosco il modo migliore per implementarlo. Come hai implementato questo? –

+0

@SuperThomasLab Nel mio caso era una classe 'FileItem' che conteneva i metodi simili a' File''s. Internamente ha due campi, 'File' e' NativeFile'. Quando è presente 'NativeFile', ad esso vengono delegate alcune chiamate. 'NativeFile' è responsabile di chiamare tutti i comandi necessari. – Malcolm

+0

Quindi 'FileItem' era la tua classe personalizzata che esegue diversi pezzi di codice per i telefoni rooted e senza root? Quindi per i dispositivi rooted 'ls' con' su' e per i dispositivi senza root 'ls' con' sh'? –