Ionic 3适配Android SDK 33后相机无法打开问题求助
Ionic 3 + Cordova 升级targetSdkVersion到33后相机功能失效问题
我开发了一款基于Ionic 3和Cordova的应用,原本相机功能正常。为满足Google Play商店要求,将android-targetSdkVersion从31升级至33后,Android 11、12及以上设备的相机功能失效。
触发相机按钮时,Android Studio Logcat输出以下错误日志:
2023-09-19 15:35:05.799 1043-1043/? E/vendor.qti.hardware.perf@2.2-service: Unknown params 2023-09-19 15:35:05.800 1043-1043/? E/vendor.qti.hardware.perf@2.2-service: Unknown params 2023-09-19 15:35:05.805 1043-1043/? E/vendor.qti.hardware.perf@2.2-service: Unknown params 2023-09-19 15:35:05.805 1043-1078/? E/ANDR-PERF-LM: MetaMeter: handleAsync() 164: AdaptLaunch Invalid Async 2023-09-19 15:35:05.849 1043-1043/? E/vendor.qti.hardware.perf@2.2-service: Unknown params 2023-09-19 15:35:05.989 7199-7199/? E/NextAppCoreTrainingJobService: No trained model yet
尝试升级cordova-android到12版本后,问题仍未解决,相机无法打开且无任何提示。
当前配置信息
package.json:
{ "name": "app", "version": "0.0.18", "author": "Ionic Framework", "homepage": "http://ionicframework.com/", "private": true, "scripts": { "clean": "ionic-app-scripts clean", "build": "ionic-app-scripts build --prod", "lint": "ionic-app-scripts lint", "ionic:build": "ionic-app-scripts build", "ionic:serve": "ionic-app-scripts serve" }, "dependencies": { "@angular/common": "4.4.7", "@angular/compiler": "4.4.7", "@angular/compiler-cli": "4.4.7", "@angular/core": "4.4.7", "@angular/forms": "4.4.7", "@angular/http": "4.4.7", "@angular/platform-browser": "4.4.7", "@angular/platform-browser-dynamic": "4.4.7", "@ionic-native/app-version": "^4.20.0", "@ionic-native/camera": "^4.5.2", "@ionic-native/core": "^4.11.0", "@ionic-native/date-picker": "^4.20.0", "@ionic-native/geolocation": "^4.20.0", "@ionic-native/splash-screen": "4.3.2", "@ionic-native/status-bar": "4.3.2", "@ionic-native/vibration": "^4.20.0", "@ionic/app-scripts": "^3.2.4", "@ionic/storage": "2.0.1", "brmasker-ionic-3": "^1.6.3", "cordova-android": "^12.0.0", "cordova-custom-config": "^5.1.1", "cordova-ios": "^4.4.0", "cordova-plugin-app-version": "^0.1.14", "cordova-plugin-camera": "6.0.0", "cordova-plugin-compat": "^1.2.0", "cordova-plugin-datepicker": "^0.9.3", "cordova-plugin-device": "^1.1.4", "cordova-plugin-geolocation": "~2.4.3", "cordova-plugin-ionic-webview": "^1.1.16", "cordova-plugin-splashscreen": "^4.0.3", "cordova-plugin-vibration": "^2.1.6", "cordova-plugin-whitelist": "^1.3.1", "dateformat": "^5.0.3", "ion": "^1.0.1", "ionic-angular": "3.9.2", "ionic-plugin-keyboard": "^2.2.1", "ionicons": "3.0.0", "node-gyp": "^9.4.0", "rxjs": "^5.5.11", "sw-toolbox": "3.6.0", "zone.js": "0.8.18" }, "devDependencies": { "node-sass": "7.0.3", "typescript": "2.3.4" }, "description": "An Ionic project", "cordova": { "plugins": { "cordova-plugin-vibration": {}, "cordova-plugin-datepicker": {}, "cordova-plugin-device": {}, "cordova-plugin-ionic-webview": {}, "cordova-plugin-splashscreen": {}, "cordova-plugin-whitelist": {}, "ionic-plugin-keyboard": {}, "cordova-plugin-geolocation": { "GEOLOCATION_USAGE_DESCRIPTION": " " }, "cordova-plugin-camera": {}, "cordova-plugin-compat": {}, "cordova-custom-config": {}, "cordova-plugin-app-version": {} }, "platforms": [ "android" ] } }
Ionic环境信息:
Ionic: ionic (Ionic CLI) : 4.0.0-rc.13 (C:\Users\User\AppData\Roaming\npm\node_modules\ionic) Ionic Framework : ionic-angular 3.9.2 @ionic/app-scripts : 3.2.4 Cordova: cordova (Cordova CLI) : 7.0.1 Cordova Platforms : android broken System: Android SDK Tools : 26.1.1 NodeJS : v17.9.1 (C:\Program Files\nodejs\node.exe) npm : 8.11.0 OS : Windows 10
解决思路建议
- 适配Android 13权限:Android 13(targetSdk33)新增
READ_MEDIA_IMAGES/READ_MEDIA_VIDEO权限,需在AndroidManifest.xml中添加声明,同时确保运行时动态申请权限,检查cordova-plugin-camera 6.x是否已适配该权限,未适配则手动补充配置。 - 升级Cordova CLI:当前Cordova CLI版本7.0.1过低,无法兼容cordova-android 12,建议升级到最新稳定版,升级后重新添加Android平台。
- 更新相机插件及依赖:
@ionic-native/camera版本4.5.2需升级到与cordova-android 12兼容的4.x最新版;移除已废弃的cordova-plugin-compat,cordova-android 12不再需要该插件。 - 适配Scoped Storage:Android 11+对文件访问限制更严格,确保相机插件使用的存储路径符合Scoped Storage要求,避免因权限问题无法读写图片。
- 升级WebView插件:当前
cordova-plugin-ionic-webview版本1.1.16过低,建议升级到与cordova-android 12、Ionic 3兼容的最新版本。 - 清理缓存重建项目:执行
cordova clean、ionic clean命令后,重新添加Android平台并构建,清除旧缓存导致的兼容性问题。
内容的提问来源于stack exchange,提问作者Victor Soares
相关产品推荐
相关产品推荐

