如何启用 Android 的所有内部 SQL cmd 的日志记录?
How to enable LOGging of all internal SQL cmd's of the Android?
在我的学习过程中,我想关注下一刻:Android/phone 固件中到底有哪些?框架? sys.Libs? SQL 正在生成命令以处理最终用户软件的程序代码。
我现在必须理解并弄清楚的纯示例 - 如何,在 Contact Provider 中使用 which exactly SQL 命令是 运行 以下程序代码:
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
ContentResolver resolver = context.getContentResolver();
try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null)) {
.....
}
简单地说:在 Android 工作室的 Console/Logcat 中,我想找出类似的东西:
“SELECT ...来自 phone_lookup INNER JOIN ... ON ... WHERE ... ORDER BY ...”
我使用的是与最新 Android Studio 捆绑在一起的官方模拟器:Pixel_3a_API_30_x86.avd "smartphone" - 因此使用 root 命令来实现这个目标应该不难。现在我无法得到它。我试过下一个电话:
adb shell setprop log.tag.SQLiteLog VERBOSE
adb shell setprop log.tag.SQLiteStatements VERBOSE
adb shell setprop db.log.slow_query_threshold 0
and next:
adb root
adb shell stop
adb shell start
没有结果。因此,我的问题是 - 我必须如何以及在什么地方 use/call/set/create/delete 才能看到 Android 体内的所有内部 SQL 命令 executed/generated - 在所有内部它的内部结构 libraries/plugins/etc。换句话说,在 phone 上为最终用户软件创建整个 Android 工作环境的所有内容。
好的,像往常一样 - 如果你想做某事 - 只做你自己)))
try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null))
如果在此命令行中输入最后一个参数 100% 错误字符串 - 例如“LIKE bananas” - 在执行阶段我们将收到错误“android.database.sqlite.SQLiteException: near “bananas”: syntax错误(代码 1)”
具有相应的 staсktrace,其中还包括完整的 SQL 命令 - 在其中发现了该错误。
因此,我们可以很容易地获得知识——通过 WHICH EXACTLY SQL request 发出特定的 URI 请求。它可以在真手机上使用!!!因此我们可以很容易地理解 - 为什么突然之间我们无法访问特定的数据列,该数据列似乎存在于查询结果中(根据开发人员的在线帮助),但由于某些原因在某些模型上他们没有的电话。现在它变得更容易理解 - 以及如何根据“stacktraced exactly SQL”作为参考重写你的请求 - 但保证在执行过程中获得必要的数据!
在我的学习过程中,我想关注下一刻:Android/phone 固件中到底有哪些?框架? sys.Libs? SQL 正在生成命令以处理最终用户软件的程序代码。 我现在必须理解并弄清楚的纯示例 - 如何,在 Contact Provider 中使用 which exactly SQL 命令是 运行 以下程序代码:
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
ContentResolver resolver = context.getContentResolver();
try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null)) {
.....
}
简单地说:在 Android 工作室的 Console/Logcat 中,我想找出类似的东西: “SELECT ...来自 phone_lookup INNER JOIN ... ON ... WHERE ... ORDER BY ...” 我使用的是与最新 Android Studio 捆绑在一起的官方模拟器:Pixel_3a_API_30_x86.avd "smartphone" - 因此使用 root 命令来实现这个目标应该不难。现在我无法得到它。我试过下一个电话:
adb shell setprop log.tag.SQLiteLog VERBOSE
adb shell setprop log.tag.SQLiteStatements VERBOSE
adb shell setprop db.log.slow_query_threshold 0
and next:
adb root
adb shell stop
adb shell start
没有结果。因此,我的问题是 - 我必须如何以及在什么地方 use/call/set/create/delete 才能看到 Android 体内的所有内部 SQL 命令 executed/generated - 在所有内部它的内部结构 libraries/plugins/etc。换句话说,在 phone 上为最终用户软件创建整个 Android 工作环境的所有内容。
好的,像往常一样 - 如果你想做某事 - 只做你自己)))
try (Cursor cursor = resolver.query(uri, PROJECTION, null, null, null))
如果在此命令行中输入最后一个参数 100% 错误字符串 - 例如“LIKE bananas” - 在执行阶段我们将收到错误“android.database.sqlite.SQLiteException: near “bananas”: syntax错误(代码 1)” 具有相应的 staсktrace,其中还包括完整的 SQL 命令 - 在其中发现了该错误。 因此,我们可以很容易地获得知识——通过 WHICH EXACTLY SQL request 发出特定的 URI 请求。它可以在真手机上使用!!!因此我们可以很容易地理解 - 为什么突然之间我们无法访问特定的数据列,该数据列似乎存在于查询结果中(根据开发人员的在线帮助),但由于某些原因在某些模型上他们没有的电话。现在它变得更容易理解 - 以及如何根据“stacktraced exactly SQL”作为参考重写你的请求 - 但保证在执行过程中获得必要的数据!