Question

J'ai besoin de l'option BugReport que vous pouvez utiliser dans BAD pour accéder à un fichier sur le SD dans mon application. j'ai trouvé Android; Utilisation exec ("bugReport") Cela explique que vous ne pouvez pas exécuter BugReport dans le shell ordinaire et que vous devez exécuter Dumpstate, Dumpsys et Logcat séparément pour obtenir le même résultat. C'est bien et je comprends cela, mais je ne peux pas obtenir Dumpstate ou Dumpsys pour écrire dans le fichier. Ce qui est ci-dessous fonctionne bien pour écrire le logcat à l'aide de logcat -d -f, mais ne fonctionne pas pour les deux autres. J'ai essayé dumpstate -f, Dumpstate -D -F et Dumpstate> pour le faire fonctionner, mais n'écrit toujours rien dans le fichier. Y a-t-il quelque chose qui me manque pour que cela fonctionne?
C'est là que je crée le fichier sur le SD

File folder = new File(Environment.getExternalStorageDirectory()+"/IssueReport/");
    if (folder.isDirectory() == false) {
        folder.mkdir();
    }
    log = new File(Environment.getExternalStorageDirectory()+"/IssueReport/log.txt");

Et c'est là que j'écris le fichier sur l'emplacement

private void submit() {
    try {
       log.createNewFile(); 
       String cmd = "dumpstate "+log.getAbsolutePath();
       Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
    e.printStackTrace();
    }
Était-ce utile?

La solution

Je l'ai fait fonctionner. j'ai trouvé Commandes de shell en cours d'exécution par le code Java sur Android? et le modifié pour fonctionner comme j'en avais besoin.

private void submit() {
    try {
         String[] commands = {"dumpstate > /sdcard/log1.txt"};
         Process p = Runtime.getRuntime().exec("/system/bin/sh -");
         DataOutputStream os = new DataOutputStream(p.getOutputStream());
            for (String tmpCmd : commands) {
                os.writeBytes(tmpCmd+"\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

Si quelqu'un en a besoin, voici la façon dont je utilise tout ensemble. L'application doit avoir un rapport de bogue qui y est attaché, de la lecture Commandes de shell en cours d'exécution par le code Java sur Android? , J'ai vu qu'il n'y a pas de moyen d'exécuter un rapport de bogue, juste les trois composants: Dumpstate, Dumpsys et Log. Je génère chaque rapport séparément, puis je les combine tous dans un seul fichier pour attacher un e-mail.

private void submit() {
    try {
         String[] commands = {"dumpstate > /sdcard/IssueReport/dumpstate.txt", 
                              "dumpsys > /sdcard/IssueReport/dumpsys.txt",
                              "logcat -d > /sdcard/IssueReport/log.txt",
                              "cat /sdcard/IssueReport/dumpstate.txt /sdcard/IssueReport/dumpsys.txt /sdcard/IssueReport/log.txt > /sdcard/IssueReport/bugreport.rtf" };
         Process p = Runtime.getRuntime().exec("/system/bin/sh -");
         DataOutputStream os = new DataOutputStream(p.getOutputStream());
            for (String tmpCmd : commands) {
                    os.writeBytes(tmpCmd+"\n");
            }
        } catch (IOException e) {
            e.printStackTrace();    
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top