Sto scrivendo un'app che deve funzionare su un Sony xperia z rootato (Android 4.4.2, build numero 10.5.A.0.230). L'applicazione legge le velocità di base dei quattro nuclei passando una delle seguenti stringhe ...Accesso incoerente alle directory sul telefono rooted
"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq"
... la seguente funzione ...
long sysfilenum(String str)
{
String text = null;
try
{
File file = new File(str);
BufferedReader br = new BufferedReader(new FileReader(file));
text = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return Long.valueOf(text);
}
Questa funzione viene eseguita una volta per secondo:
Tutto funziona perfettamente. Visualizzo i numeri nella mia app e vedo che si comportano esattamente come mi aspetterei. Le velocità del core sono spesso diverse l'una dall'altra, e quando il core si surriscalda troppo (ho letto anche la temperatura della CPU) le velocità si riducono. Quindi sono sicuro che questi numeri vengano letti correttamente.
Ora è qui che inizia il mistero. Se apro una shell adb sul mio dispositivo, digita "su" come mio primo comando. Posso navigare nella directory "/ sys/devices/system/cpu/cpu0/cpufreq /" senza problemi. Ma se provo a navigare nelle directory per il core 1,2 o 3. Ottengo "No such file or directory". Sono sconcertato.
EDIT: Ho appena testato utilizzando un emulatore di terminale che gira sul dispositivo stesso, e trovato le directory per tutte le anime che potuto accesso. Quindi la sua shell adb si sta comportando in modo strano.
MODIFICA: Solo su un'intuizione ho provato su -c "ls cpu1/cpufreq/"
e ha funzionato, ho visto la directory cpu1. Quindi forse digitando su nella shell adb non mi è stato concesso l'accesso come superutente??
MODIFICA: OMG! Ho appena eseguito su -c "ls cpu1/cpufreq/"
più e più volte per scoprire che a volte ha funzionato (cioè ho visto l'elenco delle directory) ea volte no (cioè non ho trovato alcun file o directory)!
EDIT:: Secondo this document, sembra che le directory sono virtuali. Ad un certo punto dice "cd/sys/devices/system/cpu # una directory virtuale resa visibile dai driver di dispositivo". Hmmm, forse ho incasinato i driver del dispositivo?
L'accesso root non si applica al codice java o a qualsiasi altra cosa nei processi della tua applicazione, quindi è apparentemente irrilevante per il tuo obiettivo. Tutto ciò che è riuscito a cambiare in/sys dovrebbe essere corretto al riavvio. –