Gradle 具有整型变量的 buildConfigField
Gradle buildConfigField with integer variable
我想定义一个构建配置文件,我可以在其中使用自己在 gradle 脚本中定义的变量:
def someVar = 512
android {
...
buildConfigField 'int', 'SOME_INT_FIELD', someVar
}
但这会产生以下错误:
Error:(25, 0) Gradle DSL method not found: 'buildConfigField()'
Possible causes:
The project 'PROJECT' may be using a version of Gradle that does not contain the method.
The build file may be missing a Gradle plugin.
我可以使用像这样的引号:
def someVar = 0
android {
...
buildConfigField 'int', 'SOME_INT_FIELD', '"' + someVar + '"'
}
但这会导致 BuildConfig
中的编译器错误
// Fields from default config.
public static final int SOME_INT_FILED = "512";
所以现在我留在:
def someVar = 0
android {
...
buildConfigField 'String', 'SOME_INT_FIELD', '"' + someVar + '"'
}
并像这样使用它:
final int value = Integer.valueOf(BuildConfig.SOME_INT_FIELD);
有没有人有更好的解决办法还是我用错了buildConfigField?
(我也尝试将括号与上述任何可能性结合使用。)
我找到了解决方案,所以也许这个答案将来会对某人有所帮助。
def String globalVersionCode
defaultConfig {
applicationId "com.test.gradle.build"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "0.1"
globalVersionCode = versionCode
}
buildTypes {
release {
buildConfigField ("int", "DatabaseVersion", globalVersionCode)
}
}
现在在 java 我可以获得 DatabaseVersion 变量:
public static final int DB_VERSION = BuildConfig.DatabaseVersion;
在 build.gradle
中声明 int
字段不应该也不需要在 java side.The 处进行解析,您的代码中唯一的错误是使用双引号。正确方法如下-
buildConfigField 'int', 'SOME_INT_FIELD', '512'
在你的 build.gradle
文件中,你可以简单地将它用作 java 代码中的 int
-
public static final int SOME_INT_FIELD = BuildConfig.SOME_INT_FIELD;
试试这个:
int val = 10
buildConfigField 'int', 'SOME_INT_FIELD', val.toString()
def someVar = 100
buildConfigField 'int', 'SOME_INT_FIELD', String.valueOf(someVar)
我用上面的方法来解决问题,希望对你有帮助。
您可能会出于某种原因使用相同的 gradle 文件并在 java 文件中使用。
def boolean isMyFlag
compileSdkVersion 30
defaultConfig {
applicationId "com.test.gradle.build"
minSdkVersion 21
targetSdkVersion 22
buildConfigField 'int', 'Version_code', "3"
buildConfigField 'String', 'Version_Name', "'0.1'"
buildConfigField "boolean", "myFlag", "${isMyFlag}"
}
现在您也可以在 java 和 gradle 文件中使用。
// Use for Java
if(BuildConfig.myFlag){
// My logic here;
}
和
// Use for gradle
if (isMyFlag) {
implementation 'com.my.dependency.classes:my-module:2.3'
}
我的解决方案适用于 Java 和 build.gradle 文件,因为您可能会得到这样的逻辑。
我想定义一个构建配置文件,我可以在其中使用自己在 gradle 脚本中定义的变量:
def someVar = 512
android {
...
buildConfigField 'int', 'SOME_INT_FIELD', someVar
}
但这会产生以下错误:
Error:(25, 0) Gradle DSL method not found: 'buildConfigField()'
Possible causes:
The project 'PROJECT' may be using a version of Gradle that does not contain the method. The build file may be missing a Gradle plugin.
我可以使用像这样的引号:
def someVar = 0
android {
...
buildConfigField 'int', 'SOME_INT_FIELD', '"' + someVar + '"'
}
但这会导致 BuildConfig
中的编译器错误// Fields from default config.
public static final int SOME_INT_FILED = "512";
所以现在我留在:
def someVar = 0
android {
...
buildConfigField 'String', 'SOME_INT_FIELD', '"' + someVar + '"'
}
并像这样使用它:
final int value = Integer.valueOf(BuildConfig.SOME_INT_FIELD);
有没有人有更好的解决办法还是我用错了buildConfigField?
(我也尝试将括号与上述任何可能性结合使用。)
我找到了解决方案,所以也许这个答案将来会对某人有所帮助。
def String globalVersionCode
defaultConfig {
applicationId "com.test.gradle.build"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "0.1"
globalVersionCode = versionCode
}
buildTypes {
release {
buildConfigField ("int", "DatabaseVersion", globalVersionCode)
}
}
现在在 java 我可以获得 DatabaseVersion 变量:
public static final int DB_VERSION = BuildConfig.DatabaseVersion;
在 build.gradle
中声明 int
字段不应该也不需要在 java side.The 处进行解析,您的代码中唯一的错误是使用双引号。正确方法如下-
buildConfigField 'int', 'SOME_INT_FIELD', '512'
在你的 build.gradle
文件中,你可以简单地将它用作 java 代码中的 int
-
public static final int SOME_INT_FIELD = BuildConfig.SOME_INT_FIELD;
试试这个:
int val = 10
buildConfigField 'int', 'SOME_INT_FIELD', val.toString()
def someVar = 100
buildConfigField 'int', 'SOME_INT_FIELD', String.valueOf(someVar)
我用上面的方法来解决问题,希望对你有帮助。
您可能会出于某种原因使用相同的 gradle 文件并在 java 文件中使用。
def boolean isMyFlag
compileSdkVersion 30
defaultConfig {
applicationId "com.test.gradle.build"
minSdkVersion 21
targetSdkVersion 22
buildConfigField 'int', 'Version_code', "3"
buildConfigField 'String', 'Version_Name', "'0.1'"
buildConfigField "boolean", "myFlag", "${isMyFlag}"
}
现在您也可以在 java 和 gradle 文件中使用。
// Use for Java
if(BuildConfig.myFlag){
// My logic here;
}
和
// Use for gradle
if (isMyFlag) {
implementation 'com.my.dependency.classes:my-module:2.3'
}
我的解决方案适用于 Java 和 build.gradle 文件,因为您可能会得到这样的逻辑。