Related
Hi, i am trying to run adb and su commands in onclicklistener of my button of android app and here is my code
Code:
btnCheckSu.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Process p; String[] st = new String[3];
try {
st[0]="/system/bin/su";
st[1]="-c";
st[2]="reboot";
p = Runtime.getRuntime().exec(st);
Toast.makeText(SUCheck.this, "Rebooting...", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
I do get the prompt for su but then phone does not reboot...any help please
thanks
Well im not sure about the su commands but the reboot intent is restricted to processes signed with the same key as the platform you are using (essentially the key used to sign the rom you are using)
It could be the same with using su to reboot. Not sure though
--------
I tried it on the terminal emulator and it worked after entering the command twice for some reason
From something awesome
Try your commands via adb root shell first. If they work then u know the condemns are good and can try something else. All so without capturing process output there it's no way to know what's going on.
Sent from my MB860 using Tapatalk
Why not use the standard android api?
Code:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot("");
You'll need the REBOOT permission though.
HomerSp said:
Why not use the standard android api?
Code:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot("");
You'll need the REBOOT permission though.
Click to expand...
Click to collapse
Because as i said before the reboot permission is only valid on system apps signed with the platform key
From something awesome
killersnowman said:
Because as i said before the reboot permission is only valid on system apps signed with the platform key
From something awesome
Click to expand...
Click to collapse
You're right, sorry.
Try this instead, it worked fine for me.
Code:
Runtime.getRuntime().exec("su -c /system/bin/reboot");
i guys
thanks for the above replies...
but none of the above suggestion has worked for me...any other clues please
thanks
.../me repeats himself...
CAPTURE UR OUTPUT, without it we cant know what is going wrong.
Try your commands via adb shell first, if they work there they will also work via your phone.
yup, great.... adb working through my pc shell
capturing output...i have to work that out how...cheers
hisheeraz said:
yup, great.... adb working through my pc shell
capturing output...i have to work that out how...cheers
Click to expand...
Click to collapse
from your process create datastreams for your process.getInputStream() and process.getErrorStream(). After execution dump streams to file/logcat/w/e.
hisheeraz said:
yup, great.... adb working through my pc shell
capturing output...i have to work that out how...cheers
Click to expand...
Click to collapse
Try this:
Code:
btnCheckSu.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Process p; String[] st = new String[3];
try {
st[0]="/system/bin/su";
st[1]="-c";
st[2]="reboot";
p = Runtime.getRuntime().exec(st);
[COLOR="Red"] String s;
DataInputStream is=new DataInputStream(p.getInputStream());
DataInputStream er=new DataInputStream(p.getErrorStream());
Log.i("MyApp","stdout:\n");
while((s=is.readLine())!=null){
Log.i("MyApp",s+"\n");
}
Log.i("MyApp","stderr:\n");
while((s=er.readLine())!=null){
Log.i("MyApp",s+"\n");
}
[/COLOR]
Toast.makeText(SUCheck.this, "Rebooting...", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
sorry for being such a pain but my Log.i is empty there is absolutely nothing there
even after reinstalling the app in my phone nothing is in Log.i
help please...
EDIT:1
HERE IS THE LOG.I
sdtout:
stderr:
not permitted!
also i am using REBOOT permission in my manifest...i donot think i need it but just in case
hisheeraz said:
sorry for being such a pain but my Log.i is empty there is absolutely nothing there
even after reinstalling the app in my phone nothing is in Log.i
help please...
EDIT:1
HERE IS THE LOG.I
sdtout:
stderr:
not permitted!
Click to expand...
Click to collapse
bla,
try without -c. then also try...
reboot
reboot -f
busybox reboot
busybox reboot -f
hey thanks
/system/bin/su
-c
busybox reboot -f
is working...but
busybox reboot recovery -f
of
busybox reboot recovery
is not working. thanks for your effort and help,
i will dig into this tomorrow and will post you my feed back, it is really late here in AU :O
regards
Hi,
what is the command to reboot in recovery bootloader ecc?
I will insert in my app through this library
rampo said:
Hi,
what is the command to reboot in recovery bootloader ecc?
I will insert in my app through this library
Click to expand...
Click to collapse
The command for rebooting is
Code:
reboot
Use that to reboot into recovery:
Code:
reboot recovery
For bootloader you need to use adb:
Code:
adb reboot-bootloader
Runtime.getRuntime().exec(new String[]{"su","-c","reboot bootloader"});
Sent from my HTC One using xda premium
Not permitted
Not permitted!
Click to expand...
Click to collapse
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
pinpong said:
Runtime.getRuntime().exec(new String[]{"su","-c","reboot bootloader"});
Sent from my HTC One using xda premium
Click to expand...
Click to collapse
He wants to use RootTools.
For that use:
Code:
Command command = new Command(0, "reboot bootloader") {
[user=439709]@override[/user]
public void output(int id, String line) {
//TODO: Do something with the output here
}
};
RootTools.getShell(true).add(command).waitForFinish();
EDIT: @override: The first letter needs to be upper case (Doesn't let me as it thinks of it as a mentioning function.)
---------- Post added at 10:02 PM ---------- Previous post was at 10:00 PM ----------
rampo said:
Click to expand...
Click to collapse
First you need to be a root user.
Type "su" as the first command.
If you use RootTools you can execute commands as root without having to type "su" the way I gave you above.
Second adb commands must be launched from your computer.
nikwen said:
He wants to use RootTools.
For that use:
Code:
Command command = new Command(0, "reboot bootloader") {
[user=439709]@override[/user]
public void output(int id, String line) {
//TODO: Do something with the output here
}
};
RootTools.getShell(true).add(command).waitForFinish();
Click to expand...
Click to collapse
Same logcat : "Not permited!"
First you need to be a root user.
Click to expand...
Click to collapse
Don't warry man
Type "su" as the first command.
Click to expand...
Click to collapse
Already done.
If you use RootTools you can execute commands as root without having to type "su" the way I gave you above.
Click to expand...
Click to collapse
Ok, thanks.
Second adb commands must be launched from your computer.
Click to expand...
Click to collapse
Yes, i know, but i've tried
pinpong said:
Runtime.getRuntime().exec(new String[]{"su","-c","reboot bootloader"});
Sent from my HTC One using xda premium
Click to expand...
Click to collapse
Same "Not permited!"
rampo said:
Same logcat : "Not permited!"
Don't warry man
Already done.
Click to expand...
Click to collapse
In the screenshot you did not.
Ok, thanks.
Yes, i know, but i've tried
Click to expand...
Click to collapse
If I type "su", then press enter and then "reboot recovery", everything works fine.
Look at this for rebooting into bootloader: http://www.androidcentral.com/android-201-10-basic-terminal-commands-you-should-know
EDIT: You can see whether you typed "su" by looking at the last character of one line. If it is a # instead of a $, you typed "su".
EDIT: You can see whether you typed "su" by looking at the last character of one line. If it is a # instead of a $, you typed "su".
Click to expand...
Click to collapse
There is a "#"
If I type "su", then press enter and then "reboot recovery", everything works fine.
Click to expand...
Click to collapse
.
Not for me, i said this in my second post
HTC One, stock rooted ROM
rampo said:
There is a "#"
.
Not for me, i said this in my second post
HTC One, stock rooted ROM
Click to expand...
Click to collapse
Then it is because of the implementation of the reboot command of your ROM. On my Samsung Galaxy Ace with AOKP it is working fine.
Maybe you could compile your own busybox and include the reboot command. Then copy it into the data directory of your app and run the commands by typing their full path like this:
Code:
/data/data/com.example.app/files/busybox reboot recovery
Maybe you could compile your own busybox and include the reboot command. Then copy it into the data directory of your app and run the commands by typing their full path like this:
Click to expand...
Click to collapse
Mmm, if i add this myself-compiled busybox version to my app, this will work with all devices?
Because as you can read in the first post, the command should be written in the app I'm working on.
Or there is a universal another command or another way to do it?
rampo said:
Mmm, if i add this myself-compiled busybox version to my app, this will work with all devices?
Because as you can read in the first post, the command should be written in the app I'm working on.
Or there is a universal another command or another way to do it?
Click to expand...
Click to collapse
I really thought that you could use the "reboot recovery" on every device.
However, this is one of the best examples for different implementations on different devices. For example on some phones the "ls" command is linked to "ls -l" (Source). That is why busybox is always the better way. It is working the same on all devices and ROMs.
You need to compile it yourself because the one which is installed by this app does not include the reboot command.
I think that there is no other way as the "universal" did not work on your device. Maybe anotherone has a better idea, but I do not think so.
I really thought that you could use the "reboot recovery" on every device.
However, this is one of the best examples for different implementations on different devices. For example on some phones the "ls" command is linked to "ls -l" (Source). That is why busybox is always the better way. It is working the same on all devices and ROMs.
Click to expand...
Click to collapse
Thanks man, I've tried
Code:
su
reboot recovery
and
Code:
su
reboot bootloader
in my Galaxy Nexus, it works.
I will develop and test the app on Nexus, pure Google software
You could grab the reboot binary (I attached mine from the nexus 7), put it in /system/xbin then do this in terminal :
Code:
su
chmod 775 /system/xbin/reboot
After which, reboot/reboot-recovery/reboot-bootloader should work.
If this works, you can include the binary in the assets folder of your app, then copy it to /system/xbin and chmod it in your code.
Code:
File sdCard = Environment.getExternalStorageDirectory().toString();
File update = new File( sdCard + "reboot");
if (update.exists()) {
System.out.println("reboot binary already exists on sdcard");
} else {
try {
update.createNewFile();
System.out.println("File created successfully");
InputStream is = getAssets().open("reboot");
FileOutputStream fos = new FileOutputStream(update);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
System.out.println("reboot binary successfully moved to sdcard");
// Close the streams
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("busybox mount -o remount,rw /system"+"\n");
os.writeBytes("cp -f " + sdCard + "/reboot /system/xbin/reboot" + "\n");
os.writeBytes("chmod 775 /system/xbin/reboot" + "\n");
os.writeBytes("rm -f " + sdCard + "/reboot " + "\n");
os.writeBytes("busybox mount -o remount,ro /system"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
private void rebootToRecovery() {
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("reboot recovery"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
Damn, we really need syntax highlighting and indentation in the code forum tags...
Androguide.fr said:
You could grab the reboot binary (I attached mine from the nexus 7), put it in /system/xbin then do this in terminal :
Code:
su
chmod 775 /system/xbin/reboot
After which, reboot/reboot-recovery/reboot-bootloader should work.
If this works, you can include the binary in the assets folder of your app, then copy it to /system/xbin and chmod it in your code.
Code:
File sdCard = Environment.getExternalStorageDirectory();
sdCard.toString();
File update = new File( sdCard + "reboot");
if (update.exists()) {
System.out.println("reboot binary already exists on sdcard");
} else {
try {
update.createNewFile();
System.out.println("File created successfully");
InputStream is = getAssets().open("xbin");
FileOutputStream fos = new FileOutputStream(update);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
System.out.println("reboot binary successfully moved to sdcard");
// Close the streams
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("busybox mount -o remount,rw /system"+"\n");
os.writeBytes("cp -f " + sdCard + "/reboot /system/xbin/reboot" + "\n");
os.writeBytes("chmod 775 /system/xbin/reboot");
os.writeBytes("busybox mount -o remount,ro /system"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
private void rebootToRecovery() {
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("reboot recovery"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
Damn, we really need syntax highlighting and indentation in the code forum tags...
Click to expand...
Click to collapse
Genial
And there is a command for SafeMode reboot?
rampo said:
Genial
And there is a command for SafeMode reboot?
Click to expand...
Click to collapse
What do you mean by SafeMode ?
Androguide.fr said:
You could grab the reboot binary (I attached mine from the nexus 7), put it in /system/xbin then do this in terminal :
Code:
su
chmod 775 /system/xbin/reboot
After which, reboot/reboot-recovery/reboot-bootloader should work.
If this works, you can include the binary in the assets folder of your app, then copy it to /system/xbin and chmod it in your code.
Code:
File sdCard = Environment.getExternalStorageDirectory();
sdCard.toString();
File update = new File( sdCard + "reboot");
if (update.exists()) {
System.out.println("reboot binary already exists on sdcard");
} else {
try {
update.createNewFile();
System.out.println("File created successfully");
InputStream is = getAssets().open("xbin");
FileOutputStream fos = new FileOutputStream(update);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
System.out.println("reboot binary successfully moved to sdcard");
// Close the streams
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("busybox mount -o remount,rw /system"+"\n");
os.writeBytes("cp -f " + sdCard + "/reboot /system/xbin/reboot" + "\n");
os.writeBytes("chmod 775 /system/xbin/reboot" + "\n");
os.writeBytes("rm -f " + sdCard + "/reboot " + "\n");
os.writeBytes("busybox mount -o remount,ro /system"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
private void rebootToRecovery() {
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("reboot recovery"+"\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
Damn, we really need syntax highlighting and indentation in the code forum tags...
Click to expand...
Click to collapse
Really great idea. :good: Respect!
Just one thing I would do another way: I would copy the reboot binary to the data folder of the app so that the system is not modyfied.
If the default reboot binary has some additional functions which the system needs, there could go something wrong.
rampo said:
Click to expand...
Click to collapse
Simply type
Code:
su
reboot
PhAkEer said:
Simply type
Code:
su
reboot
Click to expand...
Click to collapse
nikwen said:
Really great idea. :good: Respect!
Just one thing I would do another way: I would copy the reboot binary to the data folder of the app so that the system is not modyfied.
If the default reboot binary has some additional functions which the system needs, there could go something wrong.
Click to expand...
Click to collapse
Yeah you're definitely right, would be better practice :good:
PhAkEer said:
Simply type
Code:
su
reboot
Click to expand...
Click to collapse
Dude, just read the thread...
Hi
I'm developing a new app that make changes into SystemUi.apk and i don't want restart me device to see changes and I want just restart SystemUi.apk...
is there any way???
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
plz take look at this...
http://forum.xda-developers.com/showthread.php?t=2434597
poria1999 said:
Hi
I'm developing a new app that make changes into SystemUi.apk and i don't want restart me device to see changes and I want just restart SystemUi.apk...
is there any way???
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
plz take look at this...
http://forum.xda-developers.com/showthread.php?t=2434597
Click to expand...
Click to collapse
You can restart the service using adb's ActivityManager (am) using the following command
Code:
am startservice -n com.android.systemui/.SystemUIService
To execute the same command from your app, make use of Runtime.
Code:
final Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("su -c am startservice -n com.android.systemui/.SystemUIService");
}
catch (IOException e) {
e.printStackTrace();
}
vijai2011 said:
You can restart the service using adb's ActivityManager (am) using the following command
Code:
am startservice -n com.android.systemui/.SystemUIService
To execute the same command from your app, make use of Runtime.
Code:
final Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("su -c am startservice -n com.android.systemui/.SystemUIService");
}
catch (IOException e) {
e.printStackTrace();
}
Click to expand...
Click to collapse
tnx
I have one question more...
can u give me a example code to mount system and write sth on?
Edit:How i can start it again?
poria1999 said:
tnx
I have one question more...
can u give me a example code to mount system and write sth on?
Click to expand...
Click to collapse
Try below code. Cant test it ATM
Code:
runtime.exec("su -c mount -o remount,rw /system");
File myfile = new File(Environment.getExternalStorageDirectory() + File.separator + "test.txt");
myfile.createNewFile();
String data ="My test data";
//write the data in file
if(myfile.exists())
{
try {
OutputStream os = new FileOutputStream(myfile);
os.write(data);
os.close();
Toast.makeText(this, "File created successfully", Toast.LENGTH_SHORT).show();
}catch (IOException e)
{e.printStackTrace();}
runtime.exec("su -c" + Environment.getExternalStorageDirectory() + File.separator + "test.txt" + "/system/");
}
//deleting the temp file
file.delete();
Toast.makeText(this, "File copied and deleted from temp dir", Toast.LENGTH_SHORT).show();
To start it again, put that in a function and call that function whenever you want to execute it.
Example of function:
Code:
public void myfunc(){
//Your code to be executed more than once
}
And in some other function, say onCreate(), call
Code:
myfunc();
vijai2011 said:
You can restart the service using adb's ActivityManager (am) using the following command
Code:
am startservice -n com.android.systemui/.SystemUIService
To execute the same command from your app, make use of Runtime.
Code:
final Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("su -c am startservice -n com.android.systemui/.SystemUIService");
}
catch (IOException e) {
e.printStackTrace();
}
Click to expand...
Click to collapse
this code doesn't work for me bro...
Edit:
vijai2011 said:
Try below code. Cant test it ATM
Code:
runtime.exec("su -c mount -o remount,rw /system");
File myfile = new File(Environment.getExternalStorageDirectory() + File.separator + "test.txt");
myfile.createNewFile();
String data ="My test data";
//write the data in file
if(myfile.exists())
{
try {
OutputStream os = new FileOutputStream(myfile);
os.write(data);
os.close();
Toast.makeText(this, "File created successfully", Toast.LENGTH_SHORT).show();
}catch (IOException e)
{e.printStackTrace();}
runtime.exec("su -c" + Environment.getExternalStorageDirectory() + File.separator + "test.txt" + "/system/");
}
//deleting the temp file
file.delete();
Toast.makeText(this, "File copied and deleted from temp dir", Toast.LENGTH_SHORT).show();
To start it again, put that in a function and call that function whenever you want to execute it.
Example of function:
Code:
public void myfunc(){
//Your code to be executed more than once
}
And in some other function, say onCreate(), call
Code:
myfunc();
Click to expand...
Click to collapse
if i want replace sth from into an apk to system dir what i suppose to do?
poria1999 said:
this code doesn't work for me bro...
Edit:
if i want replace sth from into an apk to system dir what i suppose to do?
Click to expand...
Click to collapse
That's gonna be different. You have to put the file in asserts and extract the file to system more or less the same why like creating the file and copying it to system.
And for systemUI restart, you can try this:
Code:
Process p;
p = Runtime.getRuntime().exec("sh");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("am startservice -n com.android.systemui/.SystemUIService\n");
Its pretty much the same but with a little different approach.
vijai2011 said:
That's gonna be different. You have to put the file in asserts and extract the file to system more or less the same why like creating the file and copying it to system.
And for systemUI restart, you can try this:
Code:
Process p;
p = Runtime.getRuntime().exec("sh");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("am startservice -n com.android.systemui/.SystemUIService\n");
Its pretty much the same but with a little different approach.
Click to expand...
Click to collapse
Bro codes don't work for me!!!
I tried all of codes that u gave me but they just make an app than ask me for root permission and don't do any thing...
Sent from my LT18i using Tapatalk 2
poria1999 said:
Bro codes don't work for me!!!
I tried all of codes that u gave me but they just make an app than ask me for root permission and don't do any thing...
Sent from my LT18i using Tapatalk 2
Click to expand...
Click to collapse
Let me try a working code today. Sorry for posting non working codes as I can not home yestersay to test 'em. BTW, you can also look for it in opensource xposed framework modules because many xposed modules needs to do a restart of systemui.
Sent from my GT-N7000 using xda app-developers app
Ok...a friend of mine who has more experience than me said, the code is correct but is not working with recent builds. Searching doesnt give me any convincing results. So thought to provide you code to hot reboot. This code is tested and works well.
Code:
try {
Process proc = Runtime.getRuntime()
.exec(new String[]{ "su", "-c", "setprop ctl.restart zygote"});
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
This will cause the zygote to restart which will in turn makes the whole system core reboot. Works well on my Galaxy note running 4.1.2. This the easiest method I can think although I could restart systemui by killing SystemUI process by "kill pid" But it would be lots of work to find systemui pid because it is not static
vijai2011 said:
Let me try a working code today. Sorry for posting non working codes as I can not home yestersay to test 'em. BTW, you can also look for it in opensource xposed framework modules because many xposed modules needs to do a restart of systemui.
Sent from my GT-N7000 using xda app-developers app
Click to expand...
Click to collapse
Tnx bro,that is no problem...
Do u know how to use xposed framework?
Sent from my LT18i using Tapatalk 2
vijai2011 said:
Ok...a friend of mine who has more experience than me said, the code is correct but is not working with recent builds. Searching doesnt give me any convincing results. So thought to provide you code to hot reboot. This code is tested and works well.
Code:
try {
Process proc = Runtime.getRuntime()
.exec(new String[]{ "su", "-c", "setprop ctl.restart zygote"});
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
This will cause the zygote to restart which will in turn makes the whole system core reboot. Works well on my Galaxy note running 4.1.2. This the easiest method I can think although I could restart systemui by killing SystemUI process by "kill pid" But it would be lots of work to find systemui pid because it is not static
Click to expand...
Click to collapse
But I don't want reboot whole device
Where I can find system ui pid and how I use from?
Tnx
Sent from my LT18i using Tapatalk 2
poria1999 said:
Tnx bro,that is no problem...
Do u know how to use xposed framework?
Sent from my LT18i using Tapatalk 2
Click to expand...
Click to collapse
You need to use xposed framework for?
poria1999 said:
But I don't want reboot whole device
Where I can find system ui pid and how I use from?
Tnx
Sent from my LT18i using Tapatalk 2
Click to expand...
Click to collapse
That's not a whole system reboot. It only restarts core system services. So its already fast than normal reboot.
Anyway, NVM, found a better working method which is working on my Galaxy Note N7000 running 4.1.2
Code:
try {
Process proc = Runtime.getRuntime()
.exec("su -c pkill com.android.systemui ");
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
vijai2011 said:
You need to use xposed framework for?
That's not a whole system reboot. It only restarts core system services. So its already fast than normal reboot.
Anyway, NVM, found a better working method which is working on my Galaxy Note N7000 running 4.1.2
Code:
try {
Process proc = Runtime.getRuntime()
.exec("su -c pkill com.android.systemui ");
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
Click to expand...
Click to collapse
woks great!!!
so now how I can start it(SystemUI) again?
and one question more...
how i can change wallpaper?
EDIT:How i can check a process is running or not?
poria1999 said:
woks great!!!
so now how I can start it(SystemUI) again?
and one question more...
how i can change wallpaper?
EDIT:How i can check a process is running or not?
Click to expand...
Click to collapse
That would automatically restart the SystemUI. for wallpaper try this. Will help u a lot.
I am trying to install an APK using a simple Java application, the file is local to my (Linux) pc and the tablet is connected via USB.
If I run this command with adb then the apk installs fine:
adb install -r /home/apk.apk
So I know the apk file is valid and works fine.
The Java application is giving me java.nio.bufferoverflowexeception errors, the apk is fairly large at 700Mb but it pushes and installs fine from the terminal.
The code I am using is:
Code:
public void wiredsyncapk(){
abdsourcesync = apkpath;
progress.setString("Sync in progress");
System.out.println("Starting Sync via adb with command " + "adb" + " install -r "+ apkpath);
Process process = Runtime.getRuntime().exec("adb" + " install -r "+ apkpath);
InputStreamReader reader = new InputStreamReader(process.getInputStream());
Scanner scanner = new Scanner(reader);
scanner.close();
int exitCode = process.waitFor();
System.out.println("Process returned: " + exitCode);
if (exitCode==1){
System.out.println("an error has occured!");
}else{
System.out.println("it all worked fine");
}
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
How can I fix the bufferoverflow issue? I have searched and searched but not found a simple way to set a large buffer.
Thanks for the help;
Andy
where is it overflowing at? a logcat should tell this info.
zalez said:
where is it overflowing at? a logcat should tell this info.
Click to expand...
Click to collapse
Yep, logcat, please.
Hello there,
I know this is a noob question but I am unable to implement libsuperuser by chainfire for my app, I can't understand the Asyncactivity he creates in his example project. I have tried that way for a simple Root Checker app, but i am unable to do it, beacuse my app doesn't ask for superuser permissions
So, could anyone please point me to any sample program using his libs, which is simple enough for a beginner to understand .
Thanks in Advance.
RootTools
gh0stslayer said:
Hello there,
I know this is a noob question but I am unable to implement libsuperuser by chainfire for my app, I can't understand the Asyncactivity he creates in his example project. I have tried that way for a simple Root Checker app, but i am unable to do it, beacuse my app doesn't ask for superuser permissions
So, could anyone please point me to any sample program using his libs, which is simple enough for a beginner to understand .
Thanks in Advance.
Click to expand...
Click to collapse
Why don't you try roottools library? It's really simple, and intuitive. Lots of documentations also available!
Here is a link for you : http://code.google.com/p/roottools/
For su request on start, you must have:
Code:
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
in your manifest.
To check for su :
Code:
if(RootTools.isRootAvailable())
Log.e("YourTag","We have root!");
else Log.e("YourTag","No root access :( !");
nerroSS said:
Why don't you try roottools library? It's really simple, and intuitive. Lots of documentations also available!
Here is a link for you : http://code.google.com/p/roottools/
For su request on start, you must have:
Code:
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
in your manifest.
To check for su :
Code:
if(RootTools.isRootAvailable())
Log.e("YourTag","We have root!");
else Log.e("YourTag","No root access :( !");
Click to expand...
Click to collapse
Thanks for your reply. I tried adding the permission but it didn't work with libsuperuser. It must be something I wrote in the program.
I am now trying with roottools -
so if I have to copy a file from data/app to sdcard, how will I pass the shell command using RootTools ?
gh0stslayer said:
Thanks for your reply. I tried adding the permission but it didn't work with libsuperuser. It must be something I wrote in the program.
I am now trying with roottools -
so if I have to copy a file from data/app to sdcard, how will I pass the shell command using RootTools ?
Click to expand...
Click to collapse
Code:
CommandCapture command1 = new CommandCapture(0,"echo 1 > /sdcard/mycommandouput");
try {
RootTools.getShell(true).add(command1).waitForFinish();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Or for multi-command
Code:
CommandCapture command1 = new CommandCapture(0,"first command","second command here");
try {
RootTools.getShell(true).add(command1).waitForFinish();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Keep in mind that commands are as super-user, so no need to "su -c" / "su"..
nerroSS said:
Code:
CommandCapture command1 = new CommandCapture(0,"echo 1 > /sdcard/mycommandouput");
try {
RootTools.getShell(true).add(command1).waitForFinish();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Or for multi-command
Code:
CommandCapture command1 = new CommandCapture(0,"first command","second command here");
try {
RootTools.getShell(true).add(command1).waitForFinish();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Keep in mind that commands are as super-user, so no need to "su -c" / "su"..
Click to expand...
Click to collapse
How do I get past this error -
The method waitForFinish() is undefined for the type Command
Sorry for so many stupid questions, i am trying to learn
gh0stslayer said:
How do I get past this error -
The method waitForFinish() is undefined for the type Command
Sorry for so many stupid questions, i am trying to learn
Click to expand...
Click to collapse
I didn't close try{}, sorry! Put a "}" at the end of my code and it should work!
If you have any questions, feel free to pm me.
Edit 3: I have corrected my post. Copy paste the code above and should work now.
Here's a great RootTools tutorial: http://forum.xda-developers.com/showthread.php?t=2226664
nikwen said:
Here's a great RootTools tutorial: http://forum.xda-developers.com/showthread.php?t=2226664
Click to expand...
Click to collapse
nerroSS said:
I didn't close try{}, sorry! Put a "}" at the end of my code and it should work!
If you have any questions, feel free to pm me.
Edit 3: I have corrected my post. Copy paste the code above and should work now.
Click to expand...
Click to collapse
Thanks for your replies gentlemen. I finally settled for CMDProcessor and succeeded in making my command to work.
Now the command takes a long time to finish as it involves copying quite a few files and as it froze the main UI thread I used ASyncTask to take the heavy work to background thread.
Now I can't find a way to show a progress bar for the activities going on in the background thread. Can you please shed some light on how I could set some kind of progress update ... Thanks In Advance.
Edit : Should I use something other than ASyncActivity as the file copy opeartion takes several minutes and android developer website suggests to use executor or futuretask for tasks that require too long to complete
gh0stslayer said:
Thanks for your replies gentlemen. I finally settled for CMDProcessor and succeeded in making my command to work.
Now the command takes a long time to finish as it involves copying quite a few files and as it froze the main UI thread I used ASyncTask to take the heavy work to background thread.
Now I can't find a way to show a progress bar for the activities going on in the background thread. Can you please shed some light on how I could set some kind of progress update ... Thanks In Advance.
Edit : Should I use something other than ASyncActivity as the file copy opeartion takes several minutes and android developer website suggests to use executor or futuretask for tasks that require too long to complete
Click to expand...
Click to collapse
If it really takes that much time, I would use a remote service (a remote service runs in another process).
Using a remote service, closing the app using the recent apps menu won't stop that. The same applies for UI crashes. The copy operation won't stop if the UI crashes for whatever reason. You won't have to worry about orientation changes as well.
nikwen said:
If it really takes that much time, I would use a remote service (a remote service runs in another process).
Using a remote service, closing the app using the recent apps menu won't stop that. The same applies for UI crashes. The copy operation won't stop if the UI crashes for whatever reason. You won't have to worry about orientation changes as well.
Click to expand...
Click to collapse
Thanks for your reply again, I was trying to find a way to visualize the progress with a progress bar or something. Although I could not make a progress bar to work I was able to implement a spinner . . . Although a progressbar still would have been better, but for now, it serves the purpose of creating a sense of the activity happening in the background .
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
I will try to understand and implement the remote service that you linked, lets hope it isn't too much work .
Edit : The advantages you stated for remote service are all here too, even when I killed tha app from recents menu, the file copying operation still went on in the background .
Edit 2 : Orientation change only removes the spinner dialog, but the file copy operation proceeds until it's complete. The only thing that seems to stop the operation is when i uninstall the app from my device, while its still being executed. So I would say this baby is rock solid, just an addition of a progress bar would serve it well. :victory:
gh0stslayer said:
Thanks for your reply again, I was trying to find a way to visualize the progress with a progress bar or something. Although I could not make a progress bar to work I was able to implement a spinner . . . Although a progressbar still would have been better, but for now, it serves the purpose of creating a sense of the activity happening in the background .
I will try to understand and implement the remote service that you linked, lets hope it isn't too much work .
Edit : The advantages you stated for remote service are all here too, even when I killed tha app from recents menu, the file copying operation still went on in the background .
Click to expand...
Click to collapse
Well, you could try to do it like this:
Copy the files one by one or copy 5 at once. And afterwards set the progress to a higher value. That would, however, be more time consuming as the IPC (InterProcessCommunication) takes much time.
You could also do the copying using a script and "echo" some output after every 5 copied files. Then you would need to constantly listen for output and if you receive any, increase the progress value.
I would go with the spinner for performance though.
nikwen said:
Well, you could try to do it like this:
Copy the files one by one or copy 5 at once. And afterwards set the progress to a higher value. That would, however, be more time consuming as the IPC (InterProcessCommunication) takes much time.
You could also do the copying using a script and "echo" some output after every 5 copied files. Then you would need to constantly listen for output and if you receive any, increase the progress value.
I would go with the spinner for performance though.
Click to expand...
Click to collapse
Hmmm, interesting idea. I am using a shell command , which one would be better, guess I could echo some output to a dialog box.
On the contrary it would slow down the performance of app, so like you said spinner would be better for performance.
Still I would try to make some sort of progress bar work, please suggest which method should i use. I am using a shell command
"cp -r /data/app/ /sdcard/backup/apps" , to copy a whole directory to sdcard .
gh0stslayer said:
Hmmm, interesting idea. I am using a shell command , which one would be better, guess I could echo some output to a dialog box.
On the contrary it would slow down the performance of app, so like you said spinner would be better for performance.
Still I would try to make some sort of progress bar work, please suggest which method should i use. I am using a shell command
"cp -r /data/app/ /sdcard/backup/apps" , to copy a whole directory to sdcard .
Click to expand...
Click to collapse
This one would be slower but would give you an output after every copied file:
Code:
find /data/app -exec cp {} /sdcard/backup/apps \; -exec echo copy \;
It doesn't work properly with subdirectories though. However, that won't be important for you as /data/app doesn't contain subdirectories.
---------- Post added at 11:06 PM ---------- Previous post was at 10:58 PM ----------
Use this to get the total number of files in /data/app/:
Code:
ls /data/app/ | wc -l
---------- Post added at 11:09 PM ---------- Previous post was at 11:06 PM ----------
Using
Code:
ls -f /data/app | wc -l
will make it even faster because the list (whose lines are counted) won't be sorted.
nikwen said:
This one would be slower but would give you an output after every copied file:
Code:
find /data/app -exec cp {} /sdcard/backup/apps \; -exec echo copy \;
It doesn't work properly with subdirectories though. However, that won't be important for you as /data/app doesn't contain subdirectories.
---------- Post added at 11:06 PM ---------- Previous post was at 10:58 PM ----------
Use this to get the total number of files in /data/app/:
Code:
ls /data/app/ | wc -l
Click to expand...
Click to collapse
I was using this to get the no of files in the directory
find /data/app -type f -print| wc -l
But i couldn't figure out how to monitor the no of files copied to the sdcard to make a progressbar out of it.
And for this find /data/app -exec cp {} /sdcard/backup/apps \; -exec echo copy \ i assume the output will have to be shown in a dialog box.
On another note, thanks a lot for helping a nobody like me out. I am trying to learn app development and people like you are making it easier for me, means a lot to me. Keep up your awesome work and keep spreading your knowledge. :good:
gh0stslayer said:
I was using this to get the no of files in the directory
find /data/app -type f -print| wc -l
But i couldn't figure out how to monitor the no of files copied to the sdcard to make a progressbar out of it.
And for this find /data/app -exec cp {} /sdcard/backup/apps \; -exec echo copy \ i assume the output will have to be shown in a dialog box.
On another note, thanks a lot for helping a nobody like me out. I am trying to learn app development and people like you are making it easier for me, means a lot to me. Keep up your awesome work and keep spreading your knowledge. :good:
Click to expand...
Click to collapse
The new and faster version I posted above (ls -f /data/app | wc -l) should be the best (i.e. fastest) way to get the number of files.
Then you would need to constantly check the output of the java.lang.Process which runs your command. Change the progress value of the ProgressBar after every line of output.
I'll look into that tomorrow if you post a link to your CMDProcessor version in the meantime. Got to get some sleep now.
Thank you very much for the compliments... and welcome.
nikwen said:
The new and faster version I posted above (ls -f /data/app | wc -l) should be the best (i.e. fastest) way to get the number of files.
Then you would need to constantly check the output of the java.lang.Process which runs your command. Change the progress value of the ProgressBar after every line of output.
I'll look into that tomorrow if you post a link to your CMDProcessor version in the meantime. Got to get some sleep now.
Thank you very much for the compliments... and welcome.
Click to expand...
Click to collapse
Yeah man, I should get some sleep too. Been at this since 6 PM and its 4 AM now.
BTW here is the link for CMDProcessor I used
http://forum.xda-developers.com/showpost.php?p=40579474&postcount=23
gh0stslayer said:
Yeah man, I should get some sleep too. Been at this since 6 PM and its 4 AM now.
BTW here is the link for CMDProcessor I used
http://forum.xda-developers.com/showpost.php?p=40579474&postcount=23
Click to expand...
Click to collapse
My idea would be to add another run method to the SH class:
Code:
public CommandResult runWaitForWithProgress(final String s) {
s += "; echo This is the end of the command";
if (DEBUG)
Log.d(TAG, "runWaitFor( " + s + " )");
final Process process = run(s);
Integer exit_value = null;
String stdout = null;
String stderr = null;
if (process != null) {
try {
final DataInputStream dis = new DataInputStream(process.getInputStream());
while (true) {
if (dis.available() > 0) {
if (dis.readLine().equals("This is the end of the command")) {
break;
} else {
//TODO: Increase progress here
}
}
try {
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
exit_value = process.waitFor();
stdout = getStreamLines(process.getInputStream());
stderr = getStreamLines(process.getErrorStream());
} catch (final InterruptedException e) {
Log.e(TAG, "runWaitFor " + e.toString());
} catch (final NullPointerException e) {
Log.e(TAG, "runWaitFor " + e.toString());
}
}
return new CommandResult(exit_value, stdout, stderr);
}
I've written this in a text editor and haven't tested it. So no guarantee that it will work. You'll probably have to fix some errors. But it should explain my idea.
nikwen said:
My idea would be to add another run method to the SH class:
Code:
public CommandResult runWaitForWithProgress(final String s) {
s += "; echo This is the end of the command";
if (DEBUG)
Log.d(TAG, "runWaitFor( " + s + " )");
final Process process = run(s);
Integer exit_value = null;
String stdout = null;
String stderr = null;
if (process != null) {
try {
final DataInputStream dis = new DataInputStream(process.getInputStream());
while (true) {
if (dis.available() > 0) {
if (dis.readLine().equals("This is the end of the command")) {
break;
} else {
//TODO: Increase progress here
}
}
try {
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
exit_value = process.waitFor();
stdout = getStreamLines(process.getInputStream());
stderr = getStreamLines(process.getErrorStream());
} catch (final InterruptedException e) {
Log.e(TAG, "runWaitFor " + e.toString());
} catch (final NullPointerException e) {
Log.e(TAG, "runWaitFor " + e.toString());
}
}
return new CommandResult(exit_value, stdout, stderr);
}
I've written this in a text editor and haven't tested it. So no guarantee that it will work. You'll probably have to fix some errors. But it should explain my idea.
Click to expand...
Click to collapse
Is there a way to assign the output given by
Code:
ls /data/app/ | wc -l
to a variable ???
gh0stslayer said:
Is there a way to assign the output given by
Code:
ls /data/app/ | wc -l
to a variable ???
Click to expand...
Click to collapse
In a script or in Java?
nikwen said:
In a script or in Java?
Click to expand...
Click to collapse
In Java :silly:
I m trying to write the output of the command to a text file in sdcard
Code:
cmd.su.runWaitFor("ls /data/app/ | wc -l > /sdcard/bck.txt");
My aim is to use it to store the no of apps from the text file to a variable , and then use it for the progressbar .
Although It writes a text file with the no of apps as its content, i am unable to assign it to a variable in java
Code:
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream(new File("sdcard/backovery/bck.txt"));
bis = new BufferedInputStream(is);
nFiles = bis.read();
}catch (IOException e) {
e.printStackTrace();
tv.setText(""+nFiles);
It works but shows the value for nFiles in textview as 0 .
But it will be less messy if I could just store the shell command's output to a variable instead of storing it on a text file .