GitLab CI for Android using Gradle not resolving Package Registry artifacts

What is the recommended way to resolve private GitLab registry artifacts in my Android project in a CI job?

Currently I’m getting the following error when trying to run basic Android Gradle build configurations:

FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:lintDebug'.
> Could not resolve all artifacts for configuration ':app:debugCompileClasspath'.
   > Could not find com.handsfree.r5.r5serviceaidl:r5-service-aidl:1.1.45.
     Required by:
         project :app

I have a section in my :app level build.gradle file here:

repositories {
    maven {
        url "https://gitlab.com/api/v4/projects/24757886/packages/maven"
        credentials(HttpHeaderCredentials) {
            name = "Private-Token"
            value = localProperties["gitLabPrivateToken"]
        }
        authentication {
            header(HttpHeaderAuthentication)
        }
    }
}

When I run this locally I have a local.properties file which is read into the gradle script’s localProperties variable and used for the gitLabPrivateToken. My guess is that this is not resolving correctly because the artifact isn’t being downloaded by the runner.

Here’s my yml file:

# Adapted from Android GitLab CI template here:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Android.gitlab-ci.yml

# Read more here: https://about.gitlab.com/2018/10/24/setting-up-gitlab-ci-for-android-projects/

image: openjdk:11-jdk

variables:

  # ANDROID_COMPILE_SDK is the version of Android you're compiling with.
  # It should match compileSdkVersion.
  ANDROID_COMPILE_SDK: "29"

  # ANDROID_BUILD_TOOLS is the version of the Android build tools you are using.
  # It should match buildToolsVersion.
  ANDROID_BUILD_TOOLS: "30.0.3"

  # It's what version of the command line tools we're going to download from the official site.
  # Official Site-> https://developer.android.com/studio/index.html
  # There, look down below at the cli tools only, sdk tools package is of format:
  #        commandlinetools-os_type-ANDROID_SDK_TOOLS_latest.zip
  # when the script was last modified for latest compileSdkVersion, it was which is written down below
  ANDROID_SDK_TOOLS: "7583922"

# Packages installation before running script
before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1

  # Setup path as ANDROID_SDK_ROOT for moving/exporting the downloaded sdk into it
  - export ANDROID_SDK_ROOT="${PWD}/android-home"
  # Create a new directory at specified location
  - install -d $ANDROID_SDK_ROOT
  # Here we are installing androidSDK tools from official source,
  # (the key thing here is the url from where you are downloading these sdk tool for command line, so please do note this url pattern there and here as well)
  # after that unzipping those tools and
  # then running a series of SDK manager commands to install necessary android SDK packages that'll allow the app to build
  - wget --output-document=$ANDROID_SDK_ROOT/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
  # move to the archive at ANDROID_SDK_ROOT
  - pushd $ANDROID_SDK_ROOT
  - unzip -d cmdline-tools cmdline-tools.zip
  - pushd cmdline-tools
  # since commandline tools version 7583922 the root folder is named "cmdline-tools" so we rename it if necessary
  - mv cmdline-tools tools || true
  - popd
  - popd
  - export PATH=$PATH:${ANDROID_SDK_ROOT}/cmdline-tools/tools/bin/

  # Nothing fancy here, just checking sdkManager version
  - sdkmanager --version

  # use yes to accept all licenses
  - yes | sdkmanager --licenses || true
  - sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}"
  - sdkmanager "platform-tools"
  - sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"

  # Not necessary, but just for surity
  - chmod +x ./gradlew

# Check linting
lintDebug:
  interruptible: true
  stage: build
  script:
    - touch local.properties
    - echo local.properties >> gitLabPrivateToken=MY_PRIVATE_TOKEN
    - ./gradlew -Pci --console=plain --scan :app:lintDebug -PbuildDir=lint

Never mind, I figured it out. If anyone else has issues with this, simply use the CI job token variable:

Read here: