android - 在 Docker 中使用 Angular 7 编译 Ionic 4 时出错
问题描述
在 Docker 中使用 Angular 7 编译 Ionic 4 时出错
我需要在 Docker 中使用 Ionic 4 和 Angular 7 编译一个项目。
我做接下来的步骤:
- 根据文章How To Install Oracle Java 12 / 11 / 8 on Ubuntu 18.04之后,我使用 Java JDK 版本 8 手动创建了一个映像。
我以图像 ubuntu:18.04 为基础并运行一个容器
#in the folder /volumen is the file jdk-8u211-linux-x64.tar.gz
docker run -it -v /volumen:/volumen --name ubuntu_java ubuntu:18.04 /bin/bash
安装jdk的休闲说明
apt-get update
apt-get install -y git wget curl unzip build-essential gcc make apt-utils rsync
tar -zxvf jdk-*
mv jdk* /usr/
update-alternatives --install /usr/bin/java java /usr/jdk1.8.*/bin/java 3
我将容器保存为带有标签 java:jdk8 的图像。
docker commit --change "ENV PATH $PATH:/usr/jdk1.8.0_211/bin" --change "ENV JAVA_HOME /usr/jdk1.8.0_211 ubuntu_java java:jdk8
- 以 java:jdk8 为基础创建图像并标记 ionic-android:ubuntu。
FROM java:jdk8
ENV DEBIAN_FRONTEND=noninteractive \
ANDROID_HOME=/opt/android-sdk-linux \
NODE_VERSION=10.15.3 \
NPM_VERSION=6.9.0 \
IONIC_VERSION=4.12.0 \
CORDOVA_VERSION=9.0.0 \
YARN_VERSION=1.16.0 \
GRADLE_VERSION=5.4.1
# Install Node
RUN curl --retry 3 -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && \
tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && \
rm "node-v$NODE_VERSION-linux-x64.tar.gz"
# Install ionic
RUN npm install -g npm@"$NPM_VERSION" && \
npm install -g cordova@"$CORDOVA_VERSION" ionic@"$IONIC_VERSION" && \
npm cache clear --force && \
gem install sass
#ANDROID STUFF
RUN echo ANDROID_HOME="${ANDROID_HOME}" >> /etc/environment && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get install -y --force-yes expect ant wget zipalign libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 qemu-kvm kmod && \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Android SDK
RUN cd /opt && \
wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.0.2-linux.tgz && \
tar xzf android-sdk.tgz && \
rm -f android-sdk.tgz && \
chown -R root. /opt
# Install Gradle
ENV GRADLE_VERSION=5.4.1 \
GRADLE_URL=https://services.gradle.org/distributions/gradle-5.4.1-bin.zip \
GRADLE_HOME=/opt/gradle \
GRADLE_OPTS="-Dorg.gradle.daemon=false"
ENV PATH=$PATH:$GRADLE_HOME/gradle-$GRADLE_VERSION/bin
RUN mkdir -p $GRADLE_HOME && \
wget -q -O gradle.zip $GRADLE_URL && \
unzip -d $GRADLE_HOME gradle.zip && \
rm gradle.zip
# Install Android SDK
ENV ANDROID_SDK_BUILD_TOOLS_VERSION=28.0.3 \
ANDROID_SDK_PLATFORM_VERSION=28 \
ANDROID_SDK_URL=https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip \
ANDROID_SDK_HOME=/opt/android \
ANDROID_SDK_ROOT=/opt/android \
ANDROID_HOME=/opt/android/sdk
ENV ANDROID_SDK_PACKAGES=" \
tools \
build-tools;$ANDROID_SDK_BUILD_TOOLS_VERSION \
platform-tools \
platforms;android-$ANDROID_SDK_PLATFORM_VERSION \
extras;android;m2repository \
extras;google;m2repository \
extras;google;google_play_services \
"
ENV PATH=$PATH:$ANDROID_SDK_HOME/tools/bin:$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/build-tools/$ANDROID_SDK_BUILD_TOOLS_VERSION:$ANDROID_SDK_HOME/platform-tools
RUN mkdir -p $ANDROID_SDK_HOME && \
wget -q -O android.zip $ANDROID_SDK_URL && \
unzip -d $ANDROID_SDK_HOME android.zip && \
rm android.zip
RUN mkdir -p $ANDROID_SDK_ROOT/.android && \
touch $ANDROID_SDK_ROOT/.android/repositories.cfg && \
yes | sdkmanager --licenses && \
yes | sdkmanager $ANDROID_SDK_PACKAGES
RUN cordova telemetry off
WORKDIR /var/app
EXPOSE 8100 35729
CMD ["ionic", "serve"]
- 我运行一个容器使用图像 ionic-android:ubuntu
docker run -it ionic-android:ubuntu /bin/bash
- 我进入容器并创建新的离子项目
ionic start myApp blank
cd myApp/
npm i
npm install --unsafe-perm node-sass
ionic cordova platform add android
ionic build
- 我尝试编译
ionic cordova build android
但它会引发以下错误
...
Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
...
笔记:
#ionic info
Ionic:
ionic (Ionic CLI) : 4.12.0 (/usr/local/lib/node_modules/ionic)
Ionic Framework : @ionic/angular 4.4.2
@angular-devkit/build-angular : 0.13.9
@angular-devkit/schematics : 7.3.9
@angular/cli : 7.3.9
@ionic/angular-toolkit : 1.5.1
Cordova:
cordova (Cordova CLI) : 9.0.0 (cordova-lib@9.0.1)
Cordova Platforms : android 8.0.0
Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.0.1, (and 4 other plugins)
System:
NodeJS : v10.15.3 (/usr/local/bin/node)
npm : 6.9.0
OS : Linux 4.15
#cordova requirements
Requirements check results for android:
Java JDK: installed 1.8.0
Android SDK: installed true
Android target: installed android-28
Gradle: installed /opt/gradle/gradle-5.4.1/bin/gradle
我已经尝试过但没有成功:
- 开放式jdk
- 科尔多瓦 8
- 5年级
- 4年级
请原谅我的英语不好。
注意:很长一段时间后,我尝试使用所用程序的新版本,但它会抛出相同的错误,幸运的是,如果它编译良好,则使用Capacitor 。
解决方案
在您的项目文件夹中运行:
cordova clean
然后
ionic cordova build android
推荐阅读
- java - 触发 SizeBasedTriggeringPolicy 时 Log4j Filepattern 不起作用
- c - C控制子进程的缓冲
- javascript - 如何使用 MomentJS 创建倒计时?
- mysql - 如何在 Kubernetes 中运行 MySQL 的多重保险
- java - 如何检查二维文件
- php - Yii2 gridview过滤不在数据库中的计算列
- python - 如何使用“statsmodels”将变量指定为回归中的分类变量
- websocket - 如何在 CentOS Web 面板上启用套接字 IO 和 websocket?
- nestjs - TypeOrm query builder
- c - Doxygen 将 C 中的函数参数记录为全局变量