在应用中升级 Capacitor 到 2.0
Capacitor 2 进行了一些工具链更新,包括 iOS 采用 Swift 5 以及 Android 采用 AndroidX。
更新 Capacitor 依赖
首先,更新 Capacitor 核心库和 CLI:
npm install @capacitor/cli@2 @capacitor/core@2
接下来,更新你使用的每个 Capacitor 平台:
# iOS
npm install @capacitor/ios@2
npx cap sync ios
# Android
npm install @capacitor/android@2
npx cap sync android
# Electron
cd electron
npm install @capacitor/electron@2
向后不兼容的插件变更
- 相机插件
- 所有平台上
saveToGallery的默认值现在均为false - 如果
allowEditing为true且编辑被取消,将返回原始图片
- 所有平台上
- 推送通知插件
- 调用
register()时将不再请求权限,请使用requestPermission() PushNotificationChannel重命名为NotificationChannel
- 调用
- 本地通知插件
- 调用
register()时将不再请求权限,请使用requestPermission() schedule()现在返回LocalNotificationScheduleResult
- 调用
- 消息提示插件
- 统一各平台持续时间:短提示 2000 毫秒,长提示 3500 毫秒
- 地理位置插件
- 在 Android 上使用 Fused Location Provider
- 从
GeolocationOptions中移除了requireAltitude - 修改了 iOS 上的原生定位精度值(更多信息)
- 文件系统插件
- 从
MkdirOptions中移除了createIntermediateDirectories(请改用recursive) - 为
writeFile添加了recursive选项,这会改变 Android 和 Web 上的行为(更多信息) - 移除了
Application目录选项,因为该功能已损坏
- 从
- 设备信息插件
- 从
getInfo()中移除了batteryLevel和isCharging,请使用getBatteryInfo()
- 从
- 模态框插件
inputPlaceholder现在设置占位符而非文本,请改用inputText
- 应用插件
AppRestoredResult现在为可选,仅在成功时返回,否则返回错误
- 剪贴板插件
- 移除了
ReadOptions
- 移除了
iOS
Capacitor 2 需要 Xcode 11 或更高版本。
将原生项目更新至 Swift 5
Capacitor 2 使用 Swift 5。建议将你的原生项目也更新至 Swift 5。
- 在 Xcode 中点击 编辑 -> 转换 -> 至当前 Swift 语法。
- App.app 将显示为选中状态,点击 下一步 按钮。
- 随后会提示 无需源码更改。
- 最后,点击 更新 按钮。
Android
AndroidX
Capacitor 2 按照 Google 的推荐,使用 AndroidX 作为 Android 支持库依赖,因此原生项目也需要更新以使用 AndroidX。
在 Android Studio 中执行 重构 -> 迁移至 AndroidX。然后点击 迁移 按钮,最后点击 执行重构。
如果使用的 Cordova 或 Capacitor 插件尚未支持 AndroidX,可以使用 jetifier 工具来修补它们。
npm install jetifier
npx jetifier
要在每次安装包后自动运行它,请在 package.json 中添加 "postinstall": "jetifier"。
创建通用变量
创建一个 android/variables.gradle 文件,内容如下:
ext {
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
androidxAppCompatVersion = '1.1.0'
androidxCoreVersion = '1.2.0'
androidxMaterialVersion = '1.1.0-rc02'
androidxBrowserVersion = '1.2.0'
androidxLocalbroadcastmanagerVersion = '1.0.0'
firebaseMessagingVersion = '20.1.2'
playServicesLocationVersion = '17.0.0'
junitVersion = '4.12'
androidxJunitVersion = '1.1.1'
androidxEspressoCoreVersion = '3.2.0'
cordovaAndroidVersion = '7.0.0'
}
在 android/build.gradle 文件中,添加 apply from: "variables.gradle":
classpath 'com.android.tools.build:gradle:4.1.1'
classpath 'com.google.gms:google-services:4.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
+apply from: "variables.gradle"
allprojects {
repositories {
google()
jcenter()
使用通用变量
如果你创建了 variables.gradle 文件,请更新项目以使用这些变量。
在 android/app/build.gradle 文件中,进行以下更新:
android {
- compileSdkVersion 28
+ compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "com.example.app"
- minSdkVersion 21
- targetSdkVersion 28
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation 'androidx.appcompat:appcompat:1.0.0'
+ implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
implementation project(':capacitor-android')
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
+ testImplementation "junit:junit:$junitVersion"
+ androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
+ androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
implementation project(':capacitor-cordova-android-plugins')
注意将单引号改为双引号。变量插值需要使用双引号。
建议更新 Android Studio 插件
当你在 Android Studio 中打开 Android 项目时,会出现 建议插件更新 的提示。点击 更新。系统会提示你更新 Gradle 插件和 Gradle。点击 更新 按钮。
你也可以手动更 新 Gradle 插件和 Gradle。
要手动更新 Gradle 插件,请在 android/build.gradle 文件中,将 com.android.tool.build:gradle 的版本更新至 3.6.1。
要手动更新 Gradle,请在 android/gradle/wrapper/gradle-wrapper.properties 中,将 gradle-4.10.1-all.zip 改为 gradle-5.6.4-all.zip。
更新 Google Services 插件
在 android/build.gradle 文件中,将 com.google.gms:google-services 依赖版本更新至 4.3.3。
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
- classpath 'com.google.gms:google-services:4.2.0'
+ classpath 'com.google.gms:google-services:4.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}