子模块下判断App的buildType,老师有什么好的方式么?

来源:4-2 网络库的封装,泛型参数边界2

Da丶

2020-02-28

例如在课程中,network模块下,初始OkHttpClient时,我想动态的添加拦截器

if(BuildConfig.Debug){
//addxxx
}

但是我发现子模块的BuildConfig是不准确的。

我简单去了解下,网上比较OK的操作是这样:

   debugCompile project(path: ':common', configuration: 'debug')
    releaseCompile project(path: ':common', configuration: 'release')
}

所以想请教下老师,有没有更合适的方式

写回答

1回答

LovelyChubby

2020-02-28

如下方法,可以获取到主工程的buildConfig的DEBUG值。

public static Object getBuildConfigValue(Context context, String fieldName) {
    try {
        Class<?> clazz = Class.forName(context.getPackageName() + ".BuildConfig");
        Field field = clazz.getField(fieldName);
        return field.get(null);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return null;
}

boolean debug = (Boolean) getBuildConfigValue(this, "DEBUG");
1
2
Da丶
感谢老师~ 后面我又找到一种方式,可以分享给大家 ``` val info = application.applicationInfo val debuggable = if (info != null) { info.flags.and(ApplicationInfo.FLAG_DEBUGGABLE) != 0 } else { false } property.debuggable = debuggable ```
2020-02-28
共2条回复

开发商业级热门短视频App 掌握Jetpack组件库

Jetpack架构大揭秘,全组件实战主流且功能完整的短视频App

1364 学习 · 607 问题

查看课程