J'essaie d'exécuter un script shell via une application Android. Le script a une commande qui exécute simplement un pot sur l'appareil. Lorsque j'exécute cette commande directement sur la coquille en utilisant adb, tout fonctionne bien. Mais lorsque je l'exécute via le script à l'aide de l'application Android, je reçois une exception refusée de permission (Open Échec de l'autorisation: EACCE (autorisation refusée)) pour les fichiers créés dans / Dossier Data / Local / TMP. Quelqu'un peut-il guider sur la manière de résoudre ce problème?
C'est ce que mon manifeste ressemble à p> merci. p> p>
4 Réponses :
Je pense que la raison est que votre andorid n'est pas enraciné. Les "/ données" ont la permission racine. Alors rootez votre téléphone en premier et donnez à votre application la permission. Vous pouvez essayer la commande: "su" int La coque passe à la racine. P>
Enracinant vraiment le problème? Parce que, le script fonctionne bien lorsque je l'exécute de la coquille. C'est-à-dire quand je fais "sudo adb shell", puis exécutez le script à travers la coquille, cela fonctionne comme prévu. Mais lorsque j'exécute le script via l'application à l'aide de runtime.getruntime (). EXED ("SH" + ScriptPath), l'exception de la permission refusée est lancée.
"Sudo adb shell" est la racine de Linux, pas Android. Après entrer dans la coquille: "Shell @ Android: / $", utilisez "SU", puis: "Shell @ Android: / #", vous obtenez la racine pour Android. Si votre Android n'est pas enraciné, "su" ne fonctionnerait pas
Mon appareil n'est pas enraciné. Néanmoins, le script fonctionne bien sans aucun problème d'autorisation si je l'exécute dans la coquille ADB. Mais lorsque je l'exécute à travers le code à l'aide de runtime.getruntime (). EXED ("SH ScriptPath"), je reçois des problèmes d'autorisation pour / Data / Local / TMP / TMP. Comment résoudre ça?
essayez d'utiliser: runtime.getruntime (). EXEC ("su");
Si je comprends bien le scénario correctement, vous créez le script à la volée et utilisez Votre application peut exécuter des fichiers sous Si vous avez des exécutables fixes (binaires ou scripts) qui doivent être installés avec votre application, il existe une astuce intelligente pour laisser le programme d'installation du package système s'occuper de tout cela pour vous: assurez-vous que le fichier a un nom "< B> lib b> Quelque chose .so b> "et le mettre dans PS STRUT> Vous n'avez pas besoin de la permission pps strong> Vous pouvez exécuter un script shell de n'importe où, y compris / data / local / tmp code> comme emplacement facile qui est à la fois écritable et exécutable publiquement. Une fois, c'était possible. Mais sur les versions récentes d'Android, la sécurité a été resserrée. p>
/ données / données / $ {your.package} code>. Vous pouvez utiliser getcontext (). GetFilesDir () A > Obtenir de manière fiable le chemin complet. Notez que vous devez toujours utiliser
chmod 500 code> pour vous assurer que le fichier a exécutable forte> autorisation. P>
/ libs / armée code> sous la racine du projet Eclipse. Après l'installation, les fichiers seront présents dans getContext (). GetApplicationInfo ( ) .nativentibrarydir répertoire avec autorisations exécutables définies. P>
/ sdcard code>, et vous n'avez pas besoin d'autorisation exécutable pour le script. Au lieu de cela, utilisez la source
sh -c complet.path.to.script code>. P>
Vous pouvez utiliser l'interface ADB pour copier et / ou appuyer sur les fichiers dans le dossier puis faites un dossier à l'intérieur du dossier. Exemple p> modifie ensuite les autorisations p> Vous avez maintenant un dossier que vous pouvez lire et écrire à. P> Quelques choses que j'aimerais savoir, c'est comment rendre le système pense que le binaire / data / local / tmp local / tmp, mais si vous souhaitez utiliser / les voir dans l'application Terminal, vous devrez ( Dans l'interface ADB) d'abord
su code> est dans le dossier
/ system / code> ( sans copier) parce que je ne peux obtenir que TMP ... accès root car même avec accès root, je ne peux pas remonter le répertoire système comme
rw code> car le ZTE-Paragon a sa partition système formatée en lecture- Seul le système de fichiers p> p>
Assurez-vous que l'emplacement / DATA / LOCAL / TMP / TMP / TMP est exécutable mondial sur votre appareil:
adb shell chmod o+r /data/local/tmp/myfile.txt