twitter4j androidで利用でエラー

androidでtwitter4jで使用してて1日ハマった。とりあえずメモです。blogの練習とプログラミング勉強用です。以下スタックトレース一部。

E/AndroidRuntime(27910): java.lang.IllegalArgumentException: Log tag “twitter4j.internal.http.HttpClientImpl” exceeds limit of 23 characters

一部のライブラリでsl4j(loggerライブラリ)を使っていると発生する。ある広告のSDKを組み込んで使っていたらそのSDK中でsl4jを利用していた。twitter4jからはcommons-loggingやsl4jがあるとどれかを使うようになっていた。原因としてはAndroidのLogクラスでtag引数は23文字より多いとダメらしい。

Log.isLoggableの引数 tagは23文字までしか受け付けない。- Kazzzの日記

解決方法としては、該当のSDKを削除またはsl4jを更新するか、Loggerを修正するか。まずは、log出力を止められないか検討。いろいろ試すが難しい。twitter4jでsetDebugEnabled(false)をするがうまくいかない。広告SDKを更新削除はできなかったのでLogger修正。?githubでソース読んだけど勉強になる。以下ソースリンク。

https://github.com/yusuke/twitter4j/blob/master/twitter4j-core/src/main/java/twitter4j/internal/logging/Logger.java

該当のコードはLogger.java。最初に実行時オプションから指定があればloggerを読むが次にsl4jを読み込むようになっている。それ以降は、commons-loggingなどをライブラリに入れていても読み込まないようになっていた。ここのsl4j読み込みの箇所をコメントアウト。

そしてビルド。mavenでした。初めて触った。職場の人に教えてもらいながら操作。ビルドや依存関係やdeployまでやってくれるのは便利そう。