안드로이드
[안드로이드] java.lang.nullpointerexception: inflate(...) must not be null 해결한 방법
오늘 RecyclerView를 개발하면서 생겼던 문제를 공유할려고 한다. java.lang.nullpointerexception: inflate(...) must not be null 라는 오류가 생긴 경우 나는 layout파일에서 루트 태그를 잘못해서 생겼다. 안드로이드 공식 문서에 따르면 태그를 루트로 시작하고 data 요소와 view 루트 요소가 뒤 따른다고 한다.하지만 나 같은 경우는 루트 태그를 LinearLayout으로 지정해서 해당 오류가 생겼다. 따라서, 이러한 오류가 생기는 경우 layout파일에서 루트 태그를 한번 확인해보자. 출처)레이아웃 및 바인딩 수식 | Android Developers 레이아웃 및 바인딩 수식 | Android Developers이 페이지는 Clou..
[안드로이드] 왜 string resource로 관리하나요?
xml에서 text값을 하드코딩한 경우 아래와 같은 제안이 나타난다.이 제안은 string resource로 관리를 제안한다. 왜 이런 제안을 하게 되었는지 궁금해서 찾아봤다. 다국어 지원만약 한국만 지원하는 어플리케이션을 만들다가 해외로 진출 시 그에 맞는 언어를 지원해야한다. 만약 하드코딩을 했을 경우 많은 시간을 소요하면서 수정해야한다. 하지만, string resource로 관리한 경우 상대적으로 시간을 덜 사용해 앱을 수정할 수 있다. 동일한 문자열을 사용한 경우동일한 문자열을 사용해서 앱을 출시했다가 수정이 필요한 경우 여러번 수정을 해야한다. 하지만 string resource로 관리한 경우 한번만 바꾸면 되기 때문에 이점이 있다.
[안드로이드] WorkManager와 Koin
WorkManagerWorkManager는 프로세스의 종료와 관계없이 반드시 수행할 수 있도록 해주는 Android JetPack의 일부이다.제약으로는 10분이내로 처리할 수 있도록 해주어야 한다. 하나의 WorkManager가 과도한 시스템 리소스 사용 방지 및 배터리 소모를 방지하기 위해서이다. WorkManager 사용사례1. 데이터 동기화앱 데이터와 서버 데이터를 동기화를 위해서 사용할 수 있다. 나 같은 경우에는 서버와 앱 데이터를 동기화 시키기 위해서 N시간에 한번 식 데이터를 보낼 수 있도록 WorkManager를 사용했다. WorkManager 데이터 동기화 시 주의해야 할 점은 앱이 재시작 또는 휴대폰이 재부팅을 하더라도 반드시 수행하기 때문에 문제가 생길 수 있다. 글쓴이의 경우 반드시..
[안드로이드] 휴대폰 원격 공유를 개발하면서 생겼던 고민들 정리
안드로이드에서 화면 공유를 개발하면서 생겼던 고민들을 정리할려고 한다.화면 터치에 대한 고민처음에 화면 터치를 할려면 루팅이 필요하다고 생각했다. 하지만, Accessibility Service 클래스를 이용하면 화면 터치를 지원해준다고 한다. 또한 일부 휴대폰에서 ADB 명령을 이용해서 좌표 값을 보내주면 화면 터치를 지원해준다.화면 터치 기능에 대한 것은 아래 포스팅에서 정리를 했다. [안드로이드] 원격 터치 기능 정리원격으로 터치하는 기능을 만들기 위해서 방법들을 찾아봤는데, 앱 내부에서만 가능한 터치이거나, 루팅을 통해서 터치하는 방법이 많았다. 앱 내부 터치, 루팅 권한을 뺀 나머지 기능을 정리할dosomething9390.tistory.com화면 공유에 대한 고민화면 공유를 하기 위해서 Web..
JetPack Compose에서 Compose 멀티 플렛폼으로 전환
compose가 릴리즈되고, 멀티 플렛폼(Android, ios, 윈도우 앱, 홈페이지)서도 fork of compose를 지원해준다고 한다. JetPack Compose에서 fork of compose를 하기 위해서는 아래와 같이 설정을 해주어야 한다. KMP 마이그레이션 및 컴포즈 설정안드로이드에서 kotlin multiplatform와 호환하기 위해서 build.gradle.kt에서 추가/수정을 해야한다.// app 수준 build.gradle.ktplugins { id("com.android.application") // or id("com.android.library") // Replace `kotlin("android")` with: kotlin("multiplat..
Compose 상태 관리
XML은 뷰에서 자동으로 업데이트를 처리해준다. 하지만 Compose는 XML과 다르게 명시적으로 알려주어야한다. 아래 코드로 예로 보자. @Composable private fun HelloContent() { Column(modifier = Modifier.padding(16.dp)) { Text( text = "Hello!", modifier = Modifier.padding(bottom = 8.dp), style = MaterialTheme.typography.bodyMedium ) OutlinedTextField( value = "", onValueChange = { }, label = { Text("Name") } ) } } XML로 만들었다면 텍스트를 입력하면 UI가 변하지만 Compose에..
[안드로이드] Rxjava + retrofit2 연결 도중 취소하기
연결 도중 취소해야하는 경우가 생기면 아래와 같은 코드를 사용하면 된다. private Disposable mDisposable; service.post(mData) .subscribeOn(Schedulers.io) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SingleObserver() { @Override public void onSubscribe(Diposable d) { // disposable을 지정 mDisposable = d; } ... }; // 취소를 해야하는 경우 if (mDisposable != null) mDisposable.dispose();
[안드로이드] 원격 터치 기능 정리
원격으로 터치하는 기능을 만들기 위해서 방법들을 찾아봤는데, 앱 내부에서만 가능한 터치이거나, 루팅을 통해서 터치하는 방법이 많았다. 앱 내부 터치, 루팅 권한을 뺀 나머지 기능을 정리할려고 한다. ADB 방식 시스템 앱의 경우 adb shell 방식을 사용할 수 있다. adb shell input tap x y 명령어를 내리면 그 좌표로 터치를 할 수 있다. Runtime runtime = Runtime.getRuntime(); runtime.exec("input tap " + x + " " + y); 단점으로는 속도가 3초, 5초뒤에 발생한다. (테블릿 성능이 안좋아서 그럴 수도 있다) 그리고 플레이 스토어에 올리지 못한다. 그래서 Accessibility Service를 사용해야한다. Accessi..