構築 Cordova+Angular 的调试环境
首先
因为在使用Cordova开发Android应用时遇到了一些调试问题,所以我写下了备忘录作为记录。
首先,这是为了自己而写的,可能会有说明不足的地方。
如果有需要的话,请随时指出,谢谢。
更新记录
-
- 2020-03-26 – Angular CLI と cordova のプロジェクトディレクトリを同一にしました。
-
- 2020-03-26 – Angular9で確認
-
- 2020-03-26 – Visual Studio Codeでのデバッグがうまくいかない場合の対策を追記
-
- 2020-03-26 – cordovaとAngular CLIプロジェクトを同一ディレクトリに統合
-
- 2020-03-27 – Angular CLIのサブプロジェクトに対応
-
- 2020-03-28 – おまけ: Angular Material
-
- 2020-03-28 – おまけ: Material Design Icons
-
- 2020-03-28 – おまけ: Roboto Font
- 2021-11-05 – npxを利用
动机 jī)
动机非常简单,用三行字写下来就是这样的感觉。
「用Cordova+Angular+Android开发应用?遇到问题时如何进行故障排查和分析?」
「测试和发布后无法使用调试器进行故障排查简直可怕啊!!」
「我想在实际设备上设置断点进行调试啊~!」
所以,我进行了各种调查和尝试,最终成功了,现在我来总结一下。
有人说:“为什么不用Ionic呢?”我认为这个意见很有道理。
因此,请根据每个开发项目的情况来决定。
我需要使用最新的Angular+Cordova进行验证,所以目前没有使用Ionic。
另外,如果遇到Ionic上的问题,希望本文档可以作为解决方案和选择的参考。
前提 tí)
假设下列已经安装,接下来进行说明。
-
- Windows10 Pro 64bit
-
- Node.js 12.16.1
-
- Angular CLI 9.1.8\0
-
- Cordova 9 / cordova-android 8.0
-
- Android Studio/Android SDK
-
- VSCode 1.43.2
- VSCode – Cordova Tools
Cordova+Angular应用架构
当您搜索时,使用Angular/Angular CLI来构建Cordova的GUI部分有很多不同的配置。
大致上是像以下这样的感觉吗?
-
- Cordovaプロジェクトの上にAngular CLIプロジェクトを上書きする。
-
- Cordovaプロジェクトの直下にsrcディレクトリを作成して、そこにAngular CLIプロジェクトを作成する。
- CordovaプロジェクトとAngular CLIプロジェクトを独立させる。
我不会详细解释,但似乎没有常见的定石。
嗯,糟了…
以前,我们将Angular CLI和Corodova CLI项目的根目录放在同一目录层级中。以这种结构,我曾经以为不共享node_modules是安全的。但是由于调试环境的配置麻烦,我将Angular CLI项目目录和Cordova项目目录(cordova-angular)设置为相同的。
制作步骤
以下是创建一个示例项目的步骤,用于在VSCode中设置断点并在调试执行时停止处理。
创建项目
# cordovaプロジェクト生成
> npx cordova create cordova-angular net.kyosho.cordova.angular cordova-angular
# package.jsonバックアップ
> rename cordova-angular\package.json package.json.back
# Angularプロジェクト生成
> npx ng new cordova-angular --create-application=false --routing=false --style=scss
# Angularサブプロジェクト生成
> cd cordova-angular
> npx ng g application app --routing=true --style=scss
# androidプラットフォーム追加
> npx cordova platform add android
在之前的工作中,目录应该如下所示。
\---cordova-angular
| angular.json // Angular CLIの構成ファイル
| tsconfig.json
|
+---hooks
+---node_modules
+---platforms
+---plugins
+---projects
| \---app // サブプロジェクトディレクトリ
| +---e2e
| | \---src
| \---src
| | index.html // ルートHTML
| |
| +---app
| | app.component.html // 画面部分のHTML
| | app.component.ts // 画面部分に対するバックグラウンド処理を記述するTypescript
| |
| +---assets
| \---environments
\---www
修改文件
为了将ng build的输出目录更改为www目录,您需要按以下方式修改angular.json文件中的”outputPath”。
把 angular.json 文件的 “outputPath” 修改为 www 目录。
{
...
"projects": {
"angular-app": {
"architect": {
"build": {
...
"options": {
"outputPath": "www",
...
},
...
}},
...
}
将tsconfig.ts文件中的目标设定为ES5。
{
"compilerOptions": {
...
"target": "ES5",
...
}
}
在Cordova应用程序的deviceready事件发生后,修改projects/app/src/main.ts以启动Angular。
如果没有这个设置,可能无法很好地使用Cordova插件的功能。
...
const onDeviceReady = () => {
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
};
document.addEventListener('deviceready', onDeviceReady, false);
在项目的app/src/index.html文件中添加/修改,和。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>App</title>
<base href="/">
<!-- meta name="viewport" を追加します。 -->
<meta name="viewport" content="initial-scale=1, width=device-width, viewport-fit=cover">
<!-- meta http-equiv="Content-Security-Policy" を修正します。 -->
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
<!-- cordova.jsを参照します。 -->
<script type="text/javascript" src="cordova.js"></script>
</body>
</html>
为了在调试器中设置断点,我们将在projects/app/src/app/app.component.html中添加一个按钮。当按下按钮时,将在屏幕上显示当前时间。
<button (click)="clicked($event)">button</button>
<br />
{{message}}
在projects/app/src/app/app.component.ts文件中添加按钮点击事件处理程序(onClick()方法)。
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
message = 'メッセージ';
// HTML上のボタンをクリックすると呼ばれるメソッドです。
clicked(event: Event) {
this.message = (new Date()).toString();
console.log(this.message);
}
}
构建
完成上述的设置后,进行构建。
# Webアプリをビルドします。
# ビルド先は、../cordova-angular/www となります。
# "--base-href ./"は指定しないと表示されないので必ず付けてください。
> npx ng build --base-href=./
确认动作
# Android エミュレータ上で起動します。
> npx cordova emulate android
如果执行上述操作,则将启动以下Android应用程序。
如果在屏幕上显示了创建的Web应用程序,则表示成功。
点击(轻触)”button”按钮将显示当前时间。

使用VSCode进行调试
请对创建的样本进行调试。
请使用以下命令启动VSCode。
在启动时要指定cordova-project目录非常重要。
# VSCodeでcordova-angularディレクトリを開く
> code %ROOT%\cordova-angular
如果您尚未安装Cordova工具,请在此时安装。
单击VSCode左侧的“虫”按钮,将显示以下屏幕。
我认为在齿轮按钮上会有一个橙色的点,单击它可以选择调试环境。

有许多选项可供选择,但请选”Cordova”。

然后将创建launch.json文件,并应添加”在模拟器上运行Android”选项。
但是,如果保持原样,断点将无效,因此请在launch.json中添加sourceMapPathOverrides。
{
"version": "0.2.0",
"configurations": [
...
{
"name": "Run Android on emulator",
"type": "cordova",
"request": "launch",
"platform": "android",
"target": "emulator",
"port": 9222,
"sourceMaps": true,
"cwd": "${workspaceFolder}",
"ionicLiveReload": false,
"sourceMapPathOverrides": {
"webpack:///./*": "${cwd}/projects/app/*",
"webpack:///src/*": "${cwd}/projects/app/src/*",
"webpack:///*": "${cwd}/projects/app/*",
"webpack:///./~/*": "${cwd}/node_modules/*",
"./*": "${cwd}/projects/app/*"
}
},
...
]
}
请将DEBUG CONSOLE设置为以下状态。快捷键为Ctrl+Shift+Y。
选择“在模拟器上运行Android”,然后点击调试播放按钮(绿色播放按钮)。
这将启动Android应用程序,就像在命令提示符下运行cordova emulate android一样。
在启动的Android应用程序上,点击“按钮”即可在屏幕的消息区域显示当前时间。
让我们在屏幕上放置一个断点(红色小圆点)。
点击与下面的屏幕截图相同的位置,即可放置。

请在设定断点后重新点击按钮”button”。
这样一来,您就可以暂停处理了!

如果在实际设备上出现问题,看起来我们可以进行调查。
赠品
ionic提供了各种各样的用户界面。虽然不能完全替代,但是我会写出引入Angular Material的步骤。如果有缺少的用户界面等,可以使用ionic进行创建,也可以自己创建界面,甚至可以使用其他开源软件!
Angular Material
– 角度材料
只需执行以下内容。
可能会有一些确认,只需直接按[Enter]键即可。
> npx ng add @angular/material
? Choose a prebuilt theme name, or "custom" for a custom theme: Indigo/Pink [ Preview: https://material.angular.io?theme=indigo-pink ]
? Set up global Angular Material typography styles? No
? Set up browser animations for Angular Material? Yes
UPDATE package.json (1812 bytes)
√ Packages installed successfully.
UPDATE angular.json (4279 bytes)
UPDATE projects/camera-app/src/styles.scss (181 bytes)
安装Angular Material后,将添加以下标签。
<!doctype html>
<html lang="en">
<head>
...
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
...
</head>
...
</html>
因为从Google获取图标字体和字体,所以在离线时可能会出现错误。
另外,由于付出了努力,必须确保所有内容都在Cordova应用程序内完成。
本地安装图标和字体。
首先,我们会将图标安装到本地以便使用。接下来,需要安装以下内容。
> npm install --save material-design-icons
> npm install --save typeface-roboto
将 projects/app/src/index.html 的标签注释掉或删除。
<!doctype html>
<html lang="en">
<head>
...
<!-- <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet"> -->
<!-- <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> -->
...
</head>
...
</html>
可以将以下内容添加到projects/app/src/style.scss中。
...
@import 'material-design-icons/iconfont/material-icons.css';
@import 'typeface-roboto/index.css';
...
这样应该没问题!(应该的话……)