346

昨日 Android Studio をインストールし、LogCat を使用してログを表示しようとしました。しかし、logcat には何も表示されません。ターミナルを使用して実行./adb logcatしましたが、動作します。

Android Studio で logcat を使用する方法を説明できる人はいますか?

4

63 に答える 63

448

logcat を再起動すると、常に役立ちます。

ここに画像の説明を入力

于 2014-10-25T18:11:43.770 に答える
68

Alt+を 2 回押し6て、logcat ウィンドウを再起動する必要があります。そうすれば、ログ出力が表示されます。

この問題は主にデバッグ モードで発生します。

于 2014-07-24T08:47:21.423 に答える
36

これらは私を助けました:

1.ADB 統合 を有効にするここに画像の説明を入力 2. Android Device Monitor に移動します デバイスがオンラインかどうかを確認し、必要なフィルターを作成します ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

于 2015-03-23T07:43:22.913 に答える
16

Android Studio を再起動すると役に立ちました。

于 2016-10-28T12:53:54.737 に答える
16

Android Studio アプリケーションでは、アプリケーションのデバッグ オプション (Shift+f9) をクリックしてデバッグ モードで実行し、LogCat を有効にする必要があります。

于 2015-01-20T06:13:08.323 に答える
14

技術的な回答ではありませんが、logcat の検索ボックスをチェックすることをお勧めします。入力された文字がある場合、その特定の文字または単語を検索するため、logcat は空になり、存在しない場合、logcat ログは完全に空になります。

于 2015-02-09T14:24:14.677 に答える
10

エミュレーターの開発者メニュー オプションにロガー バッファー サイズの適切な値があることを確認してください。

ここに画像の説明を入力

于 2018-07-20T15:12:14.973 に答える
9

私にとっての問題は、同じ名前のエミュレーターが 2 つあることでした (作成して削除し、同じ名前で再度作成しました)。logcat ドロップダウンに 2 つのエミュレータ エントリがあり、間違ったエントリに接続されていました。私がしなければならなかったのは、他のものに切り替えることだけでした。エミュレータの名前を変更することで、問題を完全に防止しました。

ここに画像の説明を入力

于 2016-07-21T18:41:54.010 に答える
8

プロジェクトを閉じて、もう一度開いてみてください。うまくいきました。ログが再表示されます。

于 2015-12-04T09:23:04.260 に答える
8

**

  • logcat が空のままでまだ立ち往生している場合は、これをお読みください

**

数か月の苛立ちとトラブルの後、これを解決しました。
デバイスモニターはデバッグ中に正常に機能しましたが、標準の logcat ビューは常に空でした。

理由は非常に単純
でした。logcat ビューはありましたが、更新によって幅が 0 に移動されました。

「ALT 6」タブにいると、「ADB ログ」と「デバイス | logcat」
デバイス| logcat の 2 つのタブが表示されます。logcat は、デバイスと logcat で構成され、垂直方向の境界線で分割されていることを意味します。
縦の境界線は移動でき、更新中に 100% 右に移動したように見えます。

これにより、logcat が収集されますが、表示されません。マウス ポインターをツール ウィンドウの右側に移動し、logcat をドラッグしてビューに戻します。

このソリューションはすべての人に役立つわけではありませんが、ADB 接続が機能しているにもかかわらず logcat の出力がない多くの人が同じ問題に遭遇する可能性があります。

于 2015-02-14T16:44:04.290 に答える
7

私の場合、開発者向けオプションメニューには、というオプションがあります

Revoke USB debugging authorisations.

既存のすべての承認を取り消すと、使用しているコンピューターを信頼するように再度求められ、その後、ログが再び表示され始めます。

于 2016-12-14T21:16:55.597 に答える
7

ここに画像の説明を入力

私の場合、右側の小さなドロップダウンから「画像」を削除しました。その後も無事登場。これは、その検索ボックスでキーワードのログを検索するためです。一致するものが見つからない場合は空白を返します。

于 2017-05-30T10:28:11.457 に答える
6

他のすべてがうまくいかなかったとき、これが私がしたことです。adb logcatうまく機能したので、私はそれに頼ることにしました。Android Studio の組み込みターミナルで実行adb logcat -v colorすると、通常の logcat と同様の出力が生成され、コード リンクも機能するようになりました。

組み込みコンソールで adb logcat -v color を実行する

しかし、これにはいくつかの問題がありました。

  • 監視するパッケージを指定することはできません。この--pid=<your PID>オプションを使用すると、単一プロセスの出力を監視できます。ただし、アプリを再起動するたびに PID が変更されるため、再起動するたびにこのコマンドを再実行しました。
  • 色がうるさいです(私の意見では)。
  • 出力フィールドは以前のメッセージと一致していません。全体が適切にフォーマットされていないため、logcat をたどるのが本来よりもはるかに困難になります (ただし、埋め込まれた logcat でも同じことが起こります)。

そこで、パッケージの PID を自動的に監視し、logcat の出力を整形する独自のツールを作成することにしました。

import java.awt.AWTException;
import java.io.*;
import java.util.ArrayList;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Logcat {

    private static final String ADB_FILE_PATH = "adb";

    // Customizations,
    private static final Color     V_COLOR = Color.RESET;
    private static final Color     D_COLOR = Color.RESET;
    private static final Color     I_COLOR = Color.RESET;
    private static final Color     W_COLOR = Color.BLUE;
    private static final Color     E_COLOR = Color.RED_BRIGHT;
    private static final Color  HINT_COLOR = Color.MAGENTA_BOLD_BRIGHT;
    private static final Color OTHER_COLOR = Color.GREEN_BOLD_BRIGHT;

    private static final int       DATE_LENGTH =   5;
    private static final int       TIME_LENGTH =  12;
    private static final int PROCESS_ID_LENGTH =   5;
    private static final int  THREAD_ID_LENGTH =   5;
    private static final int  LOG_LEVEL_LENGTH =   1;
    private static final int        TAG_LENGTH =  20;
    private static final int    MESSAGE_LENGTH = 110;

    private static final String SEPARATOR = " | ";
    private static final String CONTINUATION = "→&quot;;
    private static final String INDENTATION = "  ";

    private static final int PROCESS_IDS_UPDATE_INTERVAL_MILLIS = 1224;

    private static final int HISTORY_LENGTH = 1000;

    // State,
    private static boolean skipProcessIDCheck;
    private static ArrayList<String> processIDs = new ArrayList<String>();

    private static String logLevelToShow="V";  // All.

    private static Process logcatProcess;
    private static boolean appClosed;
    private static boolean stopEverything;

    private static String[] history = new String[HISTORY_LENGTH];
    private static int currentLocationInHistory, historyLength;

    public static void main(final String args[]) {

        clearAndroidStudioConsole();
        System.out.println("besm Allah");

        // Get processes ids of the provided package,
        if (args.length==0) {
            skipProcessIDCheck = true;
        } else {
            skipProcessIDCheck = false;
            getProcessIDs    (args[0]);    // Do it once before we start.
            monitorProcessIDs(args[0]);    // Do it periodically from now on.
        }

        // Start capturing and prettifying logcat,
        if (!monitorLogcat()) {
            stopEverything = true;
            return;
        }

        // Handle user input,
        handleUserInput();
    }

    private static void watch(final Process process, final ProcessListener listener) {

        // Read process standard output and send it to the listener line by line,
        new Thread() {
            public void run() {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = "";
                try {
                    do {
                        if (bufferedReader.ready()) {
                            line = bufferedReader.readLine();
                            if (line!=null && !line.isEmpty()) listener.onNewLine(line);
                        } else {
                            Thread.sleep(100);
                        }
                    } while (line!=null && !stopEverything);
                } catch (Exception e) { e.printStackTrace(); }
            }
        }.start();
    }

    private static void monitorProcessIDs(String packageName) {

        // Continuously monitor the process IDs of this package and update when changed,
        new Thread() {
            public void run() {
                do {
                    try { Thread.sleep(PROCESS_IDS_UPDATE_INTERVAL_MILLIS); } catch (InterruptedException e) {}
                    getProcessIDs(packageName);
                } while (!stopEverything);
            }
        }.start();
    }

    private static void getProcessIDs(String packageName) {

        // Get the process IDs associated with this package once,
        ArrayList<String> newProcessIDs = new ArrayList<String>();
        Runtime runtime = Runtime.getRuntime();
        try {
            Process getPIDProcess = runtime.exec(ADB_FILE_PATH + " shell ps");
            watch(getPIDProcess, (line) -> {
                if (line.contains(packageName)) {
                    newProcessIDs.add(removeRedundantSpaces(line).split(" ")[1]);
                }
            });
            getPIDProcess.waitFor();
            Thread.sleep(500);  // Make sure we've already handled all the input from the process.
        } catch (Exception e) { e.printStackTrace(); }

        // Return immediately if program is closed,
        if (stopEverything) return ;

        // Some action upon getting the pid(s),
        boolean shouldRepeatHistory = false;
        if (newProcessIDs.isEmpty()) {

            // Just closed,
            if (!appClosed) {
                appClosed = true;
                prettify("----- App closed -----");
            }
        } else if (appClosed) {

            // Just opened, clear,
            appClosed = false;
            clearAndroidStudioConsole();
            prettify("----- App opened -----");
            shouldRepeatHistory = true;
        } else {

            // Detect changes in processes,
            for (String pid : newProcessIDs) {
                if (!processIDs.contains(pid)) {
                    clearAndroidStudioConsole();
                    prettify("----- Process(es) changed (or app restarted - some logs could have been missed) -----");
                    shouldRepeatHistory = true;
                    break ;
                }
            }
        }

        // Set the new PID(s),
        processIDs = newProcessIDs;
        if (shouldRepeatHistory) repeatHistory();
    }

    private static boolean monitorLogcat() {

        Runtime runtime = Runtime.getRuntime();
        try {
            logcatProcess = runtime.exec(ADB_FILE_PATH + " logcat -v threadtime");
            watch(logcatProcess, (line) -> {

                // Learn history, in case we need to repeat it,
                if (appClosed || processLogcatLine(line)) {
                    history[currentLocationInHistory] = line;
                    currentLocationInHistory = (currentLocationInHistory + 1) % history.length;
                    if (historyLength<history.length) historyLength++;
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    private static boolean processLogcatLine(String line) {
        try {
            return prettify(line);
        } catch (Exception e) {
            print(line, OTHER_COLOR);
            System.out.println();

            // Debug,
            e.printStackTrace();
            return true;
        }
    }

    // Returns true if line should be kept in history,
    private static synchronized boolean prettify(String line) {

        if (line.startsWith("-")) {
            // It's a "beginning of <something>" line,
            print(line, HINT_COLOR);
            System.out.println();
            return true;
        }

        // Get the individual fields,
        String      date = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String      time = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String processID = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();

        // Break early if possible,
        if (!skipProcessIDCheck && !processIDs.contains(processID.trim())) return false;

        // Continue parsing,
        String  threadID = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String  logLevel = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();

        // Break early if possible,
        switch (logLevel) {
            case "V": if (!"V"    .contains(logLevelToShow)) return true; break;
            case "D": if (!"VD"   .contains(logLevelToShow)) return true; break;
            case "I": if (!"VDI"  .contains(logLevelToShow)) return true; break;
            case "W": if (!"VDIW" .contains(logLevelToShow)) return true; break;
            case "E": if (!"VDIWE".contains(logLevelToShow)) return true; break;
        }

        // Continue parsing,
        String       tag = line.substring(0, line.indexOf(':')); line = line.substring(line.indexOf(':')+1); line = line.trim();

        // Because some tags have a trailing ":",
        if (line.startsWith(":")) {
            tag += ":";
            line = line.substring(1);
        }

        // Indent lines starting by "at",
        String indentation = "";
        if (line.startsWith("at ")) {
            indentation = "   " + INDENTATION;
            line = " " + INDENTATION + line;
        }

        // Print the prettified log,
        Color color;
        switch (logLevel) {
            case "V": color = V_COLOR; break;
            case "D": color = D_COLOR; break;
            case "I": color = I_COLOR; break;
            case "W": color = W_COLOR; break;
            case "E": color = E_COLOR; break;
            default:
                color = Color.RESET;
        }

        String fields = adjustLength(     date,       DATE_LENGTH) + SEPARATOR +
                        adjustLength(     time,       TIME_LENGTH) + SEPARATOR +
                        adjustLength(processID, PROCESS_ID_LENGTH) + SEPARATOR +
                        adjustLength( threadID,  THREAD_ID_LENGTH) + SEPARATOR +
                        adjustLength( logLevel,  LOG_LEVEL_LENGTH) + SEPARATOR +
                        adjustLength(      tag,        TAG_LENGTH) + SEPARATOR;

        // Split the message onto multiple lines if needed,
        String message = chunkPreservingParentheses(line, MESSAGE_LENGTH, 2);
        print(fields + message, color);
        System.out.println();

        while (line.length() > message.length()) {

            // Debug,
            //print(line, OTHER_COLOR);
            //System.out.println("Line: " + line.length() + "length: " + message.length() + ", cont: " + CONTINUATION.length() + "dent: " + indentation.length());
            //System.out.println();

            // Remove the already printed part.
            line = line.substring(message.length()-CONTINUATION.length());

            // Add a dot to make links work,
            boolean shouldAddDot=false;
            if (line.matches("^[^\\.]*\\(.*:[123456789][1234567890]*\\).*")) shouldAddDot = true;

            // Indent,
            line = (shouldAddDot ? "." : (indentation.isEmpty() ? "" : " ")) + indentation + line;

            // Take another chunk,
            message = chunkPreservingParentheses(line, MESSAGE_LENGTH, 2+indentation.length());

            // Front pad to align this part with the message body,
            String paddedMessage = message;
            for (int i=0; i<fields.length(); i++) paddedMessage = ' ' + paddedMessage;

            // Print,
            print(paddedMessage, color);
            System.out.println();
        }

        return true;  // Keep in local buffer.
    }

    private static String adjustLength(String text, int length) {
        while (text.length() < length) text += ' ';
        if (text.length() > length) {
            text = text.substring(0, length-CONTINUATION.length());
            text += CONTINUATION;
        }
        return text;
    }

    private static String chunkPreservingParentheses(String text, int length, int minChunckLength) {

        if (text.length() <= length) return text;

        // Take a chunk out of the text,
        String chunk = text.substring(0, length-CONTINUATION.length()) + CONTINUATION;

        // Check if a paranthesis was opened and not closed,
        int lastOpenParanthesisIndex = chunk.lastIndexOf('(');
        int lastCloseParanthesisIndex = chunk.lastIndexOf(')');
        if (lastCloseParanthesisIndex <= lastOpenParanthesisIndex) {  // Also works when either is not found.
            if (minChunckLength<1) minChunckLength = 1;
            if (lastOpenParanthesisIndex > minChunckLength+CONTINUATION.length()) { // Avoid endless loops.
                int includeParenthesisSize = (CONTINUATION.length()>0) ? 1 : 0;
                chunk = text.substring(0, lastOpenParanthesisIndex+includeParenthesisSize-CONTINUATION.length()) + CONTINUATION;
            }
        }

        return chunk;
    }

    private static void repeatHistory() {
        int index = currentLocationInHistory-historyLength;
        if (index < 0) index += history.length;
        for (int i=0; i<historyLength; i++) {
            processLogcatLine(history[index]);
            index = (index + 1) % history.length;
        }
    }

    private static void print(String text, Color color) {
        System.out.print(color);
        System.out.print(text);
        System.out.print(Color.RESET);
    }

    private static String removeRedundantSpaces(String text) {
        String newText = text.replace("  ", " ");
        while (!text.equals(newText)) {
            text = newText;
            newText = text.replace("  ", " ");
        }
        return text;
    }

    private static void clearAndroidStudioConsole() {

        // Couldn't find a reliable way to clear Intellij terminal scrollback, so we just print
        // a LOT of newlines,
        StringBuilder bunchOfNewLines = new StringBuilder();
        for (int i=0; i<124; i++) bunchOfNewLines.append(System.lineSeparator());
        System.out.print(bunchOfNewLines);

        // Scroll the current line to the top of the window,
        try {
            // If we are on Windows,
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        } catch (Exception e) {

            // We are not on Windows,
            bunchOfNewLines = new StringBuilder();
            for (int i=0; i<124; i++) bunchOfNewLines.append("\b\r");
            System.out.print(bunchOfNewLines);
        }
    }

    private static void handleUserInput() {

        // Line read. Unfortunately, java doesn't provide character by character reading out of the box.
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String input = "";
        do {
            try {
                if (bufferedReader.ready()) {
                    input = input = bufferedReader.readLine().toUpperCase();

                    // Set log level,
                    if (input.equals("V")||input.equals("D")||input.equals("I")||input.equals("W")||input.equals("E")) {

                        if (!logLevelToShow.equals(input)) {
                            logLevelToShow = input;
                            clearAndroidStudioConsole();
                            repeatHistory();
                        }

                        prettify("----- Log level set to " + logLevelToShow + " -----");

                    } else if (input.equals("C")) {

                        // Clear screen and history,
                        clearAndroidStudioConsole();
                        historyLength = 0;
                    }
                } else {
                    Thread.sleep(100);
                }
            } catch (Exception e) { e.printStackTrace(); }

            // Check if the logcat process is still alive,
            if (!logcatProcess.isAlive()) {
                prettify("----- adb logcat process terminated -----");
                stopEverything = true;
            }

        } while (!stopEverything && !input.equals("Q"));

        // Allow all monitoring threads to exit,
        stopEverything = true;
    }

    interface ProcessListener {
        void onNewLine(String line);
    }

    enum Color {

        // Thanks to this answer: https://stackoverflow.com/a/51944613/1942069

        //Color end string, color reset
        RESET("\033[0m"),

        // Regular Colors. Normal color, no bold, background color etc.
        BLACK  ("\033[0;30m"),
        RED    ("\033[0;31m"),
        GREEN  ("\033[0;32m"),
        YELLOW ("\033[0;33m"),
        BLUE   ("\033[0;34m"),
        MAGENTA("\033[0;35m"),
        CYAN   ("\033[0;36m"),
        WHITE  ("\033[0;37m"),

        // Bold
        BLACK_BOLD  ("\033[1;30m"),
        RED_BOLD    ("\033[1;31m"),
        GREEN_BOLD  ("\033[1;32m"),
        YELLOW_BOLD ("\033[1;33m"),
        BLUE_BOLD   ("\033[1;34m"),
        MAGENTA_BOLD("\033[1;35m"),
        CYAN_BOLD   ("\033[1;36m"),
        WHITE_BOLD  ("\033[1;37m"),

        // Underline
        BLACK_UNDERLINED  ("\033[4;30m"),
        RED_UNDERLINED    ("\033[4;31m"),
        GREEN_UNDERLINED  ("\033[4;32m"),
        YELLOW_UNDERLINED ("\033[4;33m"),
        BLUE_UNDERLINED   ("\033[4;34m"),
        MAGENTA_UNDERLINED("\033[4;35m"),
        CYAN_UNDERLINED   ("\033[4;36m"),
        WHITE_UNDERLINED  ("\033[4;37m"),

        // Background
        BLACK_BACKGROUND  ("\033[40m"),
        RED_BACKGROUND    ("\033[41m"),
        GREEN_BACKGROUND  ("\033[42m"),
        YELLOW_BACKGROUND ("\033[43m"),
        BLUE_BACKGROUND   ("\033[44m"),
        MAGENTA_BACKGROUND("\033[45m"),
        CYAN_BACKGROUND   ("\033[46m"),
        WHITE_BACKGROUND  ("\033[47m"),

        // High Intensity
        BLACK_BRIGHT  ("\033[0;90m"),
        RED_BRIGHT    ("\033[0;91m"),
        GREEN_BRIGHT  ("\033[0;92m"),
        YELLOW_BRIGHT ("\033[0;93m"),
        BLUE_BRIGHT   ("\033[0;94m"),
        MAGENTA_BRIGHT("\033[0;95m"),
        CYAN_BRIGHT   ("\033[0;96m"),
        WHITE_BRIGHT  ("\033[0;97m"),

        // Bold High Intensity
        BLACK_BOLD_BRIGHT  ("\033[1;90m"),
        RED_BOLD_BRIGHT    ("\033[1;91m"),
        GREEN_BOLD_BRIGHT  ("\033[1;92m"),
        YELLOW_BOLD_BRIGHT ("\033[1;93m"),
        BLUE_BOLD_BRIGHT   ("\033[1;94m"),
        MAGENTA_BOLD_BRIGHT("\033[1;95m"),
        CYAN_BOLD_BRIGHT   ("\033[1;96m"),
        WHITE_BOLD_BRIGHT  ("\033[1;97m"),

        // High Intensity backgrounds
        BLACK_BACKGROUND_BRIGHT  ("\033[0;100m"),
        RED_BACKGROUND_BRIGHT    ("\033[0;101m"),
        GREEN_BACKGROUND_BRIGHT  ("\033[0;102m"),
        YELLOW_BACKGROUND_BRIGHT ("\033[0;103m"),
        BLUE_BACKGROUND_BRIGHT   ("\033[0;104m"),
        MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"),
        CYAN_BACKGROUND_BRIGHT   ("\033[0;106m"),
        WHITE_BACKGROUND_BRIGHT  ("\033[0;107m");

        private final String code;

        Color(String code) { this.code = code; }
        @Override public String toString() { return code; }
    }
}

このコードを次のようにダンプしLogcat.javaてコンパイルするだけです。

javac Logcat.java

そして、Android Studio の組み込みターミナル内で実行します。

java Logcat <your.package.name>

例えば:

java Logcat com.nomone.vr_desktop

結果は次のようになります。

自分の Logcat prettifier

高度なカスタマイズが可能で、ほとんどのオプションをアプリの最初のセクションに分けているので、色や書式を簡単に微調整できます。ツールが PATH 環境変数にない場合は、コンパイルする前に変数 (コード内) にadb完全なパスを設定するだけです。ADB_FILE_PATH

アプリケーションの実行中に、次のショートカットを入力できます。

  • c画面とローカルバッファをクリアします。
  • v、、、、、logcatレベルを変更しますidwe
  • q優雅に辞めること。Ctrl+cも機能します。

残念ながら、enterこれらのキーを押した後に押す必要があります。Java では、システム固有のコードを記述しない限り、コンソールからの 1 文字の入力は許可されていないようです。ごめん!

免責事項

  • 複数のデバイスが adb を使用して接続されている場合、これは機能しません。
  • 私はこれを徹底的にテストしていません。いくつかのデバイスでしばらく使用しただけです。
  • Windows や Mac でこれをテストしたことはありませんが、システム固有のものを使用しないように努めたので、それでも動作するはずです。

これで問題が解決することを願っています:)

于 2020-07-19T14:07:34.137 に答える
4

これはあなたの問題ではないかもしれませんが、Android Studio の複数のウィンドウが開いている場合、logcat はそのうちの 1 つにのみ送信され、アクティブなアプリケーションを実行しているウィンドウに送信されるとは限りません。

たとえば、ウィンドウ 1 は Tic-Tac-Toe アプリを開発している場所であり、ウィンドウ 2 は天気アプリを開発している場所です。天気アプリをデバッグ モードで実行すると、ウィンドウ 1 だけが logcat エントリを表示できる可能性があります。

于 2014-07-23T18:27:43.103 に答える
4

「Devices logcat」タブの右側に、「選択したプロセスの Logcat のみを表示」ボタンがあります。別のプロセスを実行するたびに再度プッシュする必要があるため、完璧ではありませんが、それが私にとって有効な唯一の解決策です。ここのところ...

于 2015-01-29T10:54:06.717 に答える
3

Android Studio 0.8.0 では、アプリを実行する前に、[ツール] -> [Android] から ADB 統合を有効にする必要があります。その後、log cat は正しく機能します。アプリの実行中に ADB 統合を無効にし、再度有効にすると、プロジェクトを再構築しない限りログ cat には何も表示されないことに注意してください。

于 2014-08-15T18:14:37.507 に答える
3

私の場合、出力をフィルタリングしただけなので、Logcatなどを再起動した後でも空に見えました.

于 2015-06-19T08:49:35.383 に答える
2

正しいクラスをインポートしていることを確認してください

import android.util.Log;
于 2015-02-24T00:07:44.557 に答える
2

私はちょうどそれを私のものに修正しました。DDMS ディスプレイの右端にある小さなアイコンを探して、Devices Logcat ビューと ADB ビューを復元します。

DDMS が最初に「ADB ログ」と「デバイス | logcat」タブの両方を表示したとき。"Devices | logcat" は、デバイス出力を表示するはずのものですが、空白でした。どういうわけか、これらのタブのいずれかを非表示にすることができましたが、その方法を正確に忘れてしまいました。しかし、右側に「Restore ADB」ビューという小さなアイコンがあり、それをクリックすると表示されました。次に、「Restore Devices logcat view」という別の小さなアイコンがありました。それをクリックすると、突然表示され、デバイスの出力が再び表示されました。

于 2015-04-11T19:07:53.820 に答える
2

Android Studio 0.8.9 では、Android Device Monitorを開き、 Devicesリストからエミュレーターを選択して、 LogCatタブに出力を取得しました。

その後、Android Studio のメイン ビューに戻り、 [ Android DDMS ] タブの右側にある[ Restore Logcat ビュー]を選択すると、そこにありました。

これが機能しない場合は、最初の文で説明したように、 Android デバイス モニターに logcat が表示される可能性があります。

于 2014-11-10T10:07:06.607 に答える
1

同時に複数のバージョンの adb を使用している場合、Logcat は失敗する可能性があります。Android Studio に 1 つ、ターミナルに 1 つ。

/usr/bin/adb {android-sdk}/platform-tools/adb を含む Android SDK を作成する "sudo apt-get install android-tools-adb" とは異なるバージョンの adb を使用している可能性があります。 out/host/linux-x86/bin/adb を作成する AOSP ビルドの出力

この問題が影響しているかどうかを確認するには、「Help -> Show Log in Files」を使用して idea.log を開き、「Initializing adb using:/home/repkap11/android-sdk/platform-tools/adb」のような行を探します。このパスを端末の「which adb」と比較してください。それらが一致しない場合、この問題が影響します。

Android Studio は {android-sdk}/platform-tools/adb を探しますが、PATH は気にしません。シンボリックリンクを使用してandroid-sdkのadbのバージョンを置き換えましたが、単に「sudo apt-get remove android-tools-adb」でも機能します。

于 2015-09-24T14:53:30.970 に答える
1

Logcat には、logcat の右側に小さなアイコンがあります。アイコンを使用して、logcat のオンとオフを切り替えることができます。通常、アイコンをクリックすることで (おそらく数回) logcat をアクティブにすることができます。

于 2014-09-06T21:48:49.163 に答える
1

このスレッドで @Robert Karl が言及したポイントを試してください。何も機能しない場合は、Android デバイス モニターで確実にログを確認できます。

  1. Android デバイス モニターを起動します。

  2. DDMS パースペクティブを選択し、

  3. 次に、スクリーンショットに示すようにデバイスを選択します。

    要件に応じてフィルターを適用できます

ここに画像の説明を入力

于 2015-02-24T14:22:24.000 に答える
1

「Android」ビューの右端にあるアイコンをクリックしてみてください。Android ビューに Logcat タブが表示されます (Alt+6 を押して Android ビューを表示できます)。

于 2015-05-28T14:36:13.243 に答える
1

一部のカスタム romは、パフォーマンス上の理由からログを無効にします (可能な限り % を圧縮します)。これを有効にするには、rom の組み込みアプリを確認するか、rom のメニューを微調整してください。

私は i9505 で Kushan の Galaxy S4 Rom を実行していましたが、最小レベルのパフォーマンス向上を実現するためにデフォルトでログ記録が無効になっていることを知りませんでしたが、これはカスタムビルドの「パフォーマンス」指向の rom では珍しいことではないようです。 .. これを発見するのに私はかなりの年月を要しました - ログに記録されたメッセージの数だけが詳細ではなく表示されるので、非常に面倒です。

于 2016-01-06T09:45:30.743 に答える
1

ホストとの接続が失われた場合に備えて、実行->デバッグに移動し、再接続の許可を求めます。はいをクリックします。それはそれを行う必要があります。

于 2015-02-27T07:19:09.430 に答える
1

[ビルド バリアント] コンテキスト メニューで、ビルド バリアントの「デバッグ」が有効になっていることを確認してください。(これは、ウィンドウの左下隅にあります)。以前にアプリケーションの apk に署名したことがある場合、このオプションはリリース モードに設定されます。これにより、デバッグ メッセージがログ cat に表示されなくなります。

于 2014-12-05T14:20:14.670 に答える
1

私は同じ症状を持っていましたが、私の問題はもっと単純で、本当に私の間違いでした. 間違ったフィルターセットを持っていました。

解決策は、正しいフィルター セットがあることを確認することでした。

于 2015-04-01T16:21:16.303 に答える
1

を変更したところapplictionId、logcat が機能しなくなりました。リセットするには、パッケージ名を変更する必要があります。アプリのパッケージ名を表示するLogcatウィンドウの右上隅のドロップダウンをクリックしてクリックし、Edit Filter Configuration今すぐパッケージ名を変更するをクリックしてください。それは働き始めます。

于 2015-04-29T08:21:48.883 に答える
1

私にとっては、アプリケーションでのみ機能していたのではなく、フィルターが選択されていない場合 (右側のオプション) は機能していました。しかし、自分のアプリだけを表示する必要があったため、独自のフィルターを実行してパッケージ名にフィルターすると、正常に機能することがわかりました。それがあなたにも役立つことを願っています:)

于 2014-11-25T21:46:04.277 に答える
1

私のために働いた簡単な修正(これらの他の提案のいくつかを試した後)。logcat が別のウィンドウ (2 番目の画面) に空白で表示されていました。LogcatタブをDebuggerとConsoleタブの横にあるデバッグパネルの元の場所にドラッグするだけで、VOILA ...すぐに更新され、すべてのプロセスが詳細に表示され始めました。そのため (logcat がデバッガー パネルの外にある場合 (つまり、logcat タブがデバッガーとコンソール タブの横にネストされていない場合)、更新を受信せず、空白のままになります。これが古いバージョンの Android Studio で問題が発生しましたが、繰り返しますが、簡単に試すことができ、動作する場合は...動作します!!

于 2015-02-13T16:18:15.227 に答える
0

Logcatを実行するには、 Logcatを再起動してからDDMSを開き (開くには、Android DDMS の右上隅にある Android アイコンをクリックします)、Log Level= Debugを設定します。アプリを実行します。

于 2015-04-10T06:01:06.987 に答える
0

私の電話には何らかの理由でlogcatを出力しなかったカスタムROMがありましたが、エミュレーターと別のデバイスは出力しました。ROMを消去してインストールすると、logcatが再び機能しました。

于 2016-09-09T12:02:06.843 に答える
0

私の場合、デバイスが表示されたにもかかわらず、TCP 接続を介して切断されました。

通話中

adb connect <device ip>

logcat を再起動しました。

于 2015-04-28T02:29:35.513 に答える
0

これを解決する3つの方法を見つけました。

  1. Android 4.0 デバイスでデバッグします (前に Android Lollipop デバイスで実行しました)。
  2. DDMS の再起動ボタンをクリックします。
  3. Android Device Monitor を起動すると、logcat にログインが表示されます。頑張って〜
于 2015-04-12T14:58:41.903 に答える
0

私は他のすべての答えを試しましたが、貧弱なlogcatでは何も機能していません。logcat に関する私の問題は、最初から機能しなかったことです。Androidスタジオをインストールしてから、デバイスをadbに接続できるようになったときから、出力が得られませんでした。おそらく、32ビットのWindows 7セットアップが壊れていることが原因です...したがって、ターミナルを介して実行してlogcatでアプリを実行するバッチスクリプトを作成しました。

adb shell am start -n "com.package.name/com.package.name.Activity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
adb shell pidof com.package.name > pid
for /f %%i in (pid) do (set pid=%%i)
echo %pid%
adb logcat *:V --pid=%pid%
ENDLOCAL

これを正しいディレクトリ パスとパッケージ名と共に logcat.bat (またはwhatever.bat) ファイルに入れます。

ファイルを AndroidStudioProjects/package_name/ フォルダーに配置すると、実行できます

C:\User\me\AndroidStudioProjects\package_name>logcat (または何でも)

ターミナルで。

変更することで、logcat の表示内容を変更できることに注意してください。

*:V

adb logcat コマンドで。(例 *:E は (E)エラー タグのみを示します)。

これが他の誰かの役に立てば幸いです。

于 2019-02-05T06:02:41.620 に答える
0

隠しているかどうかを確認します...問題が隠されている場合は、指定された画像を表示して表示するか、ALT + 6ここに画像の説明を入力

于 2015-02-12T11:53:49.563 に答える
0

最近インストールして使用していないプラグインを無効にしてアンインストールします。

于 2022-02-17T17:20:19.373 に答える
0

私の場合、他の回答でこれを解決しようとしましたが、結果はありませんでした。意図せずに、空のタグがほとんど表示されないことを発見しました (Android Studio 1.4)。そのため、TAG 内に任意の文字 (空白は機能しません) を入れてみてください。

Log.wtf("x", "Android Studio Team, solve this, please!");
于 2015-12-28T01:51:29.640 に答える