gitlabcicd系列(十二)安卓打包

参考网站:https://dev.to/lavolpe/gitlab-ci-for-android-2021-update-2hhl

一、首先了解安卓的目录结构

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图

1.1、/app/build.gradle。定义SDK版本和build Tools版本

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图1

1.2、/gradle/wrapper/gradle-wrapper.properties 定义gradle版本

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图2

1.3 /build.gradle 最外层的gradle,主要定义仓库

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图3

1.4、 ./local.properties 定义SDK或NDK的位置

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图4

1.5 ./settings.gradle 配置生效模块【插件包和应用包等】应用包:参考/app/build.gradle

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图5

1.6 、gradle.properties 定义签名证书

GitOps、新兴技术能力gitlabcicd系列(十二)安卓打包插图6
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/binandroid-sdk-linux/cmdline-tools/bin

接下来是关于环境变量的另一个弃用,因此我们应该更改ANDROID_HOMEANDROID_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