Android SQLite ничего не возвращает при вызове через adb shell, но когда внутри adb это работает

#android #sqlite #shell #adb

#Android #sqlite #оболочка #adb

Вопрос:

У меня есть рутированный телефон Android, и я хочу получать доступ к базе данных приложения через adb , скажем, каждую минуту.

Итак, когда я захожу в оболочку adb с помощью adb команды и внутри оболочки, я выполняю команду SQL, она работает, и я получаю результат:

 # echo "select id,timestamp from record_table ORDER BY id DESC limit 1;" | sqlite3 /data/data/APPLICATION/databases/record_database                                                                                                                            
99|1599214373234
  

Однако, при выполнении этого напрямую через

 $ adb shell "su -c echo "select id,timestamp from record_table ORDER BY id DESC limit 1;" | sqlite3 /data/data/APPLICATION/databases/record_database"
  

Я ничего не получил обратно на свой терминал. (Я думаю, нет проблем с экранированием кавычек, поскольку это привело бы к ошибке, и я также попробовал несколько других способов определить эту команду)

Я полагаю, что должно быть что-то с stdout / stderr adb, но после выполнения этого

 adb shell su -c setprop log.redirect-stdio true
  

Это все еще не работает.

Кто-нибудь когда-либо сталкивался с этой проблемой?

Комментарии:

1. Я также попытался перенаправить на / data / local / tmp / random_file, но содержимое этого файла также пустое

Ответ №1:

Между тем, он заработал. Потребовалось более сложное экранирование символов: команда D не проходила через sqlite3, поэтому использование одинарных кавычек решило проблему. Извините за публикацию…

Правильная команда:

 adb shell su -c "echo 'select * from record_table ORDER BY id DESC limit ${N};' | sqlite3 $DB_PATH"