Android 库 *.aar 不记录到 logcat?

Posted

技术标签:

【中文标题】Android 库 *.aar 不记录到 logcat?【英文标题】:Android library *.aar does not log to logcat? 【发布时间】:2017-01-13 13:41:51 【问题描述】:

我编写了一个简单的库,在我的主要 android Studio 项目中使用它。我将该 *.aar 库导入到我的主项目中,我可以从该库中实例化对象或从那里调用方法。

我也有日志输出,例如:Log.d(TAG, "Lala");,但是当我运行我的主应用程序时,我在 logcat 上看不到它们。 (我只看到来自我的主应用程序的日志输出,但没有来自 *.aar 库)

如何在 logcat 上查看这些日志输出?

【问题讨论】:

【参考方案1】:

如果您在 Android Studio 中查看 Logcat 窗格的右上角,您会看到一个下拉窗格,上面写着“仅显示选定的应用程序”。这是指在 Logcat 工具窗口左上角设备下拉列表右侧的下拉窗格中选择的包和 pid。您可以将右侧下拉菜单更改为“无过滤器”或具有多个进程 ID 的自定义过滤器配置。

您还可以尝试将对库中的调用包装在 try/catch 块中,然后抛出异常,而不是简单地从库中记录它们。如果所有其他方法都失败并且您无法弄清楚如何调整 Android Studio 使用的过滤器,则应该将消息放入您的应用程序名称空间和 PID 以进行日志记录...您也可以从终端启动详细 logcat,它不会让 Android Studio 的任何过滤器妨碍您。当您开始测试您需要登录的任何内容时,只需使用adb logcat -v > output.log 将终端的输出通过管道传输到一个文件即可。

另外,我建议将过滤器从“仅显示选定的应用程序”更改为“无过滤器”,因为这是他们在 Studios logcat 过滤器菜单中标记选择的方式。这并不意味着仅显示来自其他应用程序的日志记录。这意味着不要过滤日志以仅显示来自正在安装的包的名称空间(即 com.example.my)的日志,而是显示来自任何包名称的日志,包括项目中使用的库的日志。 Logcat 是 ADB 的一项广泛的独立服务,AS 不知道仅包含包日志,因为该包在项目视图中。

【讨论】:

这不包括问题中描述的用例。 如何不涵盖问题中的用例?他们说他们可以从库中实例化对象,但在同一个库中看不到他的日志行的输出。我指示他们打开他的 logcat 过滤限制,以包括超出其应用程序源代码范围的日志记录。他们说他们正在使用 Android Studio;所以他们不只是阅读adb logcat -v。当他们通过 Android Studio 启动应用程序时,它会自动设置三个下拉菜单,“目标设备”、“目标包”和“仅显示”。这些限制了 Android Studio 中的 logcat 输出;他们的问题。 他们不是在谈论尝试查看来自其他应用程序的日志,而是在谈论他们自己的应用程序中嵌套库的日志可见性。在我所有的实验中,即使是完全未过滤的 logcat 也不会显示来自嵌套 aar 的日志,尽管可以证明调用。 那你肯定也对Android Studio logcat过滤不够了解。 Logcat 是 ADB 的一项单独服务,除非在构建中禁用,否则所有日志记录都会遇到它;例如,如果发布版本不包括调试日志记录。如果正在使用的库正在打印到 logcat,那么它将在 android studio 中遇到 logcat,前提是已经进行了必要的过滤更改。一年多来,我一直在为我的雇主开发 aar,几乎完全从事图书馆工作。我已将它集成到许多其他项目中进行测试,其中涉及阅读我在所述项目中的日志。 我看到你的很多背景都是在 C、GCC 和汇编等方面的,狼。因此,我不会责怪您不知道 Android Studio 过滤 logcat 输出的方式比 IDE 中列出的方式更多。当用户能够基于包、设备、日志级别或带有 RegEx 支持的术语设置过滤器时,Studio 已经应用了其他几个过滤器。

以上是关于Android 库 *.aar 不记录到 logcat?的主要内容,如果未能解决你的问题,请参考以下文章

Android 库 (jar/aar) 可以用于 Xamarin 中的 iOS

原生库的 Android AAR 包

使用选定的风格将 Android 库 (aar) 发布到 Bintray

使用 AAR 和源 JAR 将 Android 库发布到 Maven

Android发布库(jar/aar)到MavenCentral

Android发布库(jar/aar)到MavenCentral