報錯處理
在打包的時候遇到過幾個問題,這里記錄下來兩個
Visual Studio Code運行ionic build出錯顯示ionic : 無法加載文件
ionic 項目通過 android studio 打開報錯 capacitor.settings.gradle 文件不存在
ionic7 項目初始化以及打包 apk
這篇文章講到了如果安裝 ionic 以及通過 capacitor 最后打包為 apk : ionic7 從安裝 到 項目啟動最后打包成 apk
設置網絡權限
如果不設置網絡權限
,我們打包的項目是無法進行網絡請求的。那么我們現在看下怎么設置網絡權限
吧。
新增網絡權限文件
新建 network_security_config.xml
文件,具體路徑如下:
內容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>
AndroidMainifest.xml 中設置
新增完了 network_security_config.xml
文件之后,需要在 AndroidMainifest.xml
中增加配置:
內容如下:
android:networkSecurityConfig="@xml/network_security_config"
測試
這里我提供一個用于測試使用的 http 請求地址,方便與測試
https://jsonplaceholder.typicode.com/photos/5
測試調用
test() {this.apiService.testData().subscribe((body) => {this.msg.infoToast('獲取testData的返回值:' + body);console.log(body);this.msg.infoToast(JSON.stringify(body));});}
用于的 http 請求代碼
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';export enum RequestMethod {GET = 'GET',HEAD = 'HEAD',Post = 'POST',PUT = 'PUT',DELETE = 'DELETE',OPTIONS = 'OPTIONS',PATCH = 'PATCH',
}@Injectable()
export class ApiService {headers = new HttpHeaders({accept: 'application/json','Content-type': 'application/json;charset=UTF-8',});constructor(private http: HttpClient,) {}testData(): Observable<Object> {return this.http.get('https://jsonplaceholder.typicode.com/photos/5');}/*** get 方法* @param path 調用地址* @param args 傳入參數*/get(path: string, args?: any): Observable<any> {const options = { headers: this.headers, withCredentials: true };if (args) {options['params'] = this.serialize(args);}return this.http.get(path, options).pipe(catchError(this.checkError.bind(this)));}/*** 報錯檢查* @param error* @returns {any}*/private checkError(error: any): any {if (error && error.status === 401) {console.log(`401${error}`);} else {console.log(error);}throw error;}// 將數據轉換為 httpParamsprivate serialize(obj: any): HttpParams {let params = new HttpParams();for (const key in obj) {if (obj.hasOwnProperty(key)) {params = params.set(key, obj[key]);}}return params;}}