作者:玉米的跟屁虫 | 来源:互联网 | 2023-05-24 19:23
自从更新AS 1.1 Preview 2后,我的所有Log
消息都显示红线
Log.d(TAG, "message");
带有消息:" 日志记录标记最多可包含23个字符.. ".
除了Android Studio本身,我没有从根本上更新任何内容.这是一个错误吗?
1> squeeish..:
如果您愿意,可以禁用它.
在Android Studio中,分析 - >检查代码.
![截图](https://img.php1.cn/3cd4a/1eebe/cd5/43a754c811e7ec5c.webp)
在检查配置文件下,单击带有3个水平点的按钮.
应打开以下窗口.搜索"log"并取消选中"Too Long Log Tags".
![截图](https://img.php1.cn/3cd4a/1eebe/cd5/dc7ef30f57b727c7.jpeg)
更新: Android Studio 2.2,它位于Android Lint:Correctness下
![截图](https://img.php1.cn/3cd4a/1eebe/cd5/fb32005f2115b419.webp)
这有什么后果?
2> Andrew T...:
不,这不是一个错误.
来自Android Studio 1.1 Preview 2的最新更改,
检查传递给日志记录调用的标记(如果其值可以解析)最多为23个字符(根据Logging API的要求).
![记录标记是31](https://img.php1.cn/3cd4a/1eebe/cd5/2d903861d5ad779c.png)
正如最近对最近的变化所解释的,这是由于如何 Log
API不允许超过23个字符的标记.
SLF4J Android对此有一个解释:
[...]此类标签的长度目前限制为23个字符(23 = 32 - 8表示名称空间前缀 - 1表示C终结符)
它与Android的源代码相匹配.
目前,唯一明确提到此异常的函数是Log.isLoggable()
,
...
抛出
如果tag.length()> 23,则抛出IllegalArgumentException.
但是,根据注释,显然记录器会在发布模式下抛出异常(在调试模式下会被忽略).
您可以按照Terence的回答禁用lint检查,但是您已经收到警告.
这背后的逻辑是什么?当然错误是系统生成的,我可以获得的错误和我可以键入的字符串之间存在某种相关性,但它包含我在"字符串"中使用的ASCII字符,为什么它不允许23个字符,甚至为什么23 ?谢谢.
来自[Android源代码](https://github.com/android/platform_frameworks_base/blob/master/core/jni/android_util_Log.cpp#L84),这是由于32(属性键的最大长度) - 8(名称空间前缀) - 1(C终结符),引自[SLF4J Android](http://www.slf4j.org/android/).
这种棉绒检查只是无意义的.你可以非常肯定Android会在*Log.d`等人中开始执行此操作.因为那只会打破大量的应用程序而没有任何*好的理由.我真的希望将来可以改进lint检查,以便更严格地显示或仅仅使用`Log.isLoggable()`.
你永远不能禁用这个lint检查,因为它在发布时崩溃应用程序(最有趣的是它在调试模式下不会崩溃)
3> straya..:
补充@Terence的答案
您还可以在build.gradle文件中使用gradle关闭特定的检查:
lintOptions {
disable 'LongLogTag'
}
或者使用xml将lint.xml文件添加到项目中:
你应该把`lintOptions`放在`android`块中
4> Jacky..:
你永远不能忽略这个lint检查,它肯定会在你的发布版本上带来意想不到的结果,因为它抛出异常并停止执行(它不会使你的应用程序崩溃).
我最近得到了一个可怕的教训:它在调试模式下没问题,但在发布版本上表现不同.