前言

本人使用的机器是 Mac M1,在开发 Android 项目时,有一个问题,是如果 Android 项目中有操作 SQLite 数据库的地方,则无论打包还是编译都会报一个错

Mac Jenkins 构建时更改文件内容

经过网上搜寻找到了一个解决方案,就是在项目根目录的 build.gradle 中增加

1
2
3
4
5
6
7
8
9
10
11
12
allprojects {
// 如果本地有操作sqlite,会报错
//Execution failed for task ':app:kaptDebugKotlin'.
//> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
// > java.lang.reflect.InvocationTargetException (no error message)
// https://issuetracker.google.com/issues/174695268?pli=1
configurations.all {
resolutionStrategy {
force 'org.xerial:sqlite-jdbc:3.34.0'
}
}
}

但是这个内容我一直没有提交到过 git

问题

问题来了,我在本地搭建了 Jenkins,并想实现 Android 自动打包,但是从 git 上拉下来的代码并没有上面那段代码。所以我们需要通过构建脚本来将上面这段代码每次构建的时候都追加到 build.gradle 文件中

解决

项目根目录新建 build-gradle-fix.txt

首先找到该项目在 jenkins 中的工作空间目录

Mac Jenkins 构建时更改文件内容

在该目录下新建一个文件, build-gradle-fix.txt,内容如下
需注意要有两个空行

1
2
3
4
5
6
7
8
9
10
11
12
13
14


allprojects {
// 如果本地有操作sqlite,会报错
//Execution failed for task ':app:kaptDebugKotlin'.
//> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
// > java.lang.reflect.InvocationTargetException (no error message)
// https://issuetracker.google.com/issues/174695268?pli=1
configurations.all {
resolutionStrategy {
force 'org.xerial:sqlite-jdbc:3.34.0'
}
}
}

Jenkins 构建增加一个脚本

Mac Jenkins 构建时更改文件内容

build.gradle-fix.txt 在每次 jenkins 拉最新代码构建时,都将该文件内容追加到 build.gradle
这样就解决了这个问题