Autore Topic: Android - Scaling_governor app con radio buttons  (Letto 698 volte)

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Android - Scaling_governor app con radio buttons
« il: 13 Maggio 2013, 15:37:29 CEST »
0
Sposto qui la mia domanda, chiedo scusa:
Hola, premetto che sono nuovo nella programmazione Android quindi non uccidetemi ahah. Ho creato una shell (completamente funzionante) che mi cambia il governor della cpu del mio telefono android. Il sistema funziona ma chiaramente è un po scomodo ogni volta far partire il terminale ed eseguire la shell. Chiaramente è una cosa che non si fa tutti i giorni, me ne rendo conto, però mi piacerebbe creare una piccola app con una lista dei governors in stile radio buttons così al click del radio il governor viene cambiato. Allora, premettendo che ancora non so molto di android e della programmazione sua in generale, ho preso come riferimento uno script con dei radio button e c'ho ficcato un po di codice però non so se sia corretto. Il problema nonè tanto l'esecuzione del comando dello scalign_governor ma i permessi di root.
Codice (Java): [Seleziona]
package com.sunil.radiobutton;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

String[] hin1 = { "su", "-c","chmod 777 dev/scaling_governor" };
    try {
            Runtime.getRuntime().exec(hin1).waitFor();
        } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
              }
// Event handler for radio buttons
public void onRadioButtonClicked(View view) {

    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
    case R.id.radio_ondemand:
        if (checked)              
              String[] args = {"/system/bin/echo ondemand >",

"/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"};
                  ProcessBuilder cmd1;  
                  cmd1 = new ProcessBuilder(args);

                  Process process = cmd1.start();

                Toast.makeText(this, "You've selected: Ondemand", `Toast.LENGTH_LONG).show();`
            break;
        case R.id.radio_interactive:
            if (checked)
              String[] args = {"/system/bin/echo interactive >", `"/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"};`
              ProcessBuilder cmd1;  
              cmd1 = new ProcessBuilder(args);

              Process process = cmd1.start();

                Toast.makeText(this, "You've selected: Interactive", `Toast.LENGTH_LONG).show();`
            break;
        }
    }

}
Non so se il tutto sia corretto poichè non sono riuscito a testare il codice.. Il mio dubbio sta nei permessi di root più che altro. Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Android - Scaling_governor app con radio buttons
« Risposta #1 il: 13 Maggio 2013, 16:21:52 CEST »
0
Sposto qui la mia domanda, chiedo scusa:

Ok, ti ho rimosso l'altro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Android - Scaling_governor app con radio buttons
« Risposta #2 il: 13 Maggio 2013, 16:46:02 CEST »
0
Grazie mille chiedo ancora scusa...spero che qualcuno possa aiutarmi  ;-)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Android - Scaling_governor app con radio buttons
« Risposta #3 il: 13 Maggio 2013, 17:55:25 CEST »
0
Il tuo problema copre maggiormente le tematiche su come funziona il kernel di Linux rispetto alle API di Android.

Questa riga è sicuramente sbagliata, ha un path relativo e non assoluto:

Codice: [Seleziona]
"su", "-c","chmod 777 dev/scaling_governor"
nella home del app (tutte le app hanno una directory di partenza usata come riferimento per i path relativi) non c'è la directory "dev", nel logcat (che non hai riportato, devi sempre fornirlo in presenza di un errore) c'è sicuramente il messaggio dell'eccezione generata.

Francamente è un comando che non mi piace, pregiudichi la sicurezza del sistema, non si cambiano i permessi di un device di sistema in modo da renderlo leggibile e scrivibile a tutti.

Se vuoi cambiare il govenetor fallo direttamente da un app da root senza cambiare i permessi. Tieni anche conto che una CPU potrebbe non avere il govenetor, il device potrebbe chiamarsi in un altro modo (alcuni fabbricanti cambiano le cose a loro piacimento) e tieni conto che lo stai cambiando solo al primo core (cpu0), ormai molti dispositivi sono multi core.
adb logcat | tee /tmp/logcat | grep TAG

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Android - Scaling_governor app con radio buttons
« Risposta #4 il: 13 Maggio 2013, 18:19:28 CEST »
0
Il tuo problema copre maggiormente le tematiche su come funziona il kernel di Linux rispetto alle API di Android.

Questa riga è sicuramente sbagliata, ha un path relativo e non assoluto:

Codice: [Seleziona]
"su", "-c","chmod 777 dev/scaling_governor"
nella home del app (tutte le app hanno una directory di partenza usata come riferimento per i path relativi) non c'è la directory "dev", nel logcat (che non hai riportato, devi sempre fornirlo in presenza di un errore) c'è sicuramente il messaggio dell'eccezione generata.

Francamente è un comando che non mi piace, pregiudichi la sicurezza del sistema, non si cambiano i permessi di un device di sistema in modo da renderlo leggibile e scrivibile a tutti.

Se vuoi cambiare il govenetor fallo direttamente da un app da root senza cambiare i permessi. Tieni anche conto che una CPU potrebbe non avere il govenetor, il device potrebbe chiamarsi in un altro modo (alcuni fabbricanti cambiano le cose a loro piacimento) e tieni conto che lo stai cambiando solo al primo core (cpu0), ormai molti dispositivi sono multi core.
intanto ti ringrazio, comunque in effetti hai ragione su tutti i fronti.io volevo creare quest'applicazione principalmente per soddisfazione personale.poi per capire come funziona in un'app la gestione del root.onestamente devo ancora restare tutto, stasera provo cambiando un po' di cose, in primis i percorsi e poi la gestione di tutti i core.Chiaramente, nel mio caso avendo un Nexus 4, metterti tutti e 4 i core.l'applicazione fondamentalmente la faccio per me quindi a me va bene così :-)

Inviato dal mio Nexus 4 con Tapatalk 2


Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Android - Scaling_governor app con radio buttons
« Risposta #5 il: 15 Maggio 2013, 06:41:56 CEST »
0
Ok, ci sono riuscito :-) e funziona :-) chiaramente cambiando un bel po' di cose.

Inviato dal mio Nexus 4 con Tapatalk 2
« Ultima modifica: 15 Maggio 2013, 06:45:42 CEST da punticci »