- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的基于(gradle 1.10 和 gradle 插件 0.8)的 android 项目包含一个大型 android 库,它依赖于 3 个不同的 android 应用程序
在我的图书馆中,我希望能够使用这样的结构
if (BuildConfig.SOME_FLAG) {
callToBigLibraries()
}
因为 proguard 能够根据 SOME_FLAG 的最终值减小生成的 apk 的大小
但我不知道如何使用 gradle 来做到这一点:
* the BuildConfig produced by the library doesn't have the same package name than the app
* I have to import the BuildConfig with the library package in the library
* The apk of an apps includes the BuildConfig with the package of the app but not the one with the package of the library.
我尝试使用 BuildTypes 和类似的东西,但没有成功
release {
// packageNameSuffix "library"
buildConfigField "boolean", "SOME_FLAG", "true"
}
debug {
//packageNameSuffix "library"
buildConfigField "boolean", "SOME_FLAG", "true"
}
为我的库和应用程序构建共享 BuildConfig 的正确方法是什么?其标志将在应用程序中的构建时被覆盖?
最佳答案
作为解决方法,您可以使用此方法,该方法使用反射从应用程序(而不是库)获取字段值:
/**
* Gets a field from the project's BuildConfig. This is useful when, for example, flavors
* are used at the project level to set custom fields.
* @param context Used to find the correct file
* @param fieldName The name of the field-to-access
* @return The value of the field, or {@code null} if the field is not found.
*/
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;
}
例如,要获取 DEBUG
字段,只需从您的 Activity
中调用此字段即可:
boolean debug = (Boolean) getBuildConfigValue(this, "DEBUG");
我还在 AOSP Issue Tracker 上分享了这个解决方案.
关于android-gradle-plugin - Gradle : how to use BuildConfig in an android-library with a flag that gets set in an app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365928/
每当我运行 Android 应用程序时,似乎都会出现此错误。 解决这个问题的唯一方法是重建项目并再次正常运行。 如果有人知道其原因,将不胜感激 最佳答案 尝试一下构建 -> 清理项目然后构建 -> 制
我有一个Maven Android项目,正在尝试将其转换为Gradle。我正在使用AndroidAnnotations。 在Maven项目中,我具有以下界面: @Rest(rootUrl = Cons
我正在尝试生成发布版本,但由于 mutidex 问题我无法生成我的项目已启用所有 multidex 并添加了依赖项 我收到的错误是: Execution failed for task ':app:t
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
开始新项目的最后一天,我在构建配置中创建了一些变量,作为在发布和调试构建之间单独处理它们的好习惯,如下所示: ... buildTypes { release { minify
我正在尝试生成发布版本,但由于 mutidex 问题我无法生成我的项目已启用所有 multidex 并添加了依赖项 我收到的错误是: Execution failed for task ':app:t
是否有“内置”方式将 BuildConfig 从插件共享到主机应用程序? 我们有一个使用自制插件的应用程序,我们需要将所有特殊配置(所以除了依赖项之外的所有特殊配置)设置从插件复制/粘贴到当前应用程序
当我尝试重建我的项目时,出现以下错误: warning: flag is not supported by this version of the compiler: -Xallow-no-sourc
即使经过编辑,当我建立gradle的那一刻它也会恢复。 buildConfig.java build.gradle 最佳答案 BuildConfig.java由Android构建工具生成。配置完成后,
在我的应用程序中,我需要获取应用程序版本代码和名称,因此我使用了以下语句。 obj.setCurrentVersion("APP " + String.valueOf(BuildConfig.VE
我正在开发一个多模块 Android 应用程序,一切都在 Debug模式下工作,但现在当我尝试构建发布包时,我收到此错误: Type ***module1.BuildConfig is defined
好的。这听起来好像我太沮丧了,因为我确实如此。我正在尝试构建一个 Blackberry 应用程序,以便为我工作的人发布。在添加构建配置并添加 keystore 后,我构建了 Android 系统。但是
根据Grails hibernate plugin page,休眠的范围应为compile。但是,当我创建一个新的Grails应用程序时,BuildConfig.groovy使用的是runtime范围
我有一个grails应用程序。为什么某些属性在一个属性中起作用而在另一个属性中却不起作用?何时将属性放在一个中,何时将它们放在另一个中? 最佳答案 从Grails doc here The first
好的。这听起来好像我太沮丧了,因为我确实如此。我正在尝试构建一个 Blackberry 应用程序,以便为我工作的人发布。在添加构建配置并添加 keystore 后,我构建了 Android 系统。但是
显然,从 Android SDK 17 开始,构建会生成一个名为 BuildConfig 的自动类并将其添加到我的包中。 http://android-developers.blogspot.com/
是否可以通过某种方式访问 BuildConfig.groovy 中的 Config.groovy 中指定的属性? 我在打包过程中需要复制一些引导文件,目标目录取决于指定的环境。因为我需要在应用程序
我们可以为 Config.groovy 加载不同的配置文件通过指定作为配置脚本的类。 Externalized Configuration : grails.config.locations = [c
我正在尝试使用常量 BuildConfig.class 运行 Robolectric,但它似乎不适用于 gradle 生成的所有风格。有没有命令让 gradle 为所有这些文件制作这个文件? 最佳答案
我将我的项目迁移到 Androidx,每次运行我的项目时,我都会收到此错误,提示类 BuildConfig 是公共(public)的,应在名为 BuildConfig.java 的文件中声明。我知道我
我是一名优秀的程序员,十分优秀!