0

BuildConfig.DEBUG 的值是通用的还是与我的库有关?

更多信息:我正在开发一个 lib/sdk,这个 sdk 是在存储库中构建和部署的。最终的应用程序包括这个部署的 sdk。

问题:是否可以从 lib/sdk 中读取最终应用程序的 BuildConfig.DEBUG (true/false) 值?

Dod:在我的库中,只有当最终应用程序在调试模式下运行时,我才必须启用某些东西。

4

1 回答 1

1

试试这个,让我知道。

private static Boolean sDebug;

/**
 * Is {@link BuildConfig#DEBUG} still broken for library projects? If so, use this.</p>
 * 
 * See: https://code.google.com/p/android/issues/detail?id=52962</p>
 * 
 * @return {@code true} if this is a debug build, {@code false} if it is a production build.
 */
public static boolean isDebugBuild() {
    if (sDebug == null) {
        try {
            final Class<?> activityThread = Class.forName("android.app.ActivityThread");
            final Method currentPackage = activityThread.getMethod("currentPackageName");
            final String packageName = (String) currentPackage.invoke(null, (Object[]) null);
            final Class<?> buildConfig = Class.forName(packageName + ".BuildConfig");
            final Field DEBUG = buildConfig.getField("DEBUG");
            DEBUG.setAccessible(true);
            sDebug = DEBUG.getBoolean(null);
        } catch (final Throwable t) {
            final String message = t.getMessage();
            if (message != null && message.contains("BuildConfig")) {
                // Proguard obfuscated build. Most likely a production build.
                sDebug = false;
            } else {
                sDebug = BuildConfig.DEBUG;
            }
        }
    }
    return sDebug;
}
于 2019-09-18T14:13:33.130 回答