Flutter升級到2.0最新版本决瞳,因為那個Null safety相關(guān)問題货徙,更新項目對應(yīng)的插件;
在運行iOS沒有問題瞒斩,在運行安卓時破婆,提示compileSdkVersion 30不支持一些升級的插件;
1胸囱、版本修改調(diào)整
Flutter 源碼根目錄/android/app/build.gradle 配置文件中 , 設(shè)置 compileSdkVersion 為 30 , targetSdkVersion 為 31
若也提示最低的minSdkVersion祷舀,也對應(yīng)修改
android {
compileSdkVersion 30
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.flutter_tab_demo"
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
修改調(diào)整:
android {
compileSdkVersion 31
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.flutter_tab_demo"
minSdkVersion 19
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
2、升級下載支持31的虛擬機,按提示選擇烹笔,一般可以選最新的
設(shè)置 Android 12 SDK
設(shè)置 Android 模擬器
配置 Android 模擬器以運行 Android 12 是探索新功能和 API 以及測試 Android 12 行為變更的理想解決方案裳扯。設(shè)置模擬器既快捷又方便,可讓您模擬各種屏幕尺寸和設(shè)備特性谤职。
您可以通過執(zhí)行以下操作饰豺,在 Android Studio 內(nèi)設(shè)置模擬器:
- 安裝 Android Studio Arctic Fox | 2020.3.1 或更高版本。
- 在 Android Studio 中允蜈,依次點擊 Tools > SDK Manager冤吨。
- 在 SDK Tools 標(biāo)簽頁中,選擇最新版 Android 模擬器饶套,然后點擊 OK漩蟆。如果尚未安裝最新版本,則此操作會安裝最新版本妓蛮。
- 在 Android Studio 中怠李,依次點擊 Tools > AVD Manager,然后按照說明創(chuàng)建新的 Android 虛擬設(shè)備 (AVD)蛤克。
請務(wù)必選擇 Pixel 3捺癞、Pixel 3a、Pixel 4构挤、Pixel 4a髓介、Pixel 5 或 Pixel 5a 系列設(shè)備定義以及 64 位 Android 12 模擬器系統(tǒng)映像。請注意儿倒,Android 12 不支持 32 位 Android 模擬器系統(tǒng)映像版保。如果您尚未安裝與您的設(shè)備定義匹配的 Android 12 系統(tǒng)映像呜笑,請點擊 Release Name 旁邊的 Download 獲取該映像夫否。- 返回 AVD 管理器中的虛擬設(shè)備列表彻犁,然后雙擊您的 Android 12 虛擬設(shè)備以將其啟動。
運行報錯:
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
構(gòu)建警告:將新 ns 映射到舊 ns
解決方案:更新Gradle 及 Gradle 插件版本
注意:Gradle 7.0.2 是目前 Google Maven 存儲庫中最新的穩(wěn)定版本凰慈。要檢查更新的版本:https://maven.google.com汞幢。在com.android.tools.build > gradle 下,您將找到適用于 Android 的版本微谓。
kotlin升級查看最新版本:https://kotlinlang.org/docs/gradle.html
plugins {
kotlin("<...>") version "1.6.10"
}
2.1)路徑android/build.gradle
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
更新
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
2.2)路徑android/gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
更新
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
3森篷、運行錯誤提示:
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
Manifest merger failed : android:exported needs to be explicitly specified for <activity>. Apps targeting Android 12 and higher are required to specify an explicit value forandroid:exported
when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
解決方式:在activity 里添加 android:exported 屬性
路徑:android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.flutter_tab_demo">
<application
android:label="flutter_tab_demo"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
更新
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.flutter_tab_demo">
<application
android:label="flutter_tab_demo"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"