Development record of developer who study hard everyday.

레이블이 안드로이드그래들인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드그래들인 게시물을 표시합니다. 모든 게시물 표시
, ,

오래된 프로젝트 그래들 업데이트 꿀팁(Tip)

안드로이드 개발 블로그

오래된 프로젝트 그래들 업데이트하는 방법

내가 일하는 에이전시 회사에서는 예전 프로젝트를 수정하는 일이 왕왕 있다.

이번에는 2018년도에 만든 프로젝트를 건드리는데 22년도 06월 내가 사용하는 안드로이드 스튜디오 chipmunk에서는 빌드조차 안된다;;

그리고 드디어 오늘 빌드하는데 성공했다.

무려 2일이나 걸렸다;;


입사 6개월 동안 벌써 그래들 버전 올리는데 씨름한 것이 4-5번 되는 것 같다.

이제 경험도 좀 쌓였으니 그래들을 업그레이드하면서 생긴 노하우?를 좀 적어놓으려고 한다.


1. 대부분은 그래들 버전을 올리는데서 해결된다.

특별한 이유가 없는 한 빌드가 안되는 것은 그래들 버전의 문제가 많았다.

그래들을 수정하는 법은 간단하게 이야기하면 ctrl + shift + alt + s를 눌러서 그래들 플러그인과 그래들 버전을 수정하면 된다.

이때, 공식문서를 보면서 그래들 플러그인과 그래들의 버전이 호환성을 유지하게끔 수정해야한다.

그래들 플러그인 출시노트 바로가기

위 사이트에 들어가서 아래로 내려보면 각 그래들 플러그인 버전에서 변경된 사항이 나온다.

그 부분에서 코틀린 버전, 자바 버전, SDK 빌드도구 버전 등도 호환성을 유지할 수 있게끔 수정해줘야한다.

이 호환성이 맞지않으면 빌드시에 도무지 구글링해도 찾을 수 없는 에러가 계속해서 나온다.


그래들 버전 올리면서 꼼꼼히 메모를 하면서 작업을 하진 않았지만 메모를 해뒀던 빌드 에러로그는 이런 것들이 있다.

아래 예와 같은 버그들은 구글링해도 딱히 마땅한 해결책이 보이지 않았다.

대부분 그래들 버전을 수정하면 해결이 되었다.

ex1> Could not resolve all artifacts for configuration ':classpath'.

ex2> Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.

> Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'.

   > Could not find androidx.appcompat.app.AppCompatActivity:1.1.0:.

     Required by: ....


2. XML 문제

보통 빌드할 때 자바파일이나 코틀린 파일에 있는 코드만 신경쓰지 xml 파일에는 신경을 덜 쓰이게 된다.

하지만 오래된 프로젝트의 경우 androidx가 아니라 support 라이브러리로 뷰를 그리는 경우가 종종 있어서 xml 파일을 봐줘야하는 경우가 있다.

기억나는 로그에는 이러한 것들이 있다.

ex1) Unable to start activity ComponentInfo{com.appg.acetiltmeter/com.appg.acetiltmeter.activity.MainActivity}: android.view.InflateException: Binary XML file line #13 in com.appg.acetiltmeter:layout/activity_main: Binary XML file line #13 in com.appg.acetiltmeter:layout/activity_main: Error inflating class RecyclerView

 ex2) 에러로그에 "activity명 + impl" 파일에 문제가 있다는 로그


3. dependency 문제

build.gradle 파일에 dependency를 추가하게 되는데 여기서 문제가 발생하는 경우가 있다.

내가 이번에 작업하면서 난감했던 에러로그가 분명히 build.gradle에 추가된 종속성인데 could not resolve ~ 로그가 뜨는 것이다.

이번 경우에는 repository에 jcenter()나 mavenCentral()을 동시에 추가해주면서 해결이 되었다.

전임자가 개인 라이브러리를 만들어서 Maven에 넣어두고 dependency를 추가해주었던거 같은데 내가 repository를 잘못 건드려서 문제가 꼬였던 거 같다.


4. androidx 이전

오래된 프로젝트의 경우 support 라이브러리를 사용하는 경우가 많다.

그래서 androidx로 전부 이전시켜줘야한다.

방법은 간단하다.

1. 안드로이드스튜디오 메뉴 - Refactor - migrate to Androidx 눌러준다.

2. gradle.properties에서 android.useAndroidX=true, android.enableJetifier=true 를 적어준다.

3. 자바파일에서 supprort 라이브러리를 사용하는 코드를 전부 androidx로 바꿔준다.

----------------------------------

3번이 진짜 가관이였다.

자동으로 support 라이브러리에서 사용하는 recyclerView나 nonNull 등 객체들이 자동으로 androidx로 바뀌어지면 좋은데 그렇지 않았다.

그래서 결국 일일이 찾아서 다 바꿔주었다.

androidX 클래스 매핑 바로가기

위 사이트에 가서 해당 라이브러리에 매핑하는 androidX 클래스를 찾아서 바꿔주면된다.


5. [Error] resource android:attr/lStar not found 해결방법

 이 에러가 나오면 그래들 버전 업그레이드가 막바지에 이르렀다는 신호다.ㅋㅋ

compileSdkVersion과 targetSdkVersion을 31로 수정해주면 된다.

그리고 31로 수정하는 순간 manifest에서 구성요소에 extported 값을 명시하라고 할 것이다.

그럼 정말로 그래들 버전 업그레이드 끝이다!!

6. can not find symbol 해결방법

안드로이드 스튜디오 메뉴에서 Build - cleanProject 선택

코드의 오타가 아닌이상 대부분 해결 되더라...




Share:
Read More