Posted at

ProGuardとLogCatとAdMobが織りなす罠

More than 5 years have passed since last update.

アンドロイド開発においてログを吐く事は保守性が良くなるが、実際にこのコードを放置するとアプリケーションのパフォーマンスも落ちるし情報もだだ漏れ。

そのため存続のコードではガシガシログを吐いてリリースビルドでLogCatを吐かないようにProGuardで

-assumenosideeffects class android.util.Log { <methods>; }

とやるとログを吐かなくなる。

が、これが落とし穴だった。

これをするとAdMobが常にネットワークエラーだと言い出す。

これはSDKをデコンパイルしてみて見るとLog.isLoggableの戻り値を利用しているからだと解った。

すでに難読化されたクローズドソースなので分かりづらいクラス名だが、

com.google.ads.utilのパッケージ中のaとbというクラスで使われている。

-assumenosideeffects class android.util.Log {

public static *** v(...);

public static *** d(...);

public static *** i(...);

public static *** w(...);

public static *** e(...);

}

とすればモーマンタイ。