I need to get root access via su to lunch a TcpDump binary (I am working on a sort of android sniffer). I use this code :
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os = new DataOutputStream(process.getOutputStream());
os.writeBytes("/data/local/tcpdump-arm -c 10 -s 0 -w /data/local/out.txt\n");
os.writeBytes("exit\n");
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
It works perfectly on a rooted phone, but I want to achieve this in the emulator.
By default you can't get root privileges via su on the emulator (although it's possible via adb shell).
I have found this post
But it doesn't work for me. I read somewhere this tip wont work with the curent revision of the sdk, but it doesn't say with which it will work.
I try with sdk revision 10 and the avd run Android 2.1.
Ok, I solve the problem by myself :/
It works with sdk revision 10 and in an avd 2.2. The problem with the tip I have followed previously is the remount step. Here is the list of commands working for me (extract from http://forum.xda-developers.com/showthread.php?t=821742) :
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system
adb push su /system/xbin/su
adb shell chmod 06755 /system
adb shell chmod 06755 /system/xbin/su
adb install superuser.apk
You can get the su binary and the superuser app here : http://forum.xda-developers.com/showthread.php?t=682828
You have to do that each time you start the emulator.
I was able to get superuser.apk to stay between reboots by deleting /system/app/SdkSetup.apk
I just checked again now and it was recreated, but I still have Superuser.apk between my reboots.
I would also recommend pushing a busybox binary along with su.
Note that the steps from a.b.d also worked for AVD emulator with OS 2.3.3 Gingerbread.
I downloaded su-2.3.6.1-signed.zip from the link provided.
Also, I created a .bat file containing the commands provided by a.b.d for instant execution.