在您的应用中将 Capacitor 更新到 2.0
Capacitor 2 进行了一些工具更新,包括在 iOS 上采用 Swift 5,在 Android 上采用 AndroidX。
更新 Capacitor 依赖项
首先,更新 Capacitor Core 和 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
向后不兼容的插件更改
- Camera(相机)
saveToGallery的默认值在所有平台上现在为false- 如果
allowEditing为true并且编辑被取消,则返回原始图像
- Push Notifications(推送通知)
- 调用
register()时将不再请求权限,请使用requestPermission() PushNotificationChannel重命名为NotificationChannel
- 调用
- Local Notifications(本地通知)
- 调用
register()时将不再请求权限,请使用requestPermission() schedule()现在返回LocalNotificationScheduleResult
- 调用
- Toast(提示)
- 统一跨平台的持续时间:短 2000ms,长 3500ms
- Geolocation(地理位置)
- 在 Android 上使用 Fused Location Provider
requireAltitude从GeolocationOptions中删除- 更改 iOS 上的原生位置精度值(更多信息)
- Filesystem(文件系统)
createIntermediateDirectories从MkdirOptions中删除(请改用recursive)- 为 writeFile 添加了
recursive选项,这会更改 Android 和 Web 上的行为(更多信息) Application目录选项被删除,因为它已损坏
- Device(设备)
batteryLevel和isCharging从getInfo()中删除,请使用getBatteryInfo()
- Modals(模态框)
inputPlaceholder设置占位符而不是文本,请改用inputText
- App(应用)
AppRestoredResult现在是可选的,仅在成功时返回,否则返回错误
- Clipboard(剪贴板)
ReadOptions已删除
iOS
Capacitor 2 需要 Xcode 11+。
更新原生项目以使用 Swift 5
Capacitor 2 使用 Swift 5。建议更新您的原生项目也使用 Swift 5。
- 在 Xcode 中,点击 Edit -> Convert -> To Current Swift Syntax。
- App.app 将显示为选中状态,点击 Next 按钮。
- 然后会显示一条消息 No source changes necessary。
- 最后,点击 Update 按钮。
Android
AndroidX
Capacitor 2 按照 Google 的推荐使用 AndroidX 作为 Android 支持库依赖项,因此原生项目也需要更新以使用 AndroidX。
在 Android Studio 中,执行 Refactor -> Migrate to AndroidX。然后点击 Migrate 按钮,最后点击 Do Refactor。
如果使用尚未使用 AndroidX 的 Cordova 或 Capacitor 插件,您可以使用 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 项目时,将出现 Plugin Update Recommended 消息。点击 update。它会告诉您更新 Gradle 插件和 Gradle。点击 Update 按钮。
您也可以手动更新 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
}
更改 android:configChanges 以避免应用重启
在 android/app/src/main/AndroidManifest.xml 中,在 activity 的 android:configChanges 属性中添加 |smallestScreenSize|screenLayout|uiMode。
<activity
- android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
+ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
android:name="com.example.app"
android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBarLaunch"
android:launchMode="singleTask">
将缓存文件夹添加到 FileProvider 文件路径,以避免编辑图库图像时出现权限错误
在 android/app/src/main/res/xml/file_paths.xml 中添加 <cache-path name="my_cache_images" path="." />:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" path="." />
+ <cache-path name="my_cache_images" path="." />
</paths>
删除 launch_splash.xml
android/app/src/main/res/drawable/launch_splash.xml 文件可以被删除,因为它不再被使用。
删除 maven 仓库
Capacitor 分发在 npm 上,因此在 android/app/build.gradle 中拥有 maven 仓库条目不再需要,并且可能导致问题。从 repositories 部分删除它:
repositories {
- maven {
- url "https://dl.bintray.com/ionic-team/capacitor"
- }
flatDir {
dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
}
}