본문 바로가기
프로그래밍/유니티

[Unity] Android 12 이상 버전에서 앱 강제 종료 현상

by 김시루시루르 2022. 5. 14.

이거 진짜... 길고 험난했다...

API로 치면 31인가? 32? 어쨌든 안드로이드 버전 12가 나오면서

그 이전 버전을 대상으로 만든 유니티 프로젝트에서는

이거저거 바꿔주고 신경써야 할 게 늘었는데요 (인텐트 필터도 그렇고...)

 

와중에 인텐트 필터를 겨우 해결해서 넣었더니, 정작 버전 12인 기기에서 실행이 안된다는거예요 (젠장!)

전 내심 인텐트필터 true false 값 차이에 대한 글 떠올리면서

타이틀화면에서 종료되는거면 역시 이것때문인가? 내가 너무 대충 하긴 했지 크윽 이랬는데

유니티 로고 뜬 다음에 종료하냐 아니면 타이틀화면에서 종료하냐 이랬더니

걍 바로 강제종료된대! 그러니까 앱 크러쉬인거야 맙소사

 

왜 그런가 원인도 모르겠는 상태에서 구글링을 엄청 해낸 결과 겨우겨우! 해법을 얻을 수 있었습니다

인터넷은 역시 ... 정보의 바다고

프로그래머의 기본 소양은 역시 구글링이구나


 

1. 버그 정보

일단 이 버그는 ... Google AdMob 플러그인이 추가된 상태에서 발생하는 것 같습니다.

다른사람들의 경험담과 저의 경험담에서도 아무래도 애드몹 플러그인이 문제였다는 증언이 많았거든요.

그리고 위에서 썼던 대로, 유니티 로고도 나오기 전에! 그냥 뚝 꺼져버립니다.

혹시 구글 애드몹을 사용하고 + 강제종료 되는 타이밍이 같다면 의심해보세요.

 


2. 해결 방법

2-1. Google AdMob 플러그인 업데이트

 

Releases · googleads/googleads-mobile-unity

Official Unity Plugin for the Google Mobile Ads SDK - googleads/googleads-mobile-unity

github.com

플러그인을 우선 업데이트합시다.

저는 구버전인 5.4.0에서 7.0.0으로 업데이트 했는데,

전에 쓰던 버전이 너무 구버전이라 그런가 모르겠지만 플러그인 업데이트 없이 다음 방법을 시도하면

안되더라고요 하핫! (빌드부터 에러생김)

 

그나저나 애드몹 플러그인 업데이트할때마다 자꾸 에러생겨서 짜증나요

업데이트할때는 애드몹 관련 폴더 다 삭제하고 새 버전으로 추가해주시는게 가장 빠른 방법이라고 생각합니다.


2-2. Custom Main Gradle 활성화

이걸 해결하기 위해선 Custom Main Gradle을 활성화하고, 그걸 수정해야 합니다.

커스텀 메인 그레이들을 활성화하기 위해, 플레이어 세팅으로 이동합니다.

File → Build Settings → Player Settings

Edit → Project Settings → Player

그리고 Player Setting의 아래쪽에서 Publishing Settings 부분을 봅시다.

퍼블리시 세팅에서 좀 더 내리면 Build 부분이 있는데, 여기 쭉 있는 체크박스들 중에서...

Custom Main Gradle Template를 체크합니다.

그럼 그 아래에 경로가 표시되면서, 해당 경로에 mainTemplate라는 gradle 확장자의 파일이 생긴 걸 볼 수 있어요.


2-3. 그레이들 수정

해당 파일을 메모장이나 VS를 통해 열어봅시다.

그럼 //Android Resolver Repos End 부분 이후에 보면 이런 게 있는데 여기 아래,

dependencies 괄호 안쪽에

이 코드를 추가해주면 됩니다. 아래 코드 복붙이 가능하니.. 쓰세요.

1
2
3
4
5
6
7
8
constraints {
   implementation('androidx.work:work-runtime:2.7.0') {
     because '''androidx.work:work-runtime:2.1.0 pulled from
    play-services-ads has a bug using PendingIntent without
    FLAG_IMMUTABLE or FLAG_MUTABLE and will fail in Apps
    targeting S+.'''
   }
  }
cs

참고로 이걸 하시려면 Resolve를 마친 상태여야 합니다.

그래야 똑같이 나오거든요 ... ... 만약 이런 부분이 전혀 나오지 않는다면 Resolve를 해보세요.

 

여튼 이걸 잘 끼워서 넣어주시고, 빌드해서 테스트해보시면 안드로이드 12에서 강제종료되지 않습니다!


3. 만약에

이랬는데도 강제종료가 되신다면 Gradle Properties Template까지 수정해줘야 할 필요가 있습니다.

근데 이건 ... 저는 AdMob 플러그인 업데이트 이후에 다시 Resolve 하니까

수정해줘야 하는 부분이 자동으로 들어와 있어서 딱히 손대진 않았네요.

 

프로퍼티 추가에 대해서는 아래 글을 참고해보시면 됩니다.

 

Bug - Android 12 App crashes on startup due to error with PendingIntent (Google Mobile Ads plugin used)

My unity project uses Google Ad Mob Unity Plugin v6.1.2 which is the latest version. Target api level is 31. The game runs fine on devices that run...

forum.unity.com

댓글