aboutsummaryrefslogtreecommitdiffstats
path: root/dumpeventlog
diff options
context:
space:
mode:
Diffstat (limited to 'dumpeventlog')
-rw-r--r--dumpeventlog/.classpath7
-rw-r--r--dumpeventlog/.project17
-rw-r--r--dumpeventlog/Android.mk5
-rw-r--r--dumpeventlog/etc/Android.mk8
-rwxr-xr-xdumpeventlog/etc/dumpeventlog81
-rw-r--r--dumpeventlog/etc/manifest.txt1
-rw-r--r--dumpeventlog/src/Android.mk14
-rw-r--r--dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java145
8 files changed, 278 insertions, 0 deletions
diff --git a/dumpeventlog/.classpath b/dumpeventlog/.classpath
new file mode 100644
index 0000000..b0326c8
--- /dev/null
+++ b/dumpeventlog/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/ddmlib"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/dumpeventlog/.project b/dumpeventlog/.project
new file mode 100644
index 0000000..c416f4f
--- /dev/null
+++ b/dumpeventlog/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>dumpeventlog</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/dumpeventlog/Android.mk b/dumpeventlog/Android.mk
new file mode 100644
index 0000000..7bb870d
--- /dev/null
+++ b/dumpeventlog/Android.mk
@@ -0,0 +1,5 @@
+# Copyright 2007 The Android Open Source Project
+#
+DUMPEVENTLOG_LOCAL_DIR := $(call my-dir)
+include $(DUMPEVENTLOG_LOCAL_DIR)/etc/Android.mk
+include $(DUMPEVENTLOG_LOCAL_DIR)/src/Android.mk
diff --git a/dumpeventlog/etc/Android.mk b/dumpeventlog/etc/Android.mk
new file mode 100644
index 0000000..8094734
--- /dev/null
+++ b/dumpeventlog/etc/Android.mk
@@ -0,0 +1,8 @@
+# Copyright 2007 The Android Open Source Project
+#
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_PREBUILT_EXECUTABLES := dumpeventlog
+include $(BUILD_HOST_PREBUILT)
+
diff --git a/dumpeventlog/etc/dumpeventlog b/dumpeventlog/etc/dumpeventlog
new file mode 100755
index 0000000..56f8c22
--- /dev/null
+++ b/dumpeventlog/etc/dumpeventlog
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright 2005-2007, The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+ newProg=`/bin/ls -ld "${prog}"`
+ newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+ if expr "x${newProg}" : 'x/' >/dev/null; then
+ prog="${newProg}"
+ else
+ progdir=`dirname "${prog}"`
+ prog="${progdir}/${newProg}"
+ fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+jarfile=dumpeventlog.jar
+frameworkdir="$progdir"
+libdir="$progdir"
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+ frameworkdir=`dirname "$progdir"`/tools/lib
+ libdir=`dirname "$progdir"`/tools/lib
+fi
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+ frameworkdir=`dirname "$progdir"`/framework
+ libdir=`dirname "$progdir"`/lib
+fi
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+ echo `basename "$prog"`": can't find $jarfile"
+ exit 1
+fi
+
+
+# Check args.
+if [ debug = "$1" ]; then
+ # add this in for debugging
+ java_debug=-agentlib:jdwp=transport=dt_socket,server=y,address=8050,suspend=y
+ shift 1
+else
+ java_debug=
+fi
+
+# Mac OS X needs an additional arg, or you get an "illegal thread" complaint.
+if [ `uname` = "Darwin" ]; then
+ os_opts="-XstartOnFirstThread"
+else
+ os_opts=
+fi
+
+if [ "$OSTYPE" = "cygwin" ] ; then
+ jarpath=`cygpath -w "$frameworkdir/$jarfile"`
+ progdir=`cygpath -w "$progdir"`
+else
+ jarpath="$frameworkdir/$jarfile"
+fi
+
+# need to use "java.ext.dirs" because "-jar" causes classpath to be ignored
+# might need more memory, e.g. -Xmx128M
+exec java -Xmx128M $os_opts $java_debug -Djava.ext.dirs="$frameworkdir" -Djava.library.path="$libdir" -jar "$jarpath" "$@"
diff --git a/dumpeventlog/etc/manifest.txt b/dumpeventlog/etc/manifest.txt
new file mode 100644
index 0000000..0eea915
--- /dev/null
+++ b/dumpeventlog/etc/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.android.dumpeventlog.DumpEventLog
diff --git a/dumpeventlog/src/Android.mk b/dumpeventlog/src/Android.mk
new file mode 100644
index 0000000..bf99375
--- /dev/null
+++ b/dumpeventlog/src/Android.mk
@@ -0,0 +1,14 @@
+# Copyright 2007 The Android Open Source Project
+#
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_JAR_MANIFEST := ../etc/manifest.txt
+LOCAL_JAVA_LIBRARIES := \
+ ddmlib
+LOCAL_MODULE := dumpeventlog
+
+include $(BUILD_HOST_JAVA_LIBRARY)
+
diff --git a/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java b/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java
new file mode 100644
index 0000000..6c528e1
--- /dev/null
+++ b/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dumpeventlog;
+
+import com.android.ddmlib.AndroidDebugBridge;
+import com.android.ddmlib.Device;
+import com.android.ddmlib.Log;
+import com.android.ddmlib.Log.ILogOutput;
+import com.android.ddmlib.Log.LogLevel;
+import com.android.ddmlib.log.LogReceiver;
+import com.android.ddmlib.log.LogReceiver.ILogListener;
+import com.android.ddmlib.log.LogReceiver.LogEntry;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Connects to a device using ddmlib and dumps its event log as long as the device is connected.
+ */
+public class DumpEventLog {
+
+ /**
+ * Custom {@link ILogListener} to receive and save the event log raw output.
+ */
+ private static class LogWriter implements ILogListener {
+ private FileOutputStream mOutputStream;
+ private LogReceiver mReceiver;
+
+ public LogWriter(String filePath) throws IOException {
+ mOutputStream = new FileOutputStream(filePath);
+ }
+
+ public void newData(byte[] data, int offset, int length) {
+ try {
+ mOutputStream.write(data, offset, length);
+ } catch (IOException e) {
+ if (mReceiver != null) {
+ mReceiver.cancel();
+ }
+ System.out.println(e);
+ }
+ }
+
+ public void newEntry(LogEntry entry) {
+ // pass
+ }
+
+ public void setReceiver(LogReceiver receiver) {
+ mReceiver = receiver;
+ }
+
+ public void done() throws IOException {
+ mOutputStream.close();
+ }
+ }
+
+ public static void main(String[] args) {
+ if (args.length != 2) {
+ System.out.println("Usage: dumpeventlog <device s/n> <filepath>");
+ return;
+ }
+
+ // redirect the log output to /dev/null
+ Log.setLogOutput(new ILogOutput() {
+ public void printAndPromptLog(LogLevel logLevel, String tag, String message) {
+ // pass
+ }
+
+ public void printLog(LogLevel logLevel, String tag, String message) {
+ // pass
+ }
+ });
+
+ // init the lib
+ AndroidDebugBridge.init(false /* debugger support */);
+
+ try {
+ AndroidDebugBridge bridge = AndroidDebugBridge.createBridge();
+
+ // we can't just ask for the device list right away, as the internal thread getting
+ // them from ADB may not be done getting the first list.
+ // Since we don't really want getDevices() to be blocking, we wait here manually.
+ int count = 0;
+ while (bridge.hasInitialDeviceList() == false) {
+ try {
+ Thread.sleep(100);
+ count++;
+ } catch (InterruptedException e) {
+ // pass
+ }
+
+ // let's not wait > 10 sec.
+ if (count > 100) {
+ System.err.println("Timeout getting device list!");
+ return;
+ }
+ }
+
+ // now get the devices
+ Device[] devices = bridge.getDevices();
+
+ for (Device device : devices) {
+ if (device.getSerialNumber().equals(args[0])) {
+ try {
+ grabLogFrom(device, args[1]);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return;
+ }
+ }
+
+ System.err.println("Could not find " + args[0]);
+ } finally {
+ AndroidDebugBridge.terminate();
+ }
+ }
+
+ private static void grabLogFrom(Device device, String filePath) throws IOException {
+ LogWriter writer = new LogWriter(filePath);
+ LogReceiver receiver = new LogReceiver(writer);
+ writer.setReceiver(receiver);
+
+ device.runEventLogService(receiver);
+
+ writer.done();
+ }
+}