Android Studio에서 Proto DataStore 설정하는 방법 (gradle kotlin)
·
Android/Jetpack
Proto DataStore에 대한 친절한 정보가 많이 없어서제가 열심히 삽질해가며 작성한 글입니다... 😭 참고한 소스코드 : NowInAndroid[versions]# datastoreandroidxDataStore = "1.1.1"protobufPlugin = "0.9.4"protobuf = "4.26.1"junitJunit = "4.12"[libraries]# AndroidXandroidx-dataStore = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" }androidx-dataStore-core = { group = "androidx.datastore", name = "datastor..
[Android/Error]Cannot add a AndroidSourceSet with name 'debug' as a AndroidSourceSet with that name already exists
·
Android/에러 및 이슈 사항
개요새로운 프로젝트에서 Proto DataStore를 도입하기 위해 DataStore의 Proto 모듈을 추가하였다.해당 모듈 Gradle 작성 중에 한 오류를 만나게 되었다. A problem occurred configuring project ':core:datastore-proto'. > Cannot add a AndroidSourceSet with name 'debug' as a AndroidSourceSet with that name already exists. 이 오류는 AndroidSourceSet을 이미 정의된 이름(debug 또는 release)으로 다시 추가하려고 할 때 발생하는 것이었다. 그렇다면 이 오류를 발생시킨 코드는 무엇일까.원인androidComponents.beforeVar..
Preference DataStore와 Proto DataStore의 차이
·
Android/Jetpack
개요SharedPreferences는 이미 무덤으로 들어간지 오래.하지만 현재 회사는 아주 아주 오래된 프로젝트였고, 여전히 SharedPreferences를 사용하고 있었다.데이터 무결성이 지켜지지 않아 자꾸 문제가 발생하였기에 마이그레이션을 하기로 결정 !! 이전 회사에서 사용했던 방법은 JetPack에서 나온 DataStore였다.당연하게 써왔던 DataStore의 개념이 NowInAndroid를 보며 무너졌다. Proto DataStore ???그게 대체 뭔데 !!!!!!! 모르면 정리해야지...정리1. Preference DataStore란?Key-Value 형식으로 데이터를 저장하는 방법이다.SharedPreferences의 방식과 유사하다.단, 구조화 된 데이터는 지원하지 않으며 Boolea..
Android Jetpack ComposeUI 기초 문법 및 특징
·
Android/UI-UX 디자인
ComposeUI 강의를 열심히 봤는데, 아무리 따라해도 머리에서 휘발되어버리는 느낌이다.직접 Compose를 이용한 토이 프로젝트를 하기 전에 전체적으로 문법 정리를 먼저 해야할 것 같았다.  1. @Composable 애너테이션 Composable 함수Jetpack Compose에서 UI를 정의하는 기본 단위함수에 @Composable 애너테이션을 붙이면 이 함수는 UI 요소를 그릴 수 있게 된다.@Composablefun Greeting(name: String) { Text(text = "Hello, $name!")} 2. Text 텍스트 출력텍스트를 화면에 표시하는 가장 기본적인 컴포넌트이다.@Composablefun SimpleText() { Text(text = "Hello, Wor..
[Android/Error] Constant expression required
·
Android/에러 및 이슈 사항
갑자기 Switch ~ Case 문에서 ‘Constant expression required’ 오류가 발생하였다. 기본적으로 Android Gradle 플러그인 8.0.0부터 최적화된 빌드 속도를 위해 리소스(예 : 상수 표현식) R.id. ...가 더 이상 선언되지 않기에 발생한 오류였다.switch (R.id.btn) { case 입력값1: ... break; case 입력값2: ... break; ... default: ... break;}위와 같이 코드를 작성하면 해당 오류가 발생하는 것이다.해결 방법은 아래와 같다. 방법1. Switch ~ Case 문을 if 문으로 변경한다. 해당 소스코드 switch 위에 커서를 올린 뒤, al..
[Android/Error] AGP 버전에 맞춰 Android Studio 업데이트 하기
·
Android/에러 및 이슈 사항
현상 The project is using an incompatible version (AGP 8.0.2) of the Android Gradle plugin. Latest supported version is AGP 7.4.2 Project의 gradle 버전을 8.0.2 버전으로 업데이트 했는데, 해당 프로젝트에서는 사용할 수 없다는 이슈가 발생하였다.원인 및 해결Gradle 버전 별로 호환이 되는 Android Studio 버전이 있다. AGP 8.0.0 버전은 Android Studio Flamingo (2022.1.1) 버전부터 호환이 된다. AGP 8.0.2 버전은 Android Studio Giraffe (2022.3.1) 버전부터 호환이 된다. Gradle 버전에 맞춰 Android Stu..
[Android/Error] Kotlin 버전 세팅 이슈
·
Android/에러 및 이슈 사항
현상프로젝트에서 모듈을 변경하였는데 Kotlin 파일만 Import가 되지 않았다.aar 파일을 뜯어보니 원인은 아래와 같았다.This class file was compiled with different version of Kotlin compiler and can't be decompiled.Current compiler ABI version is 1.8.0File ABI version is 2.0.0 모듈에 있는 클래스의 Kotlin 버전과 프로젝트의 Kotlin 버전이 불일치하여 발생하는 문제였다.그렇다면 모듈에서 원하는 Kotlin 버전으로 다시 세팅해보자 !!원인 및 해결Kotlin 2.0.0 버전을 사용하기 위해선 gralde 버전도 호환이 되는 8.0 이상의 버전을 사용해야 한다.  bui..
[Android/Error] Android Webview에서 SSL 인증서 Error
·
Android/에러 및 이슈 사항
현상갑자기 회사 웹뷰 앱에서 SSL 인증서 오류 메세지가 간헐적으로 나타나기 시작했다.// 웹클라이언트 세부 설정private class WebViewClientClass extends WebViewClient { // SSL 인증서 무시 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } // 페이지 내에서만 url 이동하게끔 만듬 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.lo..
[Android/Error]Installed Build Tools revision 33.0.2 is corrupted.
·
Android/에러 및 이슈 사항
이슈 사항What went wrong: Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.Installed Build Tools revision 33.0.2 is corrupted. Remove and install again using the SDK Manager. 샘플 프로젝트를 설치했는데 위와 같은 오류가 발생했다. 원인을 찾아보니 이 오류는 설치된 빌드 도구(Build Tools) 버전 33.0.2가 손상되었다는 뜻이었다.해결 방법SDK Manager 열기: 안드로이드 스튜디오에서 Tools > SDK Manager를 클릭SDK Tools 탭 선택: SDK Manager 창이 열리면 SDK Tools 탭으로 ..
[Android/Webview]안드로이드 웹뷰에서 html 코드 가져오기
·
Android/UI-UX 디자인
1. WebView를 초기화하고 웹 페이지 로드 javaCopy code WebView webView = findViewById(R.id.webView); // 웹뷰 레이아웃과 연결 // WebView 설정 webView.getSettings().setJavaScriptEnabled(true); // JavaScript 활성화 webView.setWebViewClient(new WebViewClient()); // WebViewClient 설정 // 웹 페이지 로드 webView.loadUrl("https://example.com"); // 웹 페이지의 URL을 여기에 입력 2. WebViewClient를 사용하여 페이지 로드 완료 후 HTML body 얻기 javaCopy code webView.set..
[Android]안드로이드 13에서 변화된 내용
·
Android
Android 13 기능 및 변경사항 목록 | Android 개발자 | Android Developers Android 13 기능 및 변경사항 목록 | Android 개발자 | Android Developers 이제 Android 14 베타를 사용할 수 있습니다. 지금 사용해 보시고 의견을 알려 주세요. Android 13 기능 및 변경사항 목록 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류 developer.android.com Android 13 대응은 8월 31일까지 완료해야만 한다. 8월 31일까지 Target SDK를 33으로 올리지 않은 앱은 최신 기종의 폰에서는 플레이스토어에 더이상 노출되지 않으며, 다음 업데이트도 불가하다. 그래서 나도 회사에서 부랴부랴 13 대응..
[Android]DeepLink와 Scheme
·
Android/도구 및 라이브러리
2023.02.25 - [Android]Deeplink 안드로이드에서 딥링크 스킴은 인텐트(Intent)를 사용하여 특정 앱의 특정 화면으로 직접 이동할 수 있는 링크입니다. 이를 통해 사용자가 해당 앱을 설치하지 않았더라도 앱의 특정 화면으로 이동하여 더 나은 사용자 경험을 제공할 수 있습니다. 안드로이드 딥링크 스킴은 다음과 같은 형식으로 구성됩니다. scheme://host/path 여기서 scheme은 딥링크 스킴을 사용하는 앱의 이름이며, host는 해당 앱의 도메인 이름 또는 패키지 이름입니다. path는 앱 내에서 이동하고자 하는 특정 화면을 가리킵니다. 예를 들어, 만약 "myapp"이라는 이름을 가진 앱이 "myapp://main/home"이라는 딥링크 스킴을 가진다면, 이 링크를 클릭하..
[Android/Java/Kotlin]ExecutorService
·
Android/네트워킹
Android에서 ExecutorService는 쓰레드 풀을 생성하고 관리하는 데 사용됩니다. ExecutorService는 java.util.concurrent 패키지에 정의되어 있으며, Executor 인터페이스를 상속합니다. ExecutorService는 작업을 처리하는 쓰레드 풀을 생성하고, 작업 처리를 위한 작업 큐를 유지 관리합니다. 새로운 작업이 추가되면 작업 큐에 추가되고, 작업을 처리하기 위해 사용 가능한 쓰레드가 있으면 즉시 처리됩니다. ExecutorService를 사용하면 애플리케이션에서 여러 작업을 동시에 처리할 수 있습니다. 또한, 작업 처리를 위해 새로운 쓰레드를 생성하는 것보다 쓰레드 풀을 사용하여 성능이 향상될 수 있습니다. 아래는 ExecutorService를 사용하여 작..
[Android/Async]RxJava에서 Throttle과 Debounce
·
Android/도구 및 라이브러리
RxJava에서 Throttle과 Debounce는 각각 데이터 스트림에서 지정된 시간 동안의 버퍼링된 이벤트를 처리하는 방법입니다. 이 두 연산자는 모두 데이터 스트림에서 지정된 간격 이상의 이벤트를 발생시키지 않도록 제어하며, 너무 많은 이벤트가 처리되어 성능 문제가 발생하는 것을 방지할 수 있습니다. Throttle은 이벤트를 지정된 시간 동안 버퍼링한 다음, 시간이 지난 후에 가장 최근의 이벤트를 처리합니다. 예를 들어, 1초 동안 Throttle을 적용하면 1초 동안 이벤트를 버퍼링하고, 1초 이후에 발생한 가장 최근의 이벤트를 처리합니다. 이를 통해 일정 시간 동안 반복적으로 발생하는 이벤트를 제한하고, 지정된 시간 동안 가장 최근의 이벤트만 처리할 수 있습니다. Debounce는 이벤트를 버..
[Android/Training] 사진을 외부앱으로 전송하기
·
Android/튜토리얼 및 가이드
1. AndroidManifest.xml 파일에 FileProvider를 등록합니다. ... ... 2. res/xml/ 폴더에 provider_paths.xml 파일을 생성하고 파일 제공자가 제공할 경로를 지정합니다. 3. 소스코드 이 코드는 안드로이드 앱에서 이미지를 캡처한 후, 캐시에 저장하고 해당 이미지 파일을 다른 앱으로 공유하는 기능을 구현하고 있습니다. private void saveToCache(String title, Bitmap bitmap) { File storage = getCacheDir(); try{ File file = new File(storage, title+".jpg"); FileOutputStream fos = new FileOutputStream(file); bitma..
뿌꾸 빵
'Android' 카테고리의 글 목록