반응형

안드로이드 개발 94

[해결] Gradle Sync 실패, 알고 보니 안드로이드 스튜디오 버전이 낮았습니다 (AGP 호환표 정리)

얼마 전에 오랜만에 프로젝트를 열었는데 Gradle Sync가 시작하자마자 빨간 줄을 뿜더라고요.코드는 한 줄도 안 건드렸어요. 어제까지 멀쩡히 빌드되던 프로젝트였고요. 처음엔 캐시 문제인 줄 알고 Invalidate Caches부터 눌렀는데, 재시작해도 똑같은 에러가 나왔어요.결론부터 말하면 원인은 안드로이드 스튜디오 버전이 낮아서였어요. 프로젝트의 Android Gradle Plugin(AGP) 버전은 올라가 있는데, 제 스튜디오는 그 버전을 열 수 없는 버전이었던 거죠.이런 에러가 은근히 자주 나요. 저도 예전에 비슷한 걸로 한 번 고생한 적이 있고요. 그래서 이번엔 제대로 정리해두려고 합니다.에러 메시지는 이렇게 생겼어요제가 본 메시지는 이런 형태였어요.The project is using an ..

[해결] No matching client found for package name - applicationIdSuffix와 Firebase의 함정

AI 이미지 생성 앱을 만들고 있습니다. 스토어에 올라간 버전과 개발 중인 버전을 한 기기에서 나란히 비교하고 싶어서 applicationIdSuffix를 붙였습니다. 그랬더니 빌드가 통째로 깨졌습니다.Execution failed for task ':app:processDebugGoogleServices'.> No matching client found for package name 'com.example.myapp.debug'검색해보면 해결책은 금방 나옵니다. 그런데 그 해결책을 그대로 따라가면 두 번째 벽에 부딪힙니다. 이 글은 첫 번째 벽을 넘는 방법과, 아무도 미리 말해주지 않는 두 번째 벽까지 정리한 글입니다.왜 이 에러가 나는가원인은 google-services 그래들 플러그인의 동작 방식에..

오늘의 음주 코딩 23년 5월 25일

오늘도 회사에서 열심히 코딩을 하고, 퇴근 후 집에서 취미 코딩(?)을 시작합니다. 취미가 코딩인거는 회사사람들에게는 비밀이에요. "미친놈" 취급당할 수 있거든요. 오늘의 음주는 제가 좋아하는 헤네시와 토닉워터를 섞은 술입니다. 집에서 칵테일을 이것저것 만들어 먹지만 제 입에는 이녀석이 최고입니다. ^^ 오늘은 Stable Diffusion을 이용한 앱을 제작하는데 아주 재미(?) 있습니다. 회사에서는 따분한 코딩만 하다가 집에 와서 다이나믹한 주제에 코딩을 하면 스트레스가 풀린답니다. 그리고 제 앱이니 아무도 딴지 걸지 않아 좋아요. 회사에서는 코드 리뷰를 한답시고 창의적인 코딩은 할 수가 없답니다. 다들 나이 먹더니 걱정인형이 되어서는 사이드 이펙트만 걱정하고 발전적인 내용은 없어요. 나이 먹어서도 ..

Android에서 화면 크기를 픽셀로 얻는 방법

안드로이드 앱을 개발하다보면 스마트폰의 각각 다른 화면 크기로 인해 어려움을 겪고는 합니다. 이럴때는 스마트폰의 화면 크기 값을 불러와서 거기에 맞추어 코딩을 하면 됩니다. 이때 꼭 필요한것이 현재 화면의 크기를 가져오는것입니다. 아주 간단히 아래처럼 코드를 입력하면 해결이 됩니다. 1. 화면 크기 가져오는 코드 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; Log.d(TAG, "Display size, width = " + width + " height = " + height); 2. 앱..

안드로이드 context란?

Context? 이름에서 알 수 있듯이 응용 프로그램/개체의 현재 상태에 대한 컨텍스트입니다. 새로 생성된 개체가 진행 중인 작업을 이해할 수 있습니다. 일반적으로 프로그램의 다른 부분(활동 및 패키지/응용 프로그램)에 대한 정보를 얻기 위해 호출합니다. getApplicationContext(), getContext(), getBaseContext() 또는 this(Application, Activity, Service 및 IntentService 클래스와 같이 Context에서 확장되는 클래스에 있는 경우)를 호출하여 컨텍스트를 가져올 수 있습니다. 컨텍스트의 일반적인 용도: 새로운 objects를 만들때 사용: Creating new views, adapters, listeners: TextView..

안드로이드 키패드 숨기는 방법. InputMethodManager

안드로이드 앱을 개발하다보면 입력란에 글자를 모두 입력하고 키패드를 숨기고 싶을때가 있습니다. 이럴때는 아주 간단히 API를 사용해서 숨기기가 가능합니다. 1. 키패드가 나오는 화면 아래 그림처럼 글자를 입력하려고하면 발생하는 입력기를 코드에서 숨기는 방법을 공유합니다. 2. 해결 코드 -. 해결 코드는 아주 간단합니다. 아래 코드를 복사해서 붙인 다음 hide()함수를 호출해주는 순간 키패드는 숨게 됩니다. void hide() { InputMethodManager imm = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); //Find the currently focused view, so we can grab the..

java.lang.ClassCastException: androidx.emoji2.text.SpannableBuilder cannot be cast to java.lang.String

안드로이드 문자열 값을 다루다 보면 가끔 마주치는 에러입니다. 예를들면 char 형태의 값에 string Casting 할 때 발생하곤 합니다. 아래 예제를 보면서 해결 책을 공유드립니다. 1. 오류 로그 -. 문제 발생시 아래처럼 SpannableBuilder cannot be cast to java.lang.String 이라는 문구가 발생합니다. 2. 예제 코드 (오류 포함) -. 아래 파란색으로 마킹된 부분에서 에러가 발생합니다. CharSequence 타입인 s를 string으로 casting 하기 때문입니다. 실제로 이 문제를 해결하는 방법은 아주 간단합니다. 3. 해결 방법 -. 이 해결 방법은 꼼수(?)가 아니라 정식 해결 방법입니다. 보기엔 조금 이상해보이지만, 실제 코드를 따라가보면 아주..

안드로이드 px, dip, dp 와 sp 차이 설명

안드로이드 개발할때 쓰는 단위가 여러가지가 있습니다. 예를들어 layout 에서 textview의 위치나 크기를 입력할때는 dp를 쓰고 있습니다. 글씨의 크기를 지정할때는 sp를 사용하고 있습니다. 이런 용어들을 정리해봤습니다. 우선 아래 예제를 보면 sp, dp, pt를 사용하는 예제를 확인할 수 있습니다. 실제 layout 정보는 아래와 같습니다. 이제 각 단위에 대해 알아보겠습니다. 1. px -. 픽셀 - 화면의 실제 픽셀에 해당합니다. 2. in -. 인치 - 화면의 물리적 크기를 기준으로 합니다. 1인치 또는 2.54센티미터 3. mm -. 밀리미터 - 화면의 물리적 크기를 기반으로 합니다. 4. pt -. 포인트 - 화면의 실제 크기를 기준으로 1/72인치입니다. 5. DP 또는 dip -...

[수정완료] FAILURE: Build failed with an exception.

안드로이드 개발중에 종종 발생하는 에러입니다. 아래처럼 android studio setting에서 Gradle User home 을 변경하면 해결이 되는 경우가 많습니다. 아래 1번 2번 3번 중 하나는 해당 문제 해결이 대부분 가능합니다. 1. gradle user home 메뉴를 이용해 해결하는 방법 File -> Settings 를 누릅니다. Build Tools -> Gradle -> Gradle User home 메뉴의 폴더 모양의 아이콘을 클릭합니다. 이후 .gradle을 현재 열려있는 프로젝트의 .gradle을 선택합니다. 2. Gradle version up 하는 방법 -. 아래의 JDK선택하는 메뉴에서 원하느 gradle 버전을 선택해서 sync up 하면 해결이 됩니다. 3. Sync..

OutOfMemoryException 해결 방법

에러 이름에서 알 수 있듯이 메모리가 부족한 상태에서 나오는 exception입니다. Exception in thread “main”: java.lang.OutOfMemoryError: Java heap spac Heap size의 부족으로 Java Object를 Heap에 할당하지 못하는 경우. Exception in thread “main”: java.lang.OutOfMemoryError: PermGen space Class나 Method 객체를 PermGen space에 할당하지 못하는 경우 발생 애플리케이션에서 너무 많은 class를 로드할 때 발생한다. 주로 잘못된 설계/구현에 의해 발생한다. -XX:PermSize, -XX:MaxPermSize Option을 이용하여 오류를 수정하기도 한다...

반응형