BuildConfig.DEBUG 的值是通用的还是与我的库有关?
更多信息:我正在开发一个 lib/sdk,这个 sdk 是在存储库中构建和部署的。最终的应用程序包括这个部署的 sdk。
问题:是否可以从 lib/sdk 中读取最终应用程序的 BuildConfig.DEBUG (true/false) 值?
Dod:在我的库中,只有当最终应用程序在调试模式下运行时,我才必须启用某些东西。
BuildConfig.DEBUG 的值是通用的还是与我的库有关?
更多信息:我正在开发一个 lib/sdk,这个 sdk 是在存储库中构建和部署的。最终的应用程序包括这个部署的 sdk。
问题:是否可以从 lib/sdk 中读取最终应用程序的 BuildConfig.DEBUG (true/false) 值?
Dod:在我的库中,只有当最终应用程序在调试模式下运行时,我才必须启用某些东西。
试试这个,让我知道。
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;
}