[java] Chmod op Android

Pagina: 1

Acties:
Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Hallo Tweakers,

Het lukt mij maar niet om bepaalde bestanden te chmodden. Ik heb een gerootte Galaxy Tab waar Busybox op is geinstalleerd, maar deze commando's willen niet werken:
Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");

In de Android Terminal werken deze commando's wel gewoon, en dat vind ik raar.

Hopelijk kan iemand mij helpen,

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

נְפִילִים
Reacties: 2.522
Reg. datum: 21-09-2005

Misschien heb je hier wat aan: http://stackoverflow.com/...a-chmod-on-rooted-devides

Wel een oudere versie, maar zoveel is er vast niet veranderd op dit gebied
Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Ik ben vrij nieuw in de Java wereld, daarom snap ik de code ook nog niet helemaal. Ik heb de volgende code gevonden maar ik weet nog niet echt hoe ik deze kan toepassen.
Java:
1
2
3
4
5
6
7
8
9
10
11
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream osRes = new DataInputStream(process.getInputStream());
for (String single : commands) {
   os.writeBytes(single + "\n");
   os.flush();
   res.add(osRes.readLine());
}
os.writeBytes("exit\n");
os.flush();
process.waitFor();

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 540
Reg. datum: 24-03-2009

quote:
ObAt schreef op dinsdag 01 mei 2012 @ 11:33:
Hallo Tweakers,

Het lukt mij maar niet om bepaalde bestanden te chmodden. Ik heb een gerootte Galaxy Tab waar Busybox op is geinstalleerd, maar deze commando's willen niet werken:
code:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");

In de Android Terminal werken deze commando's wel gewoon, en dat vind ik raar.

Hopelijk kan iemand mij helpen,

ObAt
Misschien te simpel, maar mis je daar niet een spatie? (Runtime.getRuntime().exec("/system/bin/chmod 777" + "/data/.nvmac.info");)
Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Klopt wat slordig! Maar deze code werkt ook niet.
Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777 /data/.nvmac.info");

Of deze code:
Java:
1
2
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("/system/bin/chmod 777" + " /data/.nvmac.info");

ObAt wijzigde deze reactie 01-05-2012 13:54 (3%)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 28
Reg. datum: 06-11-2007

Weet je zeker dat het "su" commando wel goed gaat?
Als ik het goed herinner moet je daar nog een wachtwoord o.i.d. aan meegeven (in ieder geval als ik op mijn ubuntu "sudo cat /iets" doe moet ik mijn sudo-wachtwoord opgeven)

Misschien dat ik nu onzin praat, maar gaat dit sowieso wel werken? Ik weet niet hoe de programmatuur omgaat met sessies maar zelfs als "su" goed gaat, ben je dan nog steeds wel een superuser als je aan het tweede commando begint?

In de Android terminal zit je binnen een sessie, misschien dat dat uitmaakt.
Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Ik krijg een melding dat Superuser rechten zijn toegekend, dat staat ook trouwens in de log van Superuser. Het lukt mij ook om bestanden te schrijven in de '/data/'-map, zonder Superuser-rechten is dit niet mogelijk.

Heb trouwens nog dit geprobeerd, maar helaas werkt het ook niet:
Java:
1
2
Process nv = Runtime.getRuntime().exec("/system/bin/chmod 777 /data/.nvmac.info");
nv.waitFor();

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 1.971
Reg. datum: 31-03-2000

Kan je geen sudo gebruiken ipv handmatig SU te gebruiken?
Kan trouwens ook zijn dat je door 2 verschillende statements in java te gebruiken uit je SU sessie knalt voor je 2e statement.

Doe anders iets als:
quote:
Runtime.getRuntime().exec("su && /system/bin/chmod 777 /data/.nvmac.info");

Mental wijzigde deze reactie 01-05-2012 14:14 (30%)

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

quote:
Mental schreef op dinsdag 01 mei 2012 @ 14:13:
Kan je geen sudo gebruiken ipv handmatig SU te gebruiken?
Kan trouwens ook zijn dat je door 2 verschillende statements in java te gebruiken uit je SU sessie knalt voor je 2e statement.

Doe anders iets als:

[...]
'sudo' is geen commando op Android. Maar misschien wil dit helpen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Process nv = Runtime.getRuntime().exec("su && /system/bin/chmod 777 /data/.nvmac.info");

                      try {
                           nv.waitFor();
                        File myFile = new File("/data/.nvmac.info");
                        myFile.createNewFile();
                        FileOutputStream fOut = new FileOutputStream(myFile);
                        OutputStreamWriter myOutWriter = 
                                                new OutputStreamWriter(fOut);
                        myOutWriter.append(TotalMacAddress);
                        myOutWriter.close();
                        fOut.close();
                        Toast.makeText(getBaseContext(),
                                "Nvmac done",
                                Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        Toast.makeText(getBaseContext(), e.getMessage(),
                                Toast.LENGTH_SHORT).show();
                    }

Trouwens, als ik de permissions van het bestand handmatig op 777 zet werkt het wel.

ObAt wijzigde deze reactie 01-05-2012 14:21 (3%)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 10.933
Reg. datum: 13-09-2000

Als je enige kennis van de shell hebt zou je moeten inzien dat su && commando niet werkt, aangezien su (indien succesvol) zelf een nieuwe shell start. Het commando erna wordt pas later, in de originele shell in de originele context uitgevoerd (indien de subshell met succes eindigt).

Probeer in plaats daarvan:
su -c '/system/bin/chmod 777 /data/.nvmac.info'

PGP public key

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

quote:
Soultaker schreef op dinsdag 01 mei 2012 @ 14:36:
Als je enige kennis van de shell hebt zou je moeten inzien dat su && commando niet werkt, aangezien su (indien succesvol) zelf een nieuwe shell start. Het commando erna wordt pas later, in de originele shell in de originele context uitgevoerd (indien de subshell met succes eindigt).

Probeer in plaats daarvan:
su -c '/system/bin/chmod 777 /data/.nvmac.info'
Buiten het feit dat ik succesvol Superuserrechten krijg heb ik nog steeds een Permission Denied error. Hij chmod niet succesvol op een of andere manier. Ik vind het echt vreemd aangezien het in de terminal wel werkt.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 10.933
Reg. datum: 13-09-2000

Hoe weet je dan dat je succesvol superuserrechten krijgt?

PGP public key

Fulltime #whatpulsert
Reacties: 2.262
Reg. datum: 21-12-2004

quote:
Soultaker schreef op dinsdag 01 mei 2012 @ 15:06:
Hoe weet je dan dat je succesvol superuserrechten krijgt?
su op android is via een omweg toch een soort van sudo, je moet iig toestemming geven voordat na een su-commando ook daadwerkelijk superuserrechten worden gegeven. Bovendien wordt er een log bijgehouden van de momenten waarop applicaties superuserrechten verkrijgen.

Deze Tweaker zet geen actuele feitjes meer in zijn sig, die vergeet hij toch te verwijderen.

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

quote:
Soultaker schreef op dinsdag 01 mei 2012 @ 15:06:
Hoe weet je dan dat je succesvol superuserrechten krijgt?
Wat Patriot zegt klopt, en op het moment als een applicatie Superuser-rechten krijgt dan komt er een Toast melding. Ook kan ik naar map schrijven die zonder Superuser-rechten niet beschrijfbaar is.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 10.933
Reg. datum: 13-09-2000

Heeft su op de Android dan wel een -c optie? Kun je eens su --help ofzo uitvoeren op de shell?

PGP public key

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

quote:
Soultaker schreef op dinsdag 01 mei 2012 @ 16:31:
Heeft su op de Android dan wel een -c optie? Kun je eens su --help ofzo uitvoeren op de shell?
Superuser heeft inderdaad geen extra opties op android, in tegenstelling op andere OS'en.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 540
Reg. datum: 24-03-2009

quote:
ObAt schreef op dinsdag 01 mei 2012 @ 17:42:
[...]


Superuser heeft inderdaad geen extra opties op android, in tegenstelling op andere OS'en.
oh?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 adb shell
# su -c 'ls'
debug
config
cache
default.prop
data
var
tmp
sdcard
acct
mnt
d
etc
dev
sys
proc
internalstorage
system
# exit

oftewel: dat ligt er maar net aan wat voor filesystem erop staat ;)

EddoH wijzigde deze reactie 01-05-2012 18:12 (8%)

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Hmm daar moet ik jou inderdaad toch gelijk ingeven! Ik wel benadrukken dat ik nog een 'noobje' ben op het gebied van Android programmeren ;)

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Ik heb ergens iets gevonden wat misschien kan helpen.
Java:
1
2
3
4
5
6
7
8
9
10
public int chmod(File pathint modethrows Exception {
  Class fileUtils = Class.forName("android.os.FileUtils");
  Method setPermissions =
      fileUtils.getMethod("setPermissions"String.classint.classint.classint.class);
  return (IntegersetPermissions.invoke(nullpath.getAbsolutePath(), mode-1-1);
}

...
chmod("/foo/bar/baz"0755);
...

Ik weet alleen niet hoe ik deze code precies toe moet passen. Misschien kan iemand mij helpen.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 10.933
Reg. datum: 13-09-2000

Ten eerste: kun je niet direct die FIleUtils klasse uit de android.os package importeren?

Ten tweede: hiermee los je het fundamentele probleem niet op dat je Java applicatie onder een andere gebruiker draait, die geen rechten heeft op het bestand waarvan je de permissies probeert aan te passen. Anders hoefde je überhaupt su niet aan te roepen, natuurlijk.

Soultaker wijzigde deze reactie 05-05-2012 15:09 (65%)

PGP public key

Not just For da Lulz
Reacties: 299
Reg. datum: 12-01-2009

Met Superuser rechten heb je toch ook gelijk root rechten als ik mij niet vergis. Dan heb je toegang tot alle bestanden. Google wil dit natuurlijk niet omdat dit een ideale omstandigheid is voor virussen, daarom is android.os.FileUtitls ook niet meer ondersteunt en is al uit de SDK verdwenen. Ikzelf heb vrij weinig Java en Andorid ervaring dus ik zal niet echt weten hoe ik nou een bestand zou moeten beschrijven zonder schrijfrechten (Het bestand staat op chmod 0400), als ik het bestand handmatig op 777 zet dan werkt het programma namelijk wel goed.

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Reacties: 1.322
Reg. datum: 15-12-2002

In de reference lees ik over jouw exec-call:

Executes the specified program in a separate native process.

Ik zie nergens expliciet vermeld dat 't aan een shell word gevoerd, dus dan kun je helemaal geen arguments meegeven op de manier dat jij dat probeert.

Probeer eens: public Process exec (String[] progArray)

Executes the specified command and its arguments in a separate native process.

Pagina: 1




© 1998 - 2013 Tweakers.net B.V. Contact Over Tweakers Jouw privacy Algemene voorwaarden Cookies

Tweakers wordt uitgegeven door De Persgroep en wordt gehost door True

Website van het jaar 2012