Ионная / угловая загрузка дважды, работает в debug. apk.apk, но не при выпуске

#android #angular #cordova #ionic-framework

#Android #angular #кордова #ionic-framework

Вопрос:

Я не настолько глубоко разбираюсь в Angular или Ionic. Может быть, это происходит. Но сейчас у меня следующая проблема.

У меня есть ионное приложение «ApplicationLatest«. Это должно начаться, выполните некоторые начальные проверки и все в порядке. Но если это проверяет сбои, он должен полностью переключиться / перейти на другой ресурс в отдельный «ApplicationOld«.

Последнее приложение в main.ts :

 
        platformBrowserDynamic().bootstrapModule(AppModuleLatest)
            .catch(
              err => console.log(err)
            );

  

AppModuleLatest -> bootstrap: [AppComponent]

Об эмиттере во время начальных проверок я запускаю возможный переход на другой ресурс

     this.parameterLoadError = this.initCheckup.routeError.subscribe((err) => {
    
        platformBrowserDynamic().bootstrapModule(AppModuleOld)
            .catch(
              err => console.log(err)
            );

    });
  

Это работает нормально, если я создаю debug.apk

=> ionic cordova run android

Но когда я запускаю выпуск

=> ionic cordova run android --prod --release

и запустите приложение с принудительным переходом на другой ресурс, который я получил :

 ERROR Error: A platform with a different configuration has been created. Please destroy it first.
  

Но если я сделаю destroyPlatform(); перед загрузкой AppModuleOld , экран останется пустым / белым.

И выдается исключение (которое я фиксирую с помощью logcat)

 09-25 09:24:02.052 20628 20628 D SystemWebChromeClient: http://localhost/main-es2015.9887f0567239099d41e3.js: Line 1 : ERROR Error: Uncaught (in promise): Error: No NgModule metadata found for 'od'.
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient: Error: No NgModule metadata found for 'od'.
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Gu.resolve (http://localhost/main-es2015.9887f0567239099d41e3.js:1:469088)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Nu.getNgModuleMetadata (http://localhost/main-es2015.9887f0567239099d41e3.js:1:454054)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Sh._loadModules (http://localhost/main-es2015.9887f0567239099d41e3.js:1:498940)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Sh._compileModuleAndComponents (http://localhost/main-es2015.9887f0567239099d41e3.js:1:498616)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Sh.compileModuleAsync (http://localhost/main-es2015.9887f0567239099d41e3.js:1:497741)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at useClass.compileModuleAsync (http://localhost/main-es2015.9887f0567239099d41e3.js:1:509629)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at zo (http://localhost/main-es2015.9887f0567239099d41e3.js:1:136755)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at Qo.bootstrapModule (http://localhost/main-es2015.9887f0567239099d41e3.js:1:138680)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at ld.initFailover (http://localhost/main-es2015.9887f0567239099d41e3.js:1:529186)
09-25 09:24:02.052 20628 20628 D SystemWebChromeClient:     at http://localhost/main-es2015.9887f0567239099d41e3.js:1:529730
  

В моей голове так много вопросов…

  • Почему он может запускаться в debug.apk?
  • Но в целом: возможен ли такой переход на другой ресурс?

Спасибо за любые подсказки и советы!

 ionic --version
6.5.0

Angular CLI: 8.3.23
Node: 10.15.3
OS: linux x64
Angular: 8.2.13
  

Ответ №1:

С небольшой помощью некоторых хороших друзей мы нашли рабочие решения.

Запомните инициализированную платформу из

 
    const platformRef = platformBrowserDynamic();
    platformRef.bootstrapModule(AppModuleLatest)
        .catch(
          err => console.log(err)
    );
  

Во время отработки отказа возьмите ссылку на платформу, уничтожьте только эту.

     this.parameterLoadError = this.initCheckup.routeError.subscribe((err) => {
        // Destroy the old one
        platformRef.destroy();
        //bstrap a new one
        platformBrowserDynamic().bootstrapModule(AppModuleOld)
            .catch(
              err => console.log(err)
            );

    });
  

Также мне пришлось изменить следующие параметры в angular.json

               "buildOptimizer": false,
              "aot": false,
              "outputHashing": "none",
  

У меня это работает. На настольных компьютерах и (Android) мобильных устройствах.