Android 81

구글 설문지 (Google Forms) 완료시 데이터 외부 API로 전송하기

구글 설문지를 완료했을때 보상을 주거나, 추가 정보를 처리해야 할 일이 있을 수 있다. 그래서 구글 설문지를 완료하면 외부 API로 데이터를 보내는 방법을 정리해보려한다. OAuth Scope 추가하기 먼저 더보기 메뉴에서 [스크립트 편집기]로 진입한다. 외부 API로 요청을 보내기 위해서 아래 scope에 대한 권한이 필요한데, 이것을 정의하려면 appsscript.json을 편집해야한다. "https://www.googleapis.com/auth/script.external_request" 프로젝트 설정 > 편집기에 [appsscript.json 매니페스트 파일 표시] 체크를 하면 편집기에서 appsscript.json이 생긴 것을 볼 수 있을 것이다. { "timeZone": "Asia/Seoul"..

[안드로이드] Push할 때마다 Auto-Formatting적용하기 : GitHook으로 코딩 스타일 맞추기

작업환경을 타지 않는 방법의 필요성 코딩 스타일의 일관성은 가독성, 협업에서 중요한 포인트이지만 개인적인 코딩 습관들, 빡빡한 일정들 등으로 인해 지키기 쉽지 않다. IDE에서 저장시에 코드 포맷팅을 해주는 기능들이 있기는 하지만, 작업환경마다 세팅해줘야한다는 단점이 있다. 따라서 어떤 환경에서 작업하더라도 코딩 스타일을 지켜줄 수 있는 방법이 필요했다. (이 원문을 응용하여 작성된 글입니다.) GitHook + ktlint 그것은 바로 GitHook을 이용하는 방법이다. git init을 하면 .git/hook 폴더에는 여러 GitHook 샘플들이 생긴다. 이 경로 안에 내가 Hook을 발생시키기 원하는 시점에 대한 파일을 “확장자 없이” 넣어주면 간단히 Hook 세팅을 할 수 있다. 샘플 파일들은 ...

[안드로이드] ExoPlayer 깜빡거리거나 검은 화면(Black screen)이 뜰 때

문제발생 Epoxy로 무한 반복되는 배너 캐러셀에 동영상을 적용시키는 중에, 간혹 동영상이 재생될때 검은 화면만뜨고 재생이 안되거나 깜빡이는 문제가 있었다. *하나의 ExoPlayer를 RecyclerView.Adapter에서 재활용해가면서 쓰는 사례다. 정신차리고 setPlayer() Document를 자세히 읽어보니... Player를 다른 View에 붙일때 switchTargetView()를 쓰는걸 추천한다고 되어있다. 하지만 setPlayer()를 직접 쓰고자 할 경우 이전 View에서 Player를 분리하기 위해 setPlayer(null)을 호출하기 이전에 새로운 View에 Player를 연결시켜야 한다. *switchTargetView를 직접 써보려고 했으나, 지원하지 않는 메소드였다. 해결..

[안드로이드] java.lang.IllegalStateException: An instance of OnFlingListener already set 해결

문제 발생 @ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT) internal class PagerSnapHelperCarousel @JvmOverloads constructor( context: Context ) : Carousel(context) { init { if (onFlingListener == null) { PagerSnapHelper().attachToRecyclerView(this) } } } Epoxy의 Custom Carousel로 SnapHelper를 붙이는 도중 OnFlingListener가 이미 등록되어있다는 오류가 발생했다. 당연하게도 이유는 RecyclerVIew에 OnFlingListener가 이미 등록되어 있어..

HTTP ETag에 대해 알아보자

ETag란? ETag란 EntityTag의 줄임말로, 웹 캐시 유효성 검증에 사용된다. 리소스의 특정 버전에대한 고유값이 ETag의 값이되고, 리소스의 내용이 업데이트되면 ETag도 바뀐다. 클라이언트에서 캐싱하고 있는 버전과 서버에서 가지고 있는 버전이 동일하다면 서버는 내용없이 304 Not Modified 라는 상태코드로만 응답을 내려주어 response body에 대한 트래픽을 아낄 수 있다. ETag 작동방식 먼저 HTTP Request를 날려보자. 서버는 ETag와 함께 응답 (상태코드 200)을 내려줄 것이다. 이 요청에 대한 응답의 사이즈는 43.9KB였다. ETag의 검사기 종류에는 약한(Weak)과 강한(Strong)검사가 있는데, 약한 검사를 하는 ETag는 W/로 시작하고, 강한 검..

[CI/CD] Firebase Test Labs UI Test 자동화하기

CI/CD Tool로 Bitrise (CLI)를 사용하고 있는데, Workflow에 UI Test 단계를 추가해보려고한다. gn_test Workflow를 살펴보면, git pull 로 프로젝트를 땡겨오고, 이전에 만든 test용 apk를 제거한다. UI Test용 빌드를 생성하고, Firebase Test Lab으로 기기에 테스트 한다. gn_test: steps: - script@1: inputs: - content: "bash $ROOT/scripts/gitpull.sh" - script@1: inputs: - content: "bash $ROOT/scripts/delete_test_apk.sh" - android-build-for-ui-testing@0: inputs: - project_locat..

[해결방법] UnityPlayerActivity.java uses or overrides a deprecated API

UnityPlayerActivity.java uses or overrides a deprecated API Unity 안드로이드 aar파일을 추가/변경시 UnityPlayerActivity.java uses or overrides a deprecated API 오류가 뜨는 경우가 있다. Assets/Plugins 내의 Android 폴더를 삭제 후 빌드하면 제대로 작동한다. 만약에 이렇게 해도 안된다! 그 경우엔, 원래는 aar C:\Program Files\Unity\Hub\Editor\2021.3.10f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes 내의 classes.jar 를 사용하고 있었다면, mono\R..

[안드로이드] 예제로 보는 NavigationComponent

Navigation Component란? 기존의 안드로이드에서는 여러 단계의 Fragment 진행을 추적하고, 다루기 어려웠다. Jetpack의 Naviagtion Component는 이러한 문제를 개선하기 위해서 등장했는데, iOS의 스토리보드처럼 여러 화면 이동을 그래프(Graph)로 시각화하여 보여주고 NavController를 이용해 한 곳에서 전환을 관리할 수 있도록 도와준다. “오~좋은건 알겠는데, 다음 프로젝트에 써야지^^”라는 생각이 스친다! 당장 레거시 코드에서 어떻게 활용하면 좋을지 막막할 것이다. (내가 그랬기때문) 그래서 회원가입을 예로 들어서, 현재 진행중인 프로젝트에 Navigation Component를 사용하는 방법을 포스팅해보겠다. # 간단한 개념 3가지 NavGraph: ..

[안드로이드] HiltWorker 오류 Could not create Worker 해결방법

HiltWorker로 Worker에 의존성 주입받기 우선 필요한 dependency는 다음과 같다. Coroutine은 예시에서 CoroutineWorker를 만들 것이기때문에 넣어주었다. implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1' implementation "com.google.dagger:hilt-android:2.38.1" kapt "com.google.dagger:hilt-android-compiler:2.38.1" implementation("androidx.hilt:hilt-work:1...

[안드로이드] WorkManager Worker 디버깅하기

AndroidStudio의 App Inspector > Background Task Inspector에서 현재 돌아가고있는 Background Task 목록과 상태를 확인할 수 있다. 하지만 사진처럼 Status가 Failed가 떴을때는 정확한 원인을 진단하기가 힘든데, 이때 Worker에 생긴일을 디버깅하는 방법을 소개한다. adb logcat | grep -e "WM-WorkerWrapper" 터미널에서 위 명령어를 사용하면 WorkerManager 관련 로그들이 필터링된다. adb가 낯설다면 이 포스트(adb 개념과 사용방법)를 참조하면된다. 아니면 AndroidStudio내 logcat에서 로그 수준을 Info로 낮추고 찾아도된다! 09-13 16:54:01.737 14800 14838 I WM-..