刚接手一个有点时间久远的项目,经过一番调整和更改配置,还是在构建时出现了些许问题,在此纪录一下解决方案。
【问题一】gradle配置出错
大致的问题截图如下:


![]()
出现这个问题主要是细节没注意,在每个项目中的build.gradle(相对应模块),我们可以使用一个公共构造函数添加应用资源值。
我配置的部分内容是这样的:

然后我们查看build\generated\res\resValues\debug\values 目录下生成的代码:

但是我们要注意到在strings.xml中的标签<string> </string> 是小写的,而我们平时编写代码时写String是习惯大写的,所以需要保持和标签一致的,这个只要稍微注意下即可。现在顺便了解一下这个函数。
resValue(String type, String name, String value)
从上面的命名看大致都知道三个参数代表的含义:xml文件中定义的数据类型、名称、属性值。这就是相当于在res/values下定义了一个资源。
【问题二】BuildConfig类配置
因为每次刚拿到新的项目代码时都需要进行纠错和更改配置,于是就发现了这个问题,是在使用BuildConfig类出现的,想要访问某个值时出错。
![]()
这表示没有定义这个值,于是我就有点纳闷了,整体代码都有了为啥子这个竟然缺少了,所以只能无奈改正。
有时候我们正是需要一个小小的提示帮助进行Android开发,比如BuildConfig类。主要的作用就是
与应用代码共享自定义字段和资源值
在构建时,Gradle 将生成 BuildConfig类,以便应用代码可以检查与当前构建有关的信息。您也可以从 Gradle 构建配置文件中使用 buildConfigField() 方法将自定义字段添加到 BuildConfig类中,然后在应用的运行时代码中访问这些值。
BuildConfigField(
type: String,
value: T,
comment: String?)
这个和上面的resValue()有着异曲同工之用,三个参数也是一样的含义。
type:要写入为BuildConfig字段类型的值。
value:生成字段的值。如果类型为String,则值应包含引号。
comment:将添加到生成的源文件中的可选字段注释,如果不需要注释,则为空。
【问题三】编译失败,Invoke-customs are only supported starting with Android O
![]()
这个的主要原因是Android Gradle 插件 3.0.0 及更高版本支持所有 Java 7 语言功能,以及部分 Java 8 语言功能(具体因平台版本而异)。如需开始使用受支持的 Java 8 语言功能,请将Android gradle插件升级为3.0.0(或更高版本),因此解决问题也就好办了。
解决办法是在build.gradle中添加如下代码块:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
当然也可以按如下操作亦可;

可能个人这个界面不一样,如果你们这个下拉列表中有Open Module Setting,可以直接跳到如下相同界面修改操作。

在界面中操作完成记得点击Apply按钮保存设置,然后重新make project即可解决。
好了,今天的问题记录先暂时结束了,虽然不是什么很难解决的大问题,但是平时依然需要多加认真对待和学习进步。
本文记录了在接手一个旧Android项目时遇到的构建问题及其解决方案,包括gradle配置错误,BuildConfig类的自定义字段配置,以及针对'Invoke-customs are only supported starting with Android O'的编译错误的修复方法。
511

被折叠的 条评论
为什么被折叠?



