Android: ejecutar comandos su de forma programática no funciona

Necesito mi aplicación para realizar algunossu comandos programáticamente (el teléfono está rooteado).

Cuando termine de usar adb, los comandos funcionan.

Por ejemplo:su -c "mkdir /sdcard/testdir" crea un directorio llamado "testdir" en / sdcard.

Cuando llamo:

    p = Runtime.getRuntime().exec("su -c \"mkdir /sdcard/testdir\"");
    p.waitFor();

Simplemente sigue adelante y no ocurre ningún cambio.

Traté de leer la entrada:

DataInputStream dis = new DataInputStream(p.getInputStream());
    while((temp = dis.readLine())!=null)
        Log.d(ctx.TAG,"she,ll:"+temp);

Pero no informa nada (el ciclo hace 0 iteraciones).

¿Alguien ha enfrentado este problema antes? ¿Cómo se puede resolver? Innecesario hoy en día, los comandos que no son suyos funcionan programáticamente con este método.

Nota: dimkdir como ejemplo (sé que no necesariamente requiere su). Necesito muchos comandos variados para ejecutar bajosu

¡Gracias!

EDITAR: cuando llamosu -c "id" programáticamente, hay una salida que uid = 0.

Respuestas a la pregunta(4)

Su respuesta a la pregunta