반응형

내가 개발하고 있던 어플은 targetsdkversion, compilesdkversion이 30이였다. 이번에 구글 지침으로 무조건 31로 올려야해서 어쩔수없이 올렸다. 본 필자는 맥북을 사용중이다.

 

1. 개발환경 업데이트

2. 코드 수정

3. 오류 해결

4. 결론

 

 

1. 개발환경 업데이트

나는 android12 sdk가 없기때문에 개발환경을 먼저 업데이트 하기러 했다. android studio > preferences에 android sdk를 검색해서 sdk platform에서 android 12를 다운받고 sdk tool에서 android sdk build tool를 체크해서 업데이트 했다.

 

그 다음 android studio에서 file > project structure 에 들어가서

project setting > project에서 sdk를 31로 바꿔주었다.(나는 android sutdio default jdk가 이미 31을 지원해서 android sutdio default jdk로 설정했다.) 

project setting > module에서 module sdk를 31로 바꿔주었다.(나는 android sutdio default jdk가 이미 31을 지원해서 android sutdio default jdk로 설정했다.) 

 

2. 코드 수정

먼저 compileSdkVersion, targetSdkVersion를 수정 해줘야하므로 flutter 프로젝트 > android > app > build.gradle(flutter에 build.gradle은 두개다 이걸 잘 몰랐던 필자는 한참을 고생하게 된다.)에 들어가서 둘다 30에서 31로 바꿔준다.

 

안드로이드 12부터는 exported 처리를 해주어야한다. 그래서 flutter 프로젝트 > android > app > src > main > AndroidManifest.xml에 android:exported="true" 를 넣어주면 된다.

<application
     android:label="근수저"
     android:usesCleartextTraffic="true"
     android:icon="@mipmap/ic_launcher">

     <activity
         android:name=".MainActivity"
         <!--아래와 같이 여기에 android:exported="true" 를 넣어주면 된다.-->
         android:exported="true"
         android:launchMode="singleTop"
         android:theme="@style/LaunchTheme"
         android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
         android:hardwareAccelerated="true"
         android:windowSoftInputMode="adjustResize"
         android:showWhenLocked="true"
         android:turnScreenOn="true">
         <intent-filter>
             <action android:name="android.intent.action.MAIN"/>
             <category android:name="android.intent.category.LAUNCHER"/>
         </intent-filter>
     </activity>
 </application>

 

 

3. 오류 해결

쉽게 흘러갈리가 없다. 엄청난 양의 오류가 발생했다.

 

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

대충 코틀린 버전이 안맞다는 이야기인거 같은데 구글링을 했을때 build.gradle에서 코틀린 버전을 수정하면 된다고 했다. 그래서 flutter 프로젝트 > android > app > build.gradle 에 buildscript과 코틀린 버전이 없길래 아래와 같이 입력했다.

buildscript {
    ext.kotlin_version = '1.6.0'
       
    dependencies {
    
    }
}

그러나 한참을 헤메다 보니 프로젝트 > android > build.gradle 에 build script가 이미 있었고 여기에 1.3.5로 되어있던 코틀린 버전을 1.6.0으로 수정하고 gradle버전을 4.1.0으로 맞췄다.

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"
        classpath 'com.google.gms:google-services:4.3.8'
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

 

 

 

firebase Error: Method not found: 'Error.throwWithStackTrace'.  Error.throwWithStackTrace(exception, stackTrace);

firebase에서 계속 에러가 발생했다. 처음에는 버전이 낮아서 호환이 안되는줄 알고 flutter pub add firebase_core, flutter pub add firebase_messaging, flutter pub add flutter_local_notifications 명령어를 사용해 (본인 flutter 버전에 맞는 최신의 패키지 버전을 설치해준다.)업데이트도 해봤지만 계속 해결 되지 않았고 구글링 결과 pubspec.ymal에 dependency_overrides: firebase_messaging_platform_interface: 3.1.6를 추가해서 특정 모듈만 버전을 낮췄더니 해결되었다.

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
    
  cupertino_icons: ^1.0.2
  
#아래 부분을 추가해줬다!!!
#아래 부분을 추가해줬다!!!
#아래 부분을 추가해줬다!!!
dependency_overrides:
	firebase_messaging_platform_interface: 3.1.6
    
dev_dependencies:
  flutter_test:
    sdk: flutter
  http: ^0.13.3
  firebase_core: ^1.12.0
  firebase_messaging: ^11.2.7
  flutter_local_notifications: ^9.5.3+1

 

 

FLUTTER : EXECUTION FAILED FOR TASK ':GEOLOCATOR:COMPILEDEBUGJAVAWITHJAVAC'-FLUTTER

위와같은 에러 등등이 떳는데 계속 해결법이 나오지 않아서 flutter clean 하고 flutter pub get하니 모두 해결되었다.

 

 

warning Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns 라는 경고가 떳는데 검색해보니 프로젝트 > android > build.gradle에 builtscript안에 'com.android.tools.build:gradle:4.1.0'를 수정해주면 된다고 적혀있었다. 아래 링크 참조 바랍니다.

https://grow-grow.tistory.com/38

 

4. 결론

필자는 단순히 targetsdkversion만 바꾸면 되는 줄 알았지만 생각보다 오류가 많이 발생해서 꼬박 하루를 소비했다. 그래도 나름 값진 시간이였다. 다음에 targetsdkversion 정책이 바뀐다면 그때는 잘 대응할 수 있을것같은 자신감이 생겼다.

 

flutter 2.2.2, gradle 4.1.0, kotlin 1.3.5, dart 2.14.4를 사용해서 어플을 개발했었는데 벌써 flutter 3.xx가 나왔다. 업데이트 해야하긴 하는데 너무 대규모여서 시간부족으로 미루고 있다가 이번에 flutter 2.5.3으로만 업데이트만 했다. targetsdkversion 정책이 다시 바뀌기 전에는 언날을 한번 잡아서 리뉴얼 할 생각이다.

 

반응형

+ Recent posts