[Android] local.properties로 API Key 관리하기
·
Android/BuildConfig
프로젝트 관리를 위해 Git과 같은 형상관리 툴을 사용할 경우 API Key가 노출될 수 있음을 고려해야 한다. 안드로이드에서는 한 가지 방법으로 gitignore에 등록된 local.properties를 사용한다. local.properties에 API Key를 저장하고, 앱의 빌드 정보에 키 값을 추가하여 BuildConfig로 코드 상에서 접근할 수 있다. /** * local.properties */ API_KEY_1 = "89sdfsbsn815832jdsfkjedv" API_KEY_2 = "04kjcasvbcxzv632jbvzj35f" API_KEY_3 = "cbfhb518gfa0h52ngf=4ynb3" 예시를 위한 임시 키 값을 만든다. /** * build.gradle */ android {..
[Android] 내비게이션의 다음 경로 정보 구하기#2
·
작업 일지
[Android] 내비게이션 다음 경로의 정보 구하기#1 프로젝트에서 내비게이션을 사용하여 다음 경로까지의 거리 값과 회전 정보를 구해야하는 일이 생겼다. 개발 과정과 사용하게 된 API에 대해서 정리를 해본다. 사용 API ◾ 카카오내비 길찾기 SDK ogyong.tistory.com 이전 글에서는 내비게이션 사용을 위한 API 관리와 출발지, 도착지를 어떻게 설정했는지에 대해서 정리했다. 이번에는 지도 화면에서 길찾기 버튼을 눌렀을 때부터 내비게이션 다음 경로 정보를 구하기까지에 대해서 정리하려고 한다. 카카오내비 길찾기 SDK 참고 자료 링크 API 레퍼런스 가이드 에러 값 확인 내비게이션 사용을 위한 인스톨 및 초기화 @HiltAndroidApp class ServiceApplication: Ap..
[Android] 내비게이션의 다음 경로 정보 구하기#1
·
작업 일지
프로젝트에서 내비게이션을 사용하여 다음 경로까지의 거리 값과 회전 정보를 구해야하는 일이 생겼다. 개발 과정과 사용하게 된 API에 대해서 정리를 해본다. 사용 API ◾ 카카오내비 길찾기 SDK 우선 내비게이션을 사용하기 위해서 네이버, 카카오, 티맵과 같은 플랫폼에서 제공하는 API 또는 SDK를 사용해야 했다. 이 중에서 '카카오내비 길찾기 SDK'(링크)는 KNRGCode(링크)라는 회전 구간 경로 분류 코드를 내려주는데 별도의 구현없이 필요한 정보를 얻을 수 있어서 선택하게 됐다. ◾ SK Open API 지오코딩-좌표변환 API / 경로안내-직선 거리 계산 API 기기에서 GPS를 통해 얻는 좌표는 WGS84 좌표계다. 하지만 카카오내비에서는 KATECH 좌표계를 사용하기 때문에 좌표변환이 필..
[Android Studio] 프로젝트명 변경하기
·
Android Studio
1. 패키지 이름 변경 2. setting.gradle에서 rootProject.name 변경 3. build.gradle(:app)에서 applicationId와 namespace 변경 4. ctrl+shift+f로 변경 전 프로젝트명 검색하여 변경 5. Clean / Rebuild Project
[Android][Compose] Bluetooth Connect 하기
·
Android/Bluetooth
[Android][Compose] Bluetooth Scan 하기 안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 해보려고 한다. Scan 데이터를 얻으면 아래 이미지와 같이 리스트로 그릴 것이다. (UI는 Compose를 사용) 권한 처리하기 ogyong.tistory.com Bluetooth Scan 하기에 이어서 Connect를 해보려고 한다. GATT(Generic Attribute Profile) Connect를 하고 디바이스의 정보를 구하는 과정에서 GATT가 사용된다. GATT는 ATT를 프로토콜로하여 BLE 기기 간에 데이터를 주고 받기 위한 방식을 정의해 놓은 프로파일이다. ATT는 UUID를 고유 식별자라는 속성을 지니며, 이 속..
[Android][Compose] Bluetooth Scan 하기
·
Android/Bluetooth
안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 하는 방법을 정리했다. 권한 처리하기 Bluetooth Scan을 하기에 앞서 블루투스와 위치 정보에 대한 권한을 처리해줘야 한다. Manifiest에 아래와 같이 블루투스와 위치 정보에 대한 권한을 추가한다. MainActivity에서는 권한을 체크하는 코드를 작성한다. permissionArray에 누락된 권한이 있을 경우 Scan이 정상적으로 되지 않을 수 있다. class MainActivity : ComponentActivity() { private val permissionArray = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { arra..
[Android][Compose] Scaffold-topBar가 UI를 가리는 현상
·
작업 일지
Jetpack Compose 애니메이션 Codelab을 하던 중 AnimatedVisibility()이 보이지 않는 문제를 겪었다. Codelab은 Material2를 기준으로 되어 있었고, 나는 Material3에 맞춰서 진행을 하고 있었는데 AnimatedVisibility가 화면에 표시되지 않았다. Codelab의 코드와 하나씩 비교를 해도 원인을 찾지 못하다가 AnimatedVisibility의 높이를 늘려보고 이유를 찾았다. 내가 직접 작성한 코드와 Codelab의 코드 중 차이점은 Material3를 사용하는가였는데, Material3의 경우 Scaffold에서 Modifier를 정의하지 않으면 내부 블록의 UI가 중첩되고 있었다. Modifer를 정의하는 대신 Scaffold-topBar에 ..
[Android][Compose] Material2→Material3의 Typography
·
Android/Compose
Material2에서 Material3로 이전하면서 Typography(서체) 시스템이 변경되었다. 매개변수의 수는 거의 동일하지만 이름이 달라 파악하기 어려워 아래 표로 정리했다. Material2 Material3 h1 displayLarge h2 displayMedium h3 displaySmall N/A headlineLarge h4 headlineMedium h5 headlineSmall h6 titleLarge subtitle1 titleMedium subtitle2 titleSmall body1 bodyLarge body2 bodyMedium caption bodySmall button labelLarge N/A labelMedium overline labelSmall
[Android] Execution failed for task ':app:checkDebugDuplicateClasses' ···
·
Android/이슈 처리
Caused by: java.lang.RuntimeException: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20) Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules kotlin-stdlib-1.8.10 ··· Compose lifecycle 관련 라이브러리를 gradl..
[Android] SplashScreen 사용하기
·
Android/Splash
Android 12부터 스플래시 화면을 구현하기 위한 SplashScreen API(참고)가 추가되면서 모든 앱이 시작할 때 스플래시 화면에 앱 아이콘을 보여주게 되었다. 이것 때문에 SplashScreen의 처리를 하지 않으면 앱 아이콘이 포함된 스플래시 화면이 먼저 노출되었다가 사용자가 구현한 스플래시 화면이 보이는 이슈가 생겼다. 기존에는 스플래시 화면을 구현하기 위해서 직접 화면을 만들어야 했다. 하지만 SplashScreen이 등장하고 나서는 직접 화면을 만들 필요도 없고 애니메이션과 같은 효과와 더불어 스플래시 화면을 간단하게 만들 수 있게 되었다. 그럼 기존 방식에 문제가 있었는가 하면 앱의 시작 상태 중 Hot Start에 그 이유가 있다. Hot Start 상태에서는 앱이 실행될 때 메모..
[Android] warning: Schema export directory is not provided ···
·
Android/이슈 처리
warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false. 위 경고 메시지는 Room 라이브러리를 사용해서 데이터베이스 스키마를 생성할 때 exportSchema 설정에 의해 위의 경고가 뜬다. exportSchema는 Boolean 타입으로 데이터베이스 스키마를 폴더로 내보낼지 정할 수 있다. default 값이 true로 되어있는데 폴더 경로를 정해줘야 한다. 경로를 정해주지 않으면..
[Android] Deprecated Gradle features were used in ···
·
Android/이슈 처리
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. UnitTest 코드 실행 시 해당 warning 코드가 발생했다. Build 시 Gradle 8.0과 호환되지 않는 deprecated 된 기능을 사용하고 있어서 발생한 경고 문구라고 한다. settings.gradle에 jcenter()가 등록되어 있었는데 이 부분을 제거하니까 경고 문구가 사라졌다. 찾아보니 JCenter의 지원을 중단한 것 같다. JCenter service update | Android Developers Migrating Android dependencies from JCenter developer.android.com