android - 在 Docker 中使用 Angular 7 编译 Ionic 4 时出错

标签 android angular cordova docker ionic4

在 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 项目

  • 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
  • Cordova 8
  • 5年级
  • 4年级

  • 请原谅我的英语不好。

    注意:很长一段时间后,我尝试使用新版本的程序,但它抛出了同样的错误,幸运的是 Capacitor如果它编译得很好。

    最佳答案

    在您的项目文件夹中运行:

    cordova clean
    

    然后
    ionic cordova build android
    

    关于android - 在 Docker 中使用 Angular 7 编译 Ionic 4 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56295070/

    相关文章:

    javascript - 使用 Angularjs ngTable 更改输入后重新加载错误

    Angular2 ng-bootstrap - 没有提供者错误

    iphone - iOS Phone Gap/Cordova 2.2.0 中的默认启动图像

    android - 连接 Android 设备和运行 adb 命令时出现问题

    android - 与重量一起使用时,Recyclerview 不占据整个宽度

    java - fragment 中的对话框使 Android 应用程序崩溃。安卓.view.WindowsManager$BadTokenException

    node.js - Angular2 ExpressJs - 文件上传到服务器

    Android AdMob Phonegap 广告未显示

    xml - 从 XML 资源创建 hashmap/map

    具有不同背景颜色的 Android 按钮