https://www.cnblogs.com/zhujiabin/p/6874508.html

BuildConfig 的弊端

当 A Module 依赖 B Module ,且 B Module 中存在如下代码,A 调用这段代码时,BuildCofig.DEBUG 会始终为 false。其关系图如下所示:

public static void i(String tag, String msg) {
	if (BuildConfig.DEBUG) {
		Log.i(tag, msg);
	}
}

因为被依赖的 Module B,默认会使用 Release 版本生成的 BuildConfig,所以这个值始终为 false。

解决该问题

既然默认使用 Release 版本生成 BuildConfig,通过指定使用其他版本生成 BuildConfig 即可,配置如下:

dependencies {
	releaseCompile project(path: ':library', configuration: 'release')
	// debug 模式下,使用 debug 版本生成 BuildConfig
	debugCompile project(path: ':library', configuration: 'debug')
}

这种方法的缺点是,每个依赖都需要配置,侵入性较强。

最终解决方法

我们的目的是判断当前是否 debug 版本,所以判断 AndroidManifest.xml 中 application 节点的 android:debuggable 属性值是否为 true 即可。代码实现如下所示:

public static boolean isApkInDebug(Context context) {
        try {
            ApplicationInfo info = context.getApplicationInfo();
            return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
        } catch (Exception e) {
            return false;
        }
}
总结

目标:判断是否 debug 版本
方法1:BuildConfig.java -> 不可行 -》 原因:默认使用 Release 版本生成 -》 解决方法:指定其他版本生成
方法2:根据 android:debuggable 的值进行判断

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐