#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) мобильных устройствах.