Capacitor SQLite生产环境部分设备报CapacitorSQLitePlugin:null错误求助
解决方案:Capacitor SQLite 插件在 Android 13 设备上出现
CapacitorSQLitePlugin:null 错误 检查 Android 13 权限配置
Android 13 对文件访问权限限制更严格,需在AndroidManifest.xml中添加必要权限:<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- 兼容旧版存储权限(仅针对 Android 12 及以下) --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />同时在代码中动态请求对应权限,确保运行时授权。
确认插件初始化时机
必须在 Capacitor 完全初始化后调用createConnection,可通过监听capacitorReady事件执行数据库操作:import { CapacitorSQLite } from '@capacitor-community/sqlite'; document.addEventListener('capacitorReady', async () => { const db = await CapacitorSQLite.createConnection({ database: 'your-db-name', version: 1, encrypted: false, mode: 'no-encryption' }); });修复 ProGuard/R8 混淆配置
生产包混淆可能误删插件类,在android/app/proguard-rules.pro中添加排除规则:-keep class com.getcapacitor.community.sqlite.** { *; } -keep class net.sqlcipher.** { *; } -keep class com.getcapacitor.plugin.** { *; }添加后重新构建生产包。
升级插件到兼容版本
当前5.4.2-2版本可能存在 Android 13 兼容问题,尝试升级到最新稳定版:npm install @capacitor-community/sqlite@latest npx cap sync android调整数据库存储路径
Android 13 限制外部存储访问,改用应用内部私有目录存储数据库,创建连接时指定路径为DEFAULT:const db = await CapacitorSQLite.createConnection({ database: 'your-db-name', version: 1, encrypted: false, mode: 'no-encryption', path: 'DEFAULT' // 使用插件默认内部路径 });排查混淆影响
临时关闭混淆构建生产包测试,修改android/app/build.gradle:buildTypes { release { minifyEnabled false shrinkResources false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }若错误消失,说明是混淆规则问题,再针对性调整。
内容的提问来源于stack exchange,提问作者wimZ
相关产品推荐
相关产品推荐

