J'ai une application sur le marché qui est pour les appareils enracinés seulement. J'ai testé l'application de manière approfondie sur un G1, MT3G et Cliq sans racines. Je reçois un certain nombre de notes faibles de personnes avec des appareils supposément enracinés, disant que l'application leur dit qu'ils ne sont pas enracinées (bien sûr, ils ne laissent généralement pas d'informations importantes comme quel téléphone et quelle rom)Android: App ne fonctionne pas sur certains appareils enracinés ... Pourquoi?
Ici est le code qui génère l'erreur ... quelqu'un peut-il voir quel pourrait être le problème?
final Button button = (Button) findViewById(R.id.******);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String command1 = "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system";
String command2 = "cp -f /sdcard/******* /etc/";
String command3 = "dos2unix -u /etc/*****";
String command4 = "mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system";
execCommandLine1(command1);
execCommandLine1(command2);
execCommandLine1(command3);
execCommandLine1(command4);
}
void execCommandLine1(String command)
{
Runtime runtime = Runtime.getRuntime();
Process proc = null;
OutputStreamWriter osw = null;
try
{
proc = runtime.exec("su");
osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(command);
osw.flush();
osw.close();
}
catch (IOException ex)
{
Log.e("execCommandLine()", "Command resulted in an IO Exception: " + command);
return;
}
finally
{
if (osw != null)
{
try
{
osw.close();
}
catch (IOException e){}
}
}
try
{
proc.waitFor();
}
catch (InterruptedException e){}
if (proc.exitValue() != 0)
{
**// Error Dialog that is being erroneously displayed**
}
else {
// Success Dialog
}
}
Et l'erreur est ... quoi? – CommonsWare
J'imagine que certains périphériques n'ont pas leur système de fichiers '/ system' dans'/dev/block/mtdblock3', ou qu'ils ne sont pas installés avec 'dos2unix' ou dans le chemin. –
@CommonsWare Mon dialogue d'erreur est affiché sur certains périphériques enracinés ... indiquant que (proc.exitValue()! = 0) qui ne devrait pas arriver sur un téléphone enraciné, à moins que quelque chose ne va pas avec mes commandes ou la façon dont je je les exécute –