首页 > 解决方案 > 启用 Desugaring 后在发布版本中引发运行时异常

问题描述

使用 docker + gitlab 作为 CICD 用于 android app 的发布过程

最近我们集成了一个支持最新 JAVA api 的 android 模块,例如 stream()

如此处所述https://developer.android.com/studio/write/java8-support我在我的应用程序中启用了 Desugaring 功能

本地环境 JAVA_VERSION 11 GRADLE_VERSION 6.5

如果我在本地进行发布构建,则在提到环境后效果很好。

但是我执行 CI-CD 过程,当应用程序使用流 api 时会引发运行时异常

看起来 docker 映像不支持DESUGARING配置

在此处发布 docker 文件


FROM openjdk:11

ENV ANDROID_HOME /opt/android-sdk-linux

ENV SDK_HOME /opt

# Download Android SDK into $ANDROID_HOME
# You can find URL to the current version at: https://developer.android.com/studio/index.html

RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
    wget -q https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip -O android_tools.zip && \
    unzip android_tools.zip -d ${ANDROID_HOME}/cmdline-tools && \
    mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/tools && \
    rm android_tools.zip

ENV PATH ${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/cmdline-tools/tools/bin:${ANDROID_HOME}/platform-tools


# Download Gradle into $GRADLE_HOME
ENV GRADLE_VERSION 6.5
ENV GRADLE_SDK_URL https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip
RUN curl -sSL "${GRADLE_SDK_URL}" -o gradle-${GRADLE_VERSION}-bin.zip  \
    && unzip gradle-${GRADLE_VERSION}-bin.zip -d ${SDK_HOME}  \
    && rm -rf gradle-${GRADLE_VERSION}-bin.zip
ENV GRADLE_HOME ${SDK_HOME}/gradle-${GRADLE_VERSION}
ENV PATH ${GRADLE_HOME}/bin:$PATH


# Accept Android SDK licenses

RUN yes | sdkmanager --licenses

RUN touch /root/.android/repositories.cfg

# Platform tools
RUN sdkmanager "emulator" "tools" "platform-tools"

# SDKs
# Please keep these in descending order!
# The `yes` is for accepting all non-standard tool licenses.

RUN yes | sdkmanager --update --channel=3
# Please keep all sections in descending order!
RUN yes | sdkmanager \
    "platforms;android-30" \
    "platforms;android-29" \
    "build-tools;30.0.2" \
    "build-tools;29.0.2" \
    "extras;android;m2repository" \
    "extras;google;m2repository" \
    "extras;google;google_play_services" \
    "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" \
    "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1" \
    "add-ons;addon-google_apis-google-23" \
    "add-ons;addon-google_apis-google-22"

# Download and install Google Cloud SDK
RUN wget -nv  https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz 
RUN tar -zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true 
# Adding the package path to local
ENV GCLOUD_HOME "/google-cloud-sdk"
ENV PATH "$PATH:${GCLOUD_HOME}/bin"
RUN echo y | gcloud --quiet components update
RUN echo y | gcloud components install beta



可能是什么原因

运行时异常

11-10 11:44:43.419 E/AndroidRuntime(14146): java.lang.NoClassDefFoundError: Failed resolution of: Lj$/util/Collection$-EL;

标签: androiddockergitlab-cirelease

解决方案


推荐阅读