参考网站:https://dev.to/lavolpe/gitlab-ci-for-android-2021-update-2hhl
一、首先了解安卓的目录结构
1.1、/app/build.gradle。定义SDK版本和build Tools版本
1.2、/gradle/wrapper/gradle-wrapper.properties 定义gradle版本
1.3 /build.gradle 最外层的gradle,主要定义仓库
1.4、 ./local.properties 定义SDK或NDK的位置
1.5 ./settings.gradle 配置生效模块【插件包和应用包等】应用包:参考/app/build.gradle
1.6 、gradle.properties 定义签名证书
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "30"
ANDROID_BUILD_TOOLS: "30.0.3"
ANDROID_SDK_TOOLS: "6858069_latest"
cache:
paths:
- .gradle / wrapper
- .gradle / caches
before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=. "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=. "platform-tools" >/dev/null
- echo y | android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=. "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_SDK_ROOT=$PWD
- export PATH=$PATH:$PWD/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=. --licenses
- set -o pipefail
stages:
- build
- test
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
以上code是可以运行的。但跟官网的例子不同。
棘手的部分是它sdk-tools-linux
已被弃用,因此 2018 年的数字与它所获得的一样高,应该替换为commandlinetools
接下来是,由于新的文件夹层次结构commandlinetools
与旧的不同,我们需要为每个sdkmanager命令添加一个标志,并将每个路径从 更改为android-sdk-linux/tools/bin
,android-sdk-linux/cmdline-tools/bin
接下来是关于环境变量的另一个弃用,因此我们应该更改ANDROID_HOME
为ANDROID_SDK_ROOT
扩展学习:上述代码,如果我把版本设置成最新版本ANDROID_SDK_TOOLS:7583922_latest ,不修改其他内容。会导致sdkmanager
命令无法查看,这是为什么呢?
shell>wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
shell>android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=. --list
通过这个命令可以查到sdkmanager能使用的sdk和build tools
注意:cache的缓存机制
gradle的缓存默认是/home/.gradle
修改cache缓存位置方式:
方法1
通过修改AndroidStudio的设置项,找到gradle相关的设置:
直接修改Service directory path即可。这种方法适合只使用AndroidStudio进行编译的环境。
方法2,修改gradle.properties文件
在其中增加一句:
gradle.user.home=D:/Cache/.gradle
缺点:每个项目都要这么加一次.
方法3,设置GRADLE_USER_HOME环境变量
在/etc/profile或~/.bash_profile增加如下:
export GRADLE_USER_HOME=$pwd/.gradle
方法4,通过gradle自带参数
gradle -g D:/Cache/.gradle build build