Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    154

    [ANDROID] java.io.IOException: Error running exec(). Command

    Hola a tutti, ho creato un bottone che al click mi prende una shell e me la fa eseguire. Questo è il codice MainActivity.java
    codice:
    package com.mkyong.android;
     
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    import java.io.IOException;
    import com.example.toast.R;
     
    public class MainActivity extends Activity {
     
       private Button button;
     
       public void onCreate(Bundle savedInstanceState) {
     
          super.onCreate(savedInstanceState);
          setContentView(R.layout.tab1);   
     
          button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new OnClickListener() {
                @SuppressLint("SdCardPath")
             @Override
                public void onClick(View arg0) {
                    Process p=null;
                    try {
                        p = new ProcessBuilder()
                        .command("/sdcard/scritturafile.sh")
                        .start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if(p!=null) p.destroy();
                    }
                }
            });
       }
    }
    il codice pare giusto. Non mi da errori.. Praticamente per provare, ho creato una shell che mi crea un file di testo (ciaomonodo.txt) con dentro appunto scritto ciaomondo... Beh chiaramente non va e il log è questo:
    codice:
    04-09 17:33:38.323: W/System.err(15320): java.io.IOException: Error running exec(). Command: [/sdcard/scritturafile.sh] Working Directory: null Environment: [EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, TERM=linux, ANDROID_SOCKET_zygote=9, ANDROID_STORAGE=/storage, ANDROID_BOOTLOGO=1, EXTERNAL_STORAGE=/storage/emulated/legacy, ANDROID_ASSETS=/system/app, ANDROID_CACHE=/cache, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ASEC_MOUNTPOINT=/mnt/asec, LOOP_MOUNTPOINT=/mnt/obb, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar, EMULATED_STORAGE_TARGET=/storage/emulated, TERMINFO=/system/etc/terminfo, ANDROID_DATA=/data, LD_LIBRARY_PATH=/vendor/lib:/system/lib, ANDROID_ROOT=/system, ANDROID_PROPERTY_WORKSPACE=8,49152]
    Quindi quando premo il bottone lui tenta di prendere la shell ma non riesce ad eseguirla.. Qualcuno sa perchè? Thanks

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    diciamo che senza saper né leggere né scrivere controllerei questo

    codice:
    04-09 17:33:38.323: W/System.err(15320): java.io.IOException: Error running exec(). Command: [/sdcard/scritturafile.sh] Working Directory: null
    cioè da cosa deriva questo errore. Il fatto che non riesca a trovare la working directory creeedoooo sia la fonte del tuo errore.

    Una rapida ricerca su google e stackoverflow (solo per dirne uno).

    Se non vuoi usare il runtime, setta bene l'ambiente
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    154
    Originariamente inviato da valia
    diciamo che senza saper né leggere né scrivere controllerei questo

    codice:
    04-09 17:33:38.323: W/System.err(15320): java.io.IOException: Error running exec(). Command: [/sdcard/scritturafile.sh] Working Directory: null
    cioè da cosa deriva questo errore. Il fatto che non riesca a trovare la working directory creeedoooo sia la fonte del tuo errore.

    Una rapida ricerca su google e stackoverflow (solo per dirne uno).

    Se non vuoi usare il runtime, setta bene l'ambiente
    Eh ci sto sbattendo la testa da qualche giorno anche su stackoverflow . Non sono sicuro ma forse il problema è proprio il percorso nella sdcard..dovrei portare la shell nella root ma ora sono via quindi non posso provare.. l'alternativa è usare questo codice :
    codice:
    package com.mkyong.android;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    import java.io.IOException;
    import com.example.toast.R;
    
    public class MainActivity extends Activity {
    
    
    private Button button;
    
    public void onCreate(Bundle savedInstanceState) {
        final Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec("su");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1);
    
    
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            @SuppressLint("SdCardPath")
            @Override
            public void onClick(View arg0) {
                final Runtime runtime = Runtime.getRuntime();
                try {
                    runtime.exec("echo 3 > /proc/sys/vm/drop_caches");
                    Toast.makeText(MainActivity.this, "Script lanciato con `successo, memoria svuotata.", Toast.LENGTH_LONG).show();`
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    }
    Dove eseguo direttamente dal java l'istruzione contenuta nella shell. Il che sarebbe anche meglio cosi non sono legato allo script esterno. Ma il punto è che non va se devo fare un mkdir o la creazione di un file di testo funziona ma con echo 3 > /proc/sys/vm/drop_caches no...non capisco.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ok...allora, siamo arrivati al post.

    echo 3 e basta funziona?

    tu poi fai un redirect ad una locazione, hai i permessi per accedere a quella locazione?

    per sicurezza io stamperei a video il command output e il command error, da li si potrebbe intuire qualcosa.

    Che errore ottieni inoltre?
    RTFM Read That F*** Manual!!!

  5. #5
    se ho ben capito il problema è nel percorso della sdcard, giusto?
    se cosi, come lo imposti?

    io quando devo fare operazioni su file sulla sdcard uso questo:
    codice:
    private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
    non so se può esserti d'aiuto!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    154
    Quello che mi hanno scritto su stackoverflow rigurardo questo mio ultimo codice è stato:
    Your runtime.exec("su"); just started a shell process. And your next "runtime.exec("echo 3 > xxx")"; is not executed in the first shell.

    My suggestion is to stick with java.lang.process, start a process which executes "su" and use the redirected stdin to write your command to it.

    Onestamente io ho capito in parte...non so come uscirne.E' un cruccio sta cosa. Non riesco a capire perchè funzionano tutti i comandi ma questo no!!!! E' incredibile! Giuro che offro una birra a chi mi aiuta xD

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    154
    Originariamente inviato da valia
    ok...allora, siamo arrivati al post.

    echo 3 e basta funziona?

    tu poi fai un redirect ad una locazione, hai i permessi per accedere a quella locazione?

    per sicurezza io stamperei a video il command output e il command error, da li si potrebbe intuire qualcosa.

    Che errore ottieni inoltre?
    Quello che è assurdo è che non mi da errori in sè il programma... il punto è che non fa quel che deve fare.. quel comando "echo 3 > etc etc" da shell e da terminale funziona. Io ho una cyano sul galaxy nexus quindi ho il root. Posso accedere a qualunque cartella volendo e a qualunque file. Non capisco perchè non riesce ad andare. Il codice comunque per la sdcard dopo lo provo ma a sto punto vorrei risolvere il problema con il secondo codice postato che per lo meno non mi lega alla shell che ho scritto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    154
    Originariamente inviato da fermat
    se ho ben capito il problema è nel percorso della sdcard, giusto?
    se cosi, come lo imposti?

    io quando devo fare operazioni su file sulla sdcard uso questo:
    codice:
    private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
    non so se può esserti d'aiuto!
    Non so se effettivamente il problema sia quello perchè a dire il vero ho provato a metterlo anche nella root il file .sh ma non cambia nulla ma in caso questa porzione di codice dove dovrei inserirla?

  9. #9
    dentro l'acctivity:
    codice:
    public class MyActivity extends Activity {
    	
    	private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
    
    }
    questo identifica il percorso della sdcard: /sdcard.

    poi devi specficiare il file.
    ad esempio io scarico un file json da remoto:
    codice:
    String myFile = path + "file.json";

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    codice:
    Process p = Runtime.getRuntime().exec("cd " + Environment.getExternalStorageDirectory().getAbsolutePath());
    questo funziona? ci entri solamente
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.