运行应用程序时,为什么BuildConfig.DEBUG
返回false?
我用它来控制日志,如下所示:
public static void d(String LOG_TAG, String msg){
if(BuildConfig.DEBUG){
Log.d(LOG_TAG,msg);
}
}
答案 0 :(得分:35)
检查类中的导入,确保使用正确的BuildConfig路径。您可以不使用应用程序中的BuildConfig,而是使用某些库。
答案 1 :(得分:6)
在您的Android Studio 构建变体中,您是否使用调试变体?
对flavors
或debug
使用release
时适用。
在调试模式下,BuildConfig.BUILD
为真,在发布模式下,它为假。
答案 2 :(得分:4)
如果该代码在库中,那么由于3-year-old bug in gradle,它总是错误的。
答案 3 :(得分:2)
此问题有一种解决方法:
应用强>
import java.io.*;
import java.util.Arrays;
//import java.util.concurrent.TimeUnit;
public class JavacTest {
private static void printLines(String name, InputStream ins)
throws Exception {
String line;
BufferedReader in
= new BufferedReader(new InputStreamReader(ins));
while ((line = in.readLine()) != null) {
System.out.println(name + " " + line);
}
}
private static void runProcess(String command)
throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(command
+ " stdin:", pro.getInputStream());
printLines(command
+ " stderr:", pro.getErrorStream());
//Take your time
pro.waitFor();
System.out.println(command
+ " exitValue() " + pro.exitValue());
}
private static void runProcess2(String [] command)
throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(Arrays.toString(command)
+ " stdin:", pro.getInputStream());
printLines(Arrays.toString(command)
+ " stderr:", pro.getErrorStream());
//Take your time
pro.waitFor();
System.out.println(Arrays.toString(command)
+ " exitValue() " + pro.exitValue());
}
/*
Note about paths:
When NetBeans runs a .java program, the compiled class .class is put in a
subfolder of build in the same folder of the project:
build/classes/Programs.
When a .java program is run with javac from inside another master
.java program, the corresponding .class file is put in the
same folder as the master .java program.
*/
public static void main(String[] args) {
try {
System.out.println("\nCompiling with javac: .java -> .class");
runProcess("/home/jose/jdk1.8.0_101/bin/javac "
+ " /home/jose/NetBeansProjects/eJVolu17P/src"
+ "/Programs/AddTwoIntegers.java");
//take your time
//TimeUnit.SECONDS.sleep(1);
System.out.println("\n\nShowing the bytecode "
+ "content of the .class file with javap");
runProcess("/home/jose/jdk1.8.0_101/bin/javap "
+ "-c /home/jose/NetBeansProjects/eJVolu17P/src"
+ "/Programs/AddTwoIntegers.class");
System.out.println("\n\nWorking Directory = " +
System.getProperty("user.dir"));
//TimeUnit.SECONDS.sleep(1);
System.out.println("\n\nRunning the .class file with java");
String[] Commands = new String[4];
//Path to java
Commands[0] = "/home/jose/jdk1.8.0_101/bin/java";
//Command: claspath
Commands[1] = "-cp";
//Path to parent folder of package with the .java program = Programs
Commands[2] = "/home/jose/NetBeansProjects/eJVolu17P/src/";
//Used package + name of compiled class without suffix .class
Commands[3] = "Programs.AddTwoIntegers";
runProcess2(Commands );
} catch (Exception e) {
}
}
}
<强>库强>
dependencies {
releaseCompile project(path: ':library', configuration: 'release')
debugCompile project(path: ':library', configuration: 'debug')
}
答案 4 :(得分:2)
也许并不理想,但我最终创造了自己的
buildTypes {
debug {
buildConfigField "boolean", "IS_DEBUG", "true" // Had issues with BuildConfig.DEBUG, created IS_DEBUG to ensure functionality behaved as expected.
}
release {
signingConfig signingConfigs.release
buildConfigField "boolean", "IS_DEBUG", "false"
}
}
然后以BuildConfig.IS_DEBUG
编程方式解决它。
答案 5 :(得分:2)
确保类顶部的build config自动导入语句属于您的项目。
com.your.package.name.BuildConfig
BuildConfig
导入可能属于已发布的库,其中DEBUG
为假。
答案 6 :(得分:2)
请勿导入BuildConfig
。这是一个自动生成的类,即使Android Studio会告诉您,也无需导入它。
如果Android Studio提示您导入BuildConfig
,则可能是因为您需要进行初始Gradle构建来创建自动生成的类,该类最终在com.yourdomain.yourapp.BuildConfig
中创建。升级Android Studio和Gradle或运行 Build-> Clean project 。
如果您导入另一个软件包的BuildConfig
,那么它当然永远是错误的,因为它们仅发布其发行版本而不是其调试版本。
关于建议修改build.gradle
的其他答案,我发现指定buildType
与Android Studio的默认行为及其生成的BuildConfig
冲突,并指出我有重复的条目。
从本质上说:
BuildConfig
(因此请保持红色)buildType
中添加build.gradle
(这可能与自动生成类的默认构建行为冲突)错误应该消失。
当我升级Android Studio和Gradle以及清理项目时,会遇到这种情况。
忽略导入提示
请勿导入其他程序包的BuildConfig
,因为它们不会发布其调试版本,所以它始终为false。
导入将导致您遇到的错误
在我的项目中,如果我导入一个建议的库,它将显示您得到的错误,因为没有人发布调试版本,因此,如果您指向某人,那么它永远都是假的其他的。
忽略智能并运行项目
只需运行一个构建即可。该课程将自动生成,警告将消失。
答案 7 :(得分:1)
也许您正在导入错误的包,请检查。 (一些Android库也有BuildConfig类)
答案 8 :(得分:1)