지난 번에 flutter 3.3으로 업그레이드 이후 새로운 버젼 알림이 나타나 3.7 버전으로 업그레이드 하였다.
하지만 업그레이드 이후 에러가 나타나 내가 경험한 에러와 해결방법을 적는다.
1. 업그레이드 직후 환경
# gradle.properties 파일
org.gradle.jvmargs=-Xmx1536M
org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home
android.useAndroidX=true
android.enableJetifier=true
# gradle-wrapper.properties 파일
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
# android/build.gradle
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
2. 빌드 및 오류
1차 빌드 시 : "/Users/cjk/.pub-cache/hosted/pub.dev/permission_handler_android-9.0.2+1/android/src/main/java/com/baseflow/permissionhandler/ServiceManager.java:75: warning: [deprecation] queryIntentActivities(android.content.Intent,int) in android.content.pm.PackageManager has been deprecated"
에러가 나타나 pubspec.yaml 에서
permission_handler: ^9.2.0 => permission_handler: ^10.2.0
로 버전을 올려주었다.
2차 빌드 시 "An exception has occurred in the compiler (1.8.0_321)." 에러가 나타나 JAVA 11 설치 후 아래와 같이 환경들을 변경해 주었다.
# gradle.properties 파일
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
# gradle-wrapper.properties 파일
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
# android/build.gradle
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
3차 빌드 결과는 성공하였지만
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
경고가 발생해 아래와 같이 -Xlint:deprecation을 추가해 디버깅을 해보았다.
# android/build.gradle
allprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
repositories {
google()
jcenter()
}
}
디버깅 결과 webview_flutter_android 에서 deprecation 경고가 여러개 발생하길래 이 기회에 버전을 올려주었다.
webview_flutter: ^3.0.4 => webview_flutter: ^4.0.6
pub upgrade 이후 코드에서 webview 관련 부분이 모두 에러가 발생해 https://pub.dev/packages/webview_flutter 문서를 확인해보니 3.0 에서 4.0 버전으로 넘어가면서 API들이 모두 바껴 에러가 발생한 것이였다.
따라서 문서를 참고해 코드들을 4.0 버전에 맞게 Migration 하였다.
예를들어 아래와 같이 WebView를 선언해서 사용했었는데
Container(
margin: const EdgeInsets.only(left: 20,right: 20),
height: AppDimens.circleHeight,
child: WebView(
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
_webViewController = webViewController;
},
),
),
4.0 버전부터 webView가 WebViewWidget(NavigationDelegate)로 변경 되어 아래와 같이 코드를 수정하였다.
@override
void initState() {
super.initState();
_webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..loadRequest(Uri.parse(url));
}
- - - - - - - - - - - - - - - - - - - - - - - -
Container(
margin: const EdgeInsets.only(left: 20,right: 20),
height: AppDimens.circleHeight,
child: WebViewWidget(
controller: _webViewController,
),
),
이후 최종 빌드 시 경고없이 debug / release 모두 둘다 빌드 성공하였다.