android - 启用 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;
解决方案
推荐阅读
- xaml - 加载 ViewModel 时在 Picker 和 DatePicker 上绑定默认值
- ruby - 如何在 ruby 中比较这两个哈希值
- blazor - Blazor localize data annotation not is working
- django - 如何在 django-graphql-jwt 中自定义验证行为
- excel - 为什么 Chart.SetSourceData Source:=Nothing 会使 Excel 崩溃?
- azure - 如何监控 Azure 事件中心消费者延迟?
- ldap - OPEN DJ 中的分层 (URN) ex(urn:serviceid:partitionId:parent:child) 脚本自定义属性
- docker - 最小化 ubuntu 基础镜像的最佳方法
- python - 如何在游戏之间更改播放音乐
- hanami - Hanami:表单助手会自动填充嵌套集合吗?