Écrire des fichiers dans /system
Je sais que cela a été demandé à beaucoup de choses, mais n'a jamais répondu. J'ai vraiment besoin d'écrire des fichiers à la racine il n'y a pas d'autre solution. J'utilise actuellement ce code mais il ne montre pas quelque chose de nouveau dans /system/. Je veux copier un fichier à partir de mon actifs pour le dossier /system (avec son sous répertoire)
public void installFiles(View v) {
try {
Runtime.getRuntime().exec("su");
} catch (IOException e) {
mDebugView.append(e.toString());
}
copyPath("system/bin", "/system/bin/");
copyPath("system/lib", "/system/lib/");
copyPath("system/etc", "/system/etc/");
copyPath("system/etc/audio", "/system/etc/audio/");
copyPath("system/etc/soundimage", "/system/etc/soundimage/");
copyPath("system/lib/soundfx", "/system/bin/soundfx/");
}
public void copyPath(String from, String to) {
mDebugView.append("Copying path assets/" + from + " to " + to + "\n");
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list(from);
for (String filename : files) {
mDebugView.append(filename + "... \n");
if (new File(filename).isFile()) {
mDebugView.append("Copying " + filename + "\n");
InputStream in = null;
OutputStream out = null;
in = assetManager.open(filename);
out = new FileOutputStream(to);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
}
}
} catch (IOException e) {
Log.e(this.getClass().toString(), e.toString());
mDebugView.append(e.toString() + "\n");
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
mDebugView.append("..");
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
Qu'attendez-vous
Gardez à l'esprit que le stock de dispositifs de sécurité de protection qui vous empêche de le faire, et que vous avez en gros de pirater le téléphone d'abord pour écrire dans /system/
Runtime.getRuntime().exec("su");
faire? Sur quelle base avez-vous forme à cette attente? (Il regarde comme vous vous attendez à ce instantanément modifier les autorisations des processus en cours d'exécution qui ont été exécutées pour les permissions root. Si vous pensez à ce sujet, qui n'a pas de sens. Au minimum, vous aurez à attendre pour avoir fait son travail, non?)Gardez à l'esprit que le stock de dispositifs de sécurité de protection qui vous empêche de le faire, et que vous avez en gros de pirater le téléphone d'abord pour écrire dans /system/
OriginalL'auteur bluewhile | 2012-06-29
Vous devez vous connecter pour publier un commentaire.
Votre
ne fait rien. En tant que le processus est créé, puis libéré. Pour déplacer des fichiers, vous aurez besoin d'utiliser le chat binaire avec su. IE
pour autant de commandes que vous voulez faire, il serait préférable d'obtenir l'instance de processus de la ligue, puis d'exécuter l'ensemble de vos commandes déplacer à la fois.
Noter également que vous pouvez avoir à monter la partition système comme rw comme il n'est probablement pas r/w par défaut.
bluewhile: Écrire dans vos magasins à la carte SD ou de quelque autre endroit facilement accessible et ensuite utiliser su pour mv ou pc, les fichiers dans /system.
Jug6ernaut: je ne pense pas que vous avez besoin d'une redirection
>
dans une commande mv, je pense que c'est juste à partir du premier paramètre à la seconde.Corey correct, je voulais mettre le chat à la place de mv. Édité. bluewhile: corey a suggéré de copier les fichiers de votre dossier des actifs, d'autre part, votre dossier de données, sdcard w/e. Puis les déplacer, si nécessaire, à partir de là. Vous pouvez facilement le faire en ouvrant un datastream et puis l'écriture à l'emplacement de votre choix.
moment de l'exécution.exec(new String[] { "su", "-c", "chat sdcard/beats_cache/system/bin/bla > système/blabla/bla" }); les feuilles du dossier toujours vide
OriginalL'auteur Jug6ernaut
Vous ne voyez pas les modifications sur
/system
parce qu'il est monté en lecture seule par défaut. Veuillez vous assurer que vous avez remonté avant d'écrire des fichiers. Bien que, comme d'autres l'ont mentionnésu
doit être utilisé avec une commande.À partir de ici:
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
. Vérifieryaffs2
etmtdblock3
aveccat /proc/mounts
.Vous pouvez également utiliser
cat source > destination
pour copier des fichiers.moment de l'exécution.exec(new String[] { "su", "-c", "mount-o remount,rw -t yaffs2 /dev/block/mtdblock3 /système" }); runtime.exec(new String[] { "su", "-c", "chmod 777 /système/" }); runtime.exec(new String[] { "su", "-c", "trouver sdcard/beats_cache/ -exec mv '{}' système/beats_cache/ +" }); n'est pas
Et de quoi donner de l'erreur et de flux de sortie? Aussi, vous feriez mieux d'utiliser
ProcessBuilder
API.OriginalL'auteur Andrey Ermakov
J'ai continué à creuser et j'ai trouvé une façon de le faire.
Après quelques tentatives de ma ROM (ou plus exactement dossier /system) a été endommagé au point que j'avais toujours vu le errorstream d'entrée : "pas d'autorisation" -> réinstallé la ROM avec des lingettes
J'ai copié les fichiers de stockage externe (dans ce cas, /sdcard mais il faut être conscient qu'il pourrait être une autre voie à l'utilisation de l'Environnement de l'Objet pour obtenir le chemin d'accès). J'ai extrait tous les sous-dossiers pour dossiers principaux.
Nouveau code comme les précédentes, a ouvert un SU session et fermé à nouveau.
OriginalL'auteur bluewhile
'Su', au début peut-être pas assez pour avoir des autorisations en écriture sur le dossier /system. Root Explorer et d'autres fichiers de gestion des applications, le tout d'avoir à remonter /système r/w et le mont de retour en lecture seule. La réponse à cette question contient des commandes permettant de remonter le /chemin d'accès système. La réponse est à l'aide de la bad, mais en cours d'exécution sur l'appareil devrait fonctionner tout aussi bien.
Sur une note de côté, il peut être plus facile pour exécuter des commandes système pour déplacer les fichiers plutôt que de les déplacer vous-même. Sur mon LG Optimus T l'exécution de Cyanogenmod 7.x, dans /system/xbin il y a
cp
etmv
qui peut copier/déplacer un fichier sans avoir à remonter /système (si oui, probablement qu'ensu mv
ousu cp
). Je ne connais pas assez bien cette partie d'android à savoir si vous (ou la personne qui installe votre application) auront également de ces fichiers, mais sa vaut la peine de regarder dans. Ils peuvent exiger de busybox, je n'ai pas regardé.Je ne suis pas sûr si busybox est nécessaire. Si vous avez un dispositif enracinée sans busybox installé, regardez dans /system/xbin pour ces fichiers. Comme pour la copie à partir de la commande adb shell, vous devriez être en mesure de pousser les fichiers sur le périphérique, mais un nouveau montage sera probablement encore nécessaire.
OriginalL'auteur Corey Ogburn