Android Lee mensajes SMS recientes desde la línea de comandos


18

Recientemente he roto la pantalla de mi Android. (De nuevo)

Es un T-Mobile G2

Intentar mantenerme al día con mi ocupada vida relacionada con la tecnología es bastante difícil sin perder mi vínculo con todos.

He rooteado el teléfono y ya tengo la depuración USB activada.

¿Alguien sabe cómo revisaría mi mensaje SMS reciente desde el shell adb para poder seguir trabajando mientras guardo para obtener un nuevo teléfono o una pantalla de reemplazo.

Gracias por cualquiera que tenga alguna información al respecto.

EDITAR

Respuesta a eldarerathis

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: permission denied
$

No puedo modificar el archivo. ¿Sabes en realidad dónde está?

$ chmod +x sqlite3
chmod +x sqlite3
Bad mode
$

su me deja solo con comandos básicos

$ su
su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: not found
#

Corregido

sqlite no fue instalado

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

También para acceder a la base de datos, necesitaba ser root.

C:\android-sdk\platform-tools>adb shell
$ su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

Muchas gracias eldarerathis

Este enlace ayudó


Parece que no tienes el sqlite3binario en tu dispositivo. El primer enlace en mi respuesta tiene instrucciones para ayudarlo a instalarlo /system/bin. Aquí hay un enlace al binario en sí.
eldarerathis

Respuestas:


10

Esto es realmente feo, pero puede leerlos desde la línea de comandos utilizando sqlite3para ver las entradas de la base de datos. Probablemente necesitará desenterrar un binario para esto a menos que tenga una ROM personalizada instalada. Hay algunas instrucciones para instalar dicho binario en esta pregunta de desbordamiento de pila , y SuperOneClick viene empaquetado con él ( aquí se puede encontrar una copia del binario ).

Si necesita instalar el binario, use mount(sin parámetros) para determinar dónde /systemse encuentra físicamente su partición (la mía /dev/block/mtdblock3, por ejemplo). Luego siga las instrucciones en el primer enlace de arriba y comience volviendo a montarlo en modo lectura / escritura con el comando:

mount -o rw,remount /your/system/partition /system

Una vez que lo haya hecho sqlite3, querrá abrir un adb shell, cambiar a root con suy luego hacer lo siguiente:

# cd /data/data
cd /data/data
# cd com.android.providers.telephony/databases ***
cd com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM sms WHERE read=0;

Esto extraerá todas las filas de la tabla para todos los mensajes no leídos. Las columnas en la tabla se definen de esta manera (para que pueda recortar SELECT):

CREATE TABLE sms (_id INTEGER PRIMARY KEY,thread_id INTEGER,address TEXT,
  person INTEGER,date INTEGER,protocol INTEGER,read INTEGER DEFAULT 0,
  status INTEGER DEFAULT -1,type INTEGER,reply_path_present INTEGER,
  subject TEXT,body TEXT,service_center TEXT,locked INTEGER DEFAULT 0,
  error_code INTEGER DEFAULT 0,seen INTEGER DEFAULT 0);

*** Nota para la línea marcada: esto puede ser ligeramente diferente dependiendo de su dispositivo y versión de Android, por eso he incluido este cdcomando por separado. Yo creo que lo que solía ser com.android.providers/telephony/databasesen los dispositivos más antiguos, pero no lo recuerdo. Use lspara buscar el camino correcto aquí.


Alternativamente, puede intentar copiar el archivo .db en su tarjeta SD (o extraerlo con adb pull) y luego leerlo en su computadora con sqlite.


Intenté esto y parece que sqlite3 tiene permiso denegado

dice mal modo

@ Jason: debe ser root para leer ese directorio (solo ejecute de suantemano).
eldarerathis

@ Jason: Hm, usa chmod 0755 sqlite3, entonces. Quizás al chmodbinario de stock no le gusta el +xparámetro.
eldarerathis

tan pronto como ejecuto su. actúa como si no hubiera comandos

3

Gracias a la hermosa pista anterior de eldarerathis, acabo de hacer

DB=/data/data/com.android.providers.telephony/databases/mmssms.db
echo 'select address,body from sms;' | ./sqlite3 -csv $DB 

leer mis SMS desde mi solicitud de root.

Como no tenía sqlite3, primero tuve que descargarlo con

curl http://dl.dropbox.com/u/16958605/sqlite3
chmod a+x sqlite3

O ver instalador SQLite3 en Google Play (si no confía en la fuente de Dropbox).


1
Una URL dl.dropbox.com para ese binario no se siente segura. ¿Pueden suministrar una fuente oficial?
pzkpfw

1

En caso de que esté interesado en más detalles que solo el remitente y el mensaje (como en esta respuesta ), acabo de encontrar un buen artículo sobre el tema: Leer SMS directamente desde la base de datos Sqlite en Android . Ver también: La estructura de datos del mensaje .

Aún mejor, eche un vistazo a Github: ANDROID-SMS es una herramienta escrita en Python que recupera todos los mensajes SMS y los organiza en conversaciones de SMS con estadísticas proporcionadas. Eso también recupera todos los mensajes MMS y los organiza en conversaciones MMS, con los archivos respectivos. No lo he probado (todavía) yo mismo (lo encontré hace unos minutos), pero suena bastante bien.

Por supuesto, este programa no funciona directamente en el dispositivo Android, sino en su computadora (donde requiere Python 2.7 con SQLite3 para Python). Por lo tanto, primero deberá extraer la base de datos del dispositivo. Todos los pasos necesarios se describen en la página principal de Github del proyecto.


0

Otra solución que inventé utiliza una aplicación en el teléfono que reacciona en SMS y la guarda en un archivo que puede leer con ADB.

  • Instale cualquier aplicación similar a Tasker, lo hice con E-Robot
  • Crear nuevo comando
  • Añadir evento Contact=>SMS
  • Agregue acción Memory=>Write file, allí puede guardar SMS en un archivo nuevo cada vez o en el mismo con separador. De todos modos guárdelo en / sdcard o cualquier ruta accesible a través de ADB.
  • Monitoree esa ruta con ADB y lea los contenidos de SMS.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.