昨日 Android Studio をインストールし、LogCat を使用してログを表示しようとしました。しかし、logcat には何も表示されません。ターミナルを使用して実行./adb logcat
しましたが、動作します。
Android Studio で logcat を使用する方法を説明できる人はいますか?
昨日 Android Studio をインストールし、LogCat を使用してログを表示しようとしました。しかし、logcat には何も表示されません。ターミナルを使用して実行./adb logcat
しましたが、動作します。
Android Studio で logcat を使用する方法を説明できる人はいますか?
logcat を再起動すると、常に役立ちます。
Alt+を 2 回押し6て、logcat ウィンドウを再起動する必要があります。そうすれば、ログ出力が表示されます。
この問題は主にデバッグ モードで発生します。
これらは私を助けました:
1.ADB 統合
を有効にする
2. Android Device Monitor に移動します デバイスがオンラインかどうかを確認し、必要なフィルターを作成します
Android Studio を再起動すると役に立ちました。
Android Studio アプリケーションでは、アプリケーションのデバッグ オプション (Shift+f9) をクリックしてデバッグ モードで実行し、LogCat を有効にする必要があります。
技術的な回答ではありませんが、logcat の検索ボックスをチェックすることをお勧めします。入力された文字がある場合、その特定の文字または単語を検索するため、logcat は空になり、存在しない場合、logcat ログは完全に空になります。
プロジェクトを閉じて、もう一度開いてみてください。うまくいきました。ログが再表示されます。
**
**
数か月の苛立ちとトラブルの後、これを解決しました。
デバイスモニターはデバッグ中に正常に機能しましたが、標準の logcat ビューは常に空でした。
理由は非常に単純
でした。logcat ビューはありましたが、更新によって幅が 0 に移動されました。
「ALT 6」タブにいると、「ADB ログ」と「デバイス | logcat」
デバイス| logcat の 2 つのタブが表示されます。logcat は、デバイスと logcat で構成され、垂直方向の境界線で分割されていることを意味します。
縦の境界線は移動でき、更新中に 100% 右に移動したように見えます。
これにより、logcat が収集されますが、表示されません。マウス ポインターをツール ウィンドウの右側に移動し、logcat をドラッグしてビューに戻します。
このソリューションはすべての人に役立つわけではありませんが、ADB 接続が機能しているにもかかわらず logcat の出力がない多くの人が同じ問題に遭遇する可能性があります。
私の場合、開発者向けオプションメニューには、というオプションがあります
Revoke USB debugging authorisations
.
既存のすべての承認を取り消すと、使用しているコンピューターを信頼するように再度求められ、その後、ログが再び表示され始めます。
他のすべてがうまくいかなかったとき、これが私がしたことです。adb logcat
うまく機能したので、私はそれに頼ることにしました。Android Studio の組み込みターミナルで実行adb logcat -v color
すると、通常の logcat と同様の出力が生成され、コード リンクも機能するようになりました。
しかし、これにはいくつかの問題がありました。
--pid=<your PID>
オプションを使用すると、単一プロセスの出力を監視できます。ただし、アプリを再起動するたびに PID が変更されるため、再起動するたびにこのコマンドを再実行しました。そこで、パッケージの 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 = "→";
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
結果は次のようになります。
高度なカスタマイズが可能で、ほとんどのオプションをアプリの最初のセクションに分けているので、色や書式を簡単に微調整できます。ツールが PATH 環境変数にない場合は、コンパイルする前に変数 (コード内) にadb
完全なパスを設定するだけです。ADB_FILE_PATH
アプリケーションの実行中に、次のショートカットを入力できます。
c
画面とローカルバッファをクリアします。v
、、、、、logcatレベルを変更しますi
。d
w
e
q
優雅に辞めること。Ctrl+cも機能します。残念ながら、enterこれらのキーを押した後に押す必要があります。Java では、システム固有のコードを記述しない限り、コンソールからの 1 文字の入力は許可されていないようです。ごめん!
これで問題が解決することを願っています:)
これはあなたの問題ではないかもしれませんが、Android Studio の複数のウィンドウが開いている場合、logcat はそのうちの 1 つにのみ送信され、アクティブなアプリケーションを実行しているウィンドウに送信されるとは限りません。
たとえば、ウィンドウ 1 は Tic-Tac-Toe アプリを開発している場所であり、ウィンドウ 2 は天気アプリを開発している場所です。天気アプリをデバッグ モードで実行すると、ウィンドウ 1 だけが logcat エントリを表示できる可能性があります。
「Devices logcat」タブの右側に、「選択したプロセスの Logcat のみを表示」ボタンがあります。別のプロセスを実行するたびに再度プッシュする必要があるため、完璧ではありませんが、それが私にとって有効な唯一の解決策です。ここのところ...
Android Studio 0.8.0 では、アプリを実行する前に、[ツール] -> [Android] から ADB 統合を有効にする必要があります。その後、log cat は正しく機能します。アプリの実行中に ADB 統合を無効にし、再度有効にすると、プロジェクトを再構築しない限りログ cat には何も表示されないことに注意してください。
私の場合、出力をフィルタリングしただけなので、Logcatなどを再起動した後でも空に見えました.
正しいクラスをインポートしていることを確認してください
import android.util.Log;
私はちょうどそれを私のものに修正しました。DDMS ディスプレイの右端にある小さなアイコンを探して、Devices Logcat ビューと ADB ビューを復元します。
DDMS が最初に「ADB ログ」と「デバイス | logcat」タブの両方を表示したとき。"Devices | logcat" は、デバイス出力を表示するはずのものですが、空白でした。どういうわけか、これらのタブのいずれかを非表示にすることができましたが、その方法を正確に忘れてしまいました。しかし、右側に「Restore ADB」ビューという小さなアイコンがあり、それをクリックすると表示されました。次に、「Restore Devices logcat view」という別の小さなアイコンがありました。それをクリックすると、突然表示され、デバイスの出力が再び表示されました。
Android Studio 0.8.9 では、Android Device Monitorを開き、 Devicesリストからエミュレーターを選択して、 LogCatタブに出力を取得しました。
その後、Android Studio のメイン ビューに戻り、 [ Android DDMS ] タブの右側にある[ Restore Logcat ビュー]を選択すると、そこにありました。
これが機能しない場合は、最初の文で説明したように、 Android デバイス モニターに logcat が表示される可能性があります。
同時に複数のバージョンの 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」でも機能します。
Logcat には、logcat の右側に小さなアイコンがあります。アイコンを使用して、logcat のオンとオフを切り替えることができます。通常、アイコンをクリックすることで (おそらく数回) logcat をアクティブにすることができます。
このスレッドで @Robert Karl が言及したポイントを試してください。何も機能しない場合は、Android デバイス モニターで確実にログを確認できます。
Android デバイス モニターを起動します。
DDMS パースペクティブを選択し、
次に、スクリーンショットに示すようにデバイスを選択します。
要件に応じてフィルターを適用できます
「Android」ビューの右端にあるアイコンをクリックしてみてください。Android ビューに Logcat タブが表示されます (Alt+6 を押して Android ビューを表示できます)。
一部のカスタム romは、パフォーマンス上の理由からログを無効にします (可能な限り % を圧縮します)。これを有効にするには、rom の組み込みアプリを確認するか、rom のメニューを微調整してください。
私は i9505 で Kushan の Galaxy S4 Rom を実行していましたが、最小レベルのパフォーマンス向上を実現するためにデフォルトでログ記録が無効になっていることを知りませんでしたが、これはカスタムビルドの「パフォーマンス」指向の rom では珍しいことではないようです。 .. これを発見するのに私はかなりの年月を要しました - ログに記録されたメッセージの数だけが詳細ではなく表示されるので、非常に面倒です。
ホストとの接続が失われた場合に備えて、実行->デバッグに移動し、再接続の許可を求めます。はいをクリックします。それはそれを行う必要があります。
[ビルド バリアント] コンテキスト メニューで、ビルド バリアントの「デバッグ」が有効になっていることを確認してください。(これは、ウィンドウの左下隅にあります)。以前にアプリケーションの apk に署名したことがある場合、このオプションはリリース モードに設定されます。これにより、デバッグ メッセージがログ cat に表示されなくなります。
私は同じ症状を持っていましたが、私の問題はもっと単純で、本当に私の間違いでした. 間違ったフィルターセットを持っていました。
解決策は、正しいフィルター セットがあることを確認することでした。
を変更したところapplictionId
、logcat が機能しなくなりました。リセットするには、パッケージ名を変更する必要があります。アプリのパッケージ名を表示するLogcatウィンドウの右上隅のドロップダウンをクリックしてクリックし、Edit Filter Configuration
今すぐパッケージ名を変更するをクリックしてください。それは働き始めます。
私にとっては、アプリケーションでのみ機能していたのではなく、フィルターが選択されていない場合 (右側のオプション) は機能していました。しかし、自分のアプリだけを表示する必要があったため、独自のフィルターを実行してパッケージ名にフィルターすると、正常に機能することがわかりました。それがあなたにも役立つことを願っています:)
私のために働いた簡単な修正(これらの他の提案のいくつかを試した後)。logcat が別のウィンドウ (2 番目の画面) に空白で表示されていました。LogcatタブをDebuggerとConsoleタブの横にあるデバッグパネルの元の場所にドラッグするだけで、VOILA ...すぐに更新され、すべてのプロセスが詳細に表示され始めました。そのため (logcat がデバッガー パネルの外にある場合 (つまり、logcat タブがデバッガーとコンソール タブの横にネストされていない場合)、更新を受信せず、空白のままになります。これが古いバージョンの Android Studio で問題が発生しましたが、繰り返しますが、簡単に試すことができ、動作する場合は...動作します!!
Logcatを実行するには、 Logcatを再起動してからDDMSを開き (開くには、Android DDMS の右上隅にある Android アイコンをクリックします)、Log Level= Debugを設定します。アプリを実行します。
私の電話には何らかの理由でlogcatを出力しなかったカスタムROMがありましたが、エミュレーターと別のデバイスは出力しました。ROMを消去してインストールすると、logcatが再び機能しました。
私の場合、デバイスが表示されたにもかかわらず、TCP 接続を介して切断されました。
通話中
adb connect <device ip>
logcat を再起動しました。
これを解決する3つの方法を見つけました。
私は他のすべての答えを試しましたが、貧弱な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)エラー タグのみを示します)。
これが他の誰かの役に立てば幸いです。
隠しているかどうかを確認します...問題が隠されている場合は、指定された画像を表示して表示するか、ALT + 6
最近インストールして使用していないプラグインを無効にしてアンインストールします。
私の場合、他の回答でこれを解決しようとしましたが、結果はありませんでした。意図せずに、空のタグがほとんど表示されないことを発見しました (Android Studio 1.4)。そのため、TAG 内に任意の文字 (空白は機能しません) を入れてみてください。
Log.wtf("x", "Android Studio Team, solve this, please!");