안드로이드 앱 개발중 scrollview로 전체를 감싸고 안에 recyclerview로 보여줄 때가 있습니다. 여기서 문제가 발생할 수 있는데 스크롤뷰 안에 있는 recyclerview가 개별적으로 스크롤이 되는 현상입니다. 이 부분을 해결해 줄 수 있는 소스가 있습니다. 아래 소스처럼 NestedScrollView를 사용하면 해결할 수 있습니다. fillViewport ="true" 로 설정해주세요.
Host name may not be empty 프로젝트에서 외부 SDK 연동 중 다음과 같은 오류가 발생했습니다. 아마존 서버 저장소(s3)를 사용하는 경우인데 처음 보는 오류라 당황했네요. 문제 발생 상황 maven { url 's3://maven.test.co.kr/release' credentials(AwsCredentials) { accessKey "XXXXXXXXXX" secretKey "XXXXXXXXXX" } } build.gradle(프로젝트 단위)에 maven 저장소 적용 후 sync 하자마자 오류가 발생했습니다. 해결 방법 https://stackoverflow.com/questions/62128321/host-name-may-not-be-empty Host name may not b..
카카오톡 로그인을 연동하기 위해 필요한 디버그, 릴리즈 키 해쉬 값 구하는 방법입니다. 보통 터미널을 이용해 구할 수 있지만 openssl을 설치해야 하는 번거로움이 있어 카카오 API를 이용해서 빠르게 값을 구해보겠습니다. 디버그 키 해쉬 import com.kakao.sdk.common.util.Utility; Log.e("keyhash",""+Utility.INSTANCE.getKeyHash(this)); 카카오 SDK 적용 후 Utilty 적용 후 getKetHash를 통해 키 해쉬 값을 쉽게 구할 수 있습니다. 문제는 릴리즈 키 해쉬인데요. 일단 디버그 모드가 아닌 릴리즈 모드로 컴파일을 해야 하는데 몇 가지 해줘야 하는 부분이 있습니다. 간혹 디버깅할 때는 문제가 없는데 릴리즈 모드에서 오류가..
This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled 프로젝트 컴파일 시 위와 같은 오류가 나온다면 AndroidX를 사용하겠다고 선언해줘야합니다. 해결방법 gradle.properties 파일에 다음 2줄을 입력하세요. android.useAndroidX=true android.enableJetifier=true
얼마 전 안드로이드 스튜디오 프로젝트를 업로드하는데 구글 플레이 콘솔 메시지 창에 다음과 같은 경고가 발생했습니다. com.google.android.gms:play-services-safetynet SDK 개발자의 보고 내용은 다음과 같습니다. SafetyNet Attestation API는 중단되고 새로운 Play Integrity API로 대체됩니다. 사용자 중단을 방지하려면 가능한 한 빨리 마이그레이션을 시작하십시오. Play Integrity API에는 Google Play 라이선스 및 더 나은 오류 메시지와 같이 SafetyNet Attestation이 제공하는 모든 무결성 신호가 포함됩니다. https://developer.android.com/training/safetynet/depreca..
ScrollView can host only one direct child 스크롤뷰는 오직 1개의 자식 뷰를 가질 수 있어 해당 오류는 자식 뷰가 1개 이상일 때 발생하는 오류입니다. 저의 경우 스크롤뷰 안에 두개의 gridview를 넣고자 했을 때 발생하였는데요. 해결 방법을 알아보겠습니다. 두개의 그리드뷰를 LinearLayout으로 감싸면 하나의 자식뷰로 보기 때문에 해결할 수 있습니다.
이 App Bundle 유형과 연결된 가독화 파일이 없습니다. 난독화된 코드(R8/proguard)를 사용하는 경우 가독화 파일을 업로드하면 비정상 종료 및 ANR을 더 쉽게 분석하고 디버그할 수 있습니다. R8/proguard를 사용하면 앱 크기를 줄이는 데 도움이 됩니다. 안드로이드 앱을 배포하는데 위와같은 경고 문구가 발생했습니다. R8/proguard를 설정해야 난독화된 코드로 인해 보안상 취약한 부분을 해소할 수 있습니다. 위 경고 메시지를 해결하기 위해 build.gradle(모듈)에 다음과 같은 코드를 적용합니다. buildTypes { debug { minifyEnabled true } release { minifyEnabled true } } debug 모드와 release 모드일 때 m..
여러 앱 플레이어로 테스트할 일이 생겨서 블루스택으로 디버깅해봤습니다. 녹스와 마찬가지로 어렵지 않게 테스트할 수 있습니다. 먼저 블루스택을 다운로드해야겠죠? 아래 링크에서 다운받으세요. 블루스택 다운로드 BlueStacks – PC 및 Mac 용 가장 빠른 Android 에뮬레이터 | 100 % 안전하게 무료로 이용 세계에서 가장 인기 있고 안전한 Windows 및 Mac 용 Android 에뮬레이터 BlueStacks로 가장 빠른 게임 성능을 무료로 이용하세요. 5억 명 이상의 게이머가 이미 플레이하고 있습니다. www.bluestacks.com 블루스택 설정 블루스택을 실행하고 우측 설정 메뉴를 클릭합니다. 아래 2개 설정만 해주시면 됩니다. 1. 루트 권한 사용 좌측 메뉴 디바이스 설정 > 루트 ..
이번 포스팅은 build.gradle 에 buildFeatures() 메서드가 적용되지 않아 발생하는 오류 해결 방법을 알아봅니다. 아래는 오류 메시지 full 정보입니다. buildFeatures() 메서드를 사용할 수 없다는 뜻이네요. A problem occurred evaluating project ':app'. > Could not find method buildFeatures() for arguments [build_4s5uejirfka3u7xv7mntn7jpc$_run_closure1$_closure6@3c512f3e] on extension 'android' of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension. 원인 발..
이번 포스팅은 안드로이드 스튜디오로 제작한 프로젝트의 패키지명 변경하는 방법에 대해서 포스팅합니다. 앱을 제작하고 배포할 때 보통 구글 플레이 마켓에 등록을 하는데요. 저는 ONE 스토어에도 배포를 하고 있기 때문에 패키지명을 분리하여 업데이트하고 있습니다. 그럼 패키지명을 변경해보도록 하겠습니다. 패키지명 변경하는 방법 먼저 안드로이드 스튜디오 상단 톱니바퀴 버튼을 클릭하고 Compact Middle Package 가 체크되어 있는 부분을 해제합니다. 그럼 src > jave 폴더의 패키지명 폴더가 하나로 묶여 있는 부분이 분리되어 보입니다. 예를 들어 co.kr.app.app로 되어 있는 부분이 co > kr > app > app 이런 식으로 분리되는 것이죠. 여기서 패키지명을 변경하고 싶은 폴더에서..
AndroidManifest.xml 파일에 설정되어 있는 android:screenOrientation="portrait"에 빌드가 안되는 것도 아니고 앱도 정상적으로 돌아가니 그냥 놔두고 있다가 신경 쓰여서 날 잡고 수정해 보기로 했습니다. 마우스를 갖다 대니 다음과 같은 문구가 뜹니다. 네 제목에도 쓰여있는 것 처럼 unspecified(기본) 나 fullSensor(방향감지)를 사용하라고 권고하고 있네요. 제 앱은 세로 모드인데 말이죠. 실제로 변경하면 경고 밑줄이 없어지긴 합니다. 하지만 위 2가지 모드를 사용하면 가로모드까지 허용되어 버리죠. 경고문을 보니 Chrome과 연관되어 있는 것 같은데 해결 해보니 맞았습니다. 해결 방법 안드로이드 스튜디오 File > Setiings 을 클릭합니다. ..
구글로부터 업데이트 리젝 메일을 받았습니다. 잘 업데이트되고 있었는데 갑자기 메일이 왔네요. 2019년부터 권고했던 사항 같은데 왜 이제 잡는지 모르겠습니다. 문제의 메일을 보니 Cross-app Scriting 이라는 타이틀이 보입니다. 간단하게 말하면 Webview를 사용하고 있는 Activity가 취약점이 발견되어 다른 앱에서 해당 Activity를 공격할 수 있으니 수정하라고 합니다. 그래서 결론은 다른앱에서 해당 Activity를 켤 수 없게 만들면 됩니다. 바로 아래 코드를 AndroidManifest.xml의 Webview를 사용하고 있는 Activity를 찾아 모두 적용해 주면 됩니다. android:exported="false" 바로 이런식으로 말이죠. 약 5개 Activity에서 웹뷰를..
Error running 'app': Default Activity not found 프로젝트 빌드를 하던 중 발생한 오류입니다. 시작 시 설정되어 있는 액티비티를 찾을 수 없다고 하네요. manifest 파일을 수정하다 보니 갑자기 생긴 오류였습니다. 해결방법은 간단합니다. 해당 오류가 나게되면 app에 빨간색 X 표시가 나고 있을 텐데요. Edit Configurations를 클릭합니다. Launch Options 의 Launch를 Specified Activity로 변경하고 아래 Activity에 본인 프로젝트의 시작 액티비티를 입력해주시면 됩니다. 보통 패키지명.mainactivity 형식으로 되어있을 겁니다. 시작 액티비티 확인 방법 시작 액티비티는 AndroidManifest.xml 파일을 보..
해마다 안드로이드 스튜디오에서 apk 파일 업로드시 api 수준을 한단계씩 올리고 있습니다. 작년에는 28이었는데 올해는 29로 한단계 상승해서 높이도록 권장하고 있네요. 2020년 8월부터는 신규앱에 적용해야 하고 기존에 있던 앱을 업데이트하는 경우에는 11월부터 타겟팅해야합니다. 단, 29로 변경했을 시 발생하는 오류 또한 대응을 해야하는데요. 예를 들어 작년에 28로 변경했을 때 안드로이드8.0 기기에서 회전처리가 되어 있는 부분에서 문제가 발생했었습니다. 따라서 강제 타겟팅을 해야하는 이번과 같은 경우는 웬만하면 모든 기기를 테스트해서 문제가 없는지 확인해야합니다. api 수준 29로 변경하는 방법 먼저 안드로이드 스튜디오 상단 메뉴 Tools > SDK Manager로 이동합니다. SDK Pla..
프로젝트 컴파일 시 아래와 같은 오류메세지가 나면서 빌드가 되지 않을때가 있습니다. 저 같은 경우는 외부 SDK를 연동하는 과정에서 로드하는 라이브러리가 많다보니 메모리가 충족되지 않아 발생하는 문제였습니다. expiring daemon because jvm heap space is exhausted Execution failed for task ':app:mergeExtDexDebug' 해결방법 1 android { ... defaultConfig { multiDexEnabled true ... } } 첫 번째로 해야할 일은 build.gradle에 multiDexEnabled true로 설정해 줍니다. packagingOptions { exclude 'META-INF/NOTICE' exclude 'M..
개발을 하다 보면 한 화면에서 여러 개의 액티비티를 불러와서 쓰는 경우가 있습니다. 각 액티비티마다 처리해야 하는 명령이 다를 경우 분기해서 처리를 해줘야 하는데 이때 현재 띄워져 있는 Activity를 알아내는 방법입니다. ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List info = manager.getRunningTasks(1); ComponentName componentName= info.get(0).topActivity; String ActivityName = componentName.getShortClassName().substring(1); ActivityManager를 사용해..
카카오톡 친구 목록 api 연동 중에 아래와 같은 오류가 발생 시 해결방법입니다. 카카오 개발자 사이트에 등록한 앱에 팀 멤버가 등록이 되어 있지 않다는 오류인데요. 친구 목록 api를 테스트하기 위해서는 팀 멤버 등록이 필수입니다. 정상적으로 테스트가 완료되면 친구 목록 api 검수 신청을 해야 실제 배포하는 앱에서도 친구 목록을 불러올 수 있습니다. there are no assigned team members in your app 팀 멤버 추가하는 방법 1. 카카오톡 개발자 사이트 접속 후 내 애플리케이션 > 앱 설정 > 팀 관리에 가면 팀원 초대 버튼이 있습니다. 본인 이외에 테스트 친구 목록에 불러올 멤버를 초대하면 정상적으로 친구 목록 api를 테스트할 수 있습니다. 팀원은 계정 이메일로 가서..
안드로이드 앱 개발 시 firebase를 이용해서 구글 로그인을 구현하는 분들이 많으실 텐데요. firebase에서 SHA 인증서를 등록하기 위해 SHA 인증서 확인하는 방법에 대해서 포스팅합니다. SHA는 개발용과 배포용 두 가지를 등록해야 합니다. 참고로 윈도우에서 cmd창 (명령 프롬프트)을 이용해서 확인하는 방법입니다. SHA 개발용 1. 검색창에 cmd를 입력하고 명령 프롬프트를 실행합니다. 2. debug.keystore가 있는 .android 폴더로 이동해야 합니다. cd .android를 입력합니다. 3. keytool -list -v -keystore debug.keystore 를 입력합니다. 패스워드는 없으니 엔터를 눌러줍니다. 만약 keytool 명령어 오류가 생기면 아래 링크를 참고..
firebase를 이용해서 구글 로그인을 구현하기 위해서는 SHA 인증서를 등록하는 단계가 있습니다. SHA 인증서를 확인하기 위해 cmd창으로 터미널을 열고 keytool 명령어를 쳤는데 다음과 같은 오류 메시지가 나왔습니다. 'keytool'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 이 오류를 해결하기 위해서는 아래 2가지를 해줘야 합니다. 1. jdk 설치 2. 환경변수 추가 jdk가 설치 되지 않았다면 아래 링크로 가서 다운로드하고 설치해 주세요. https://www.oracle.com/java/technologies/javase-downloads.html 환경변수 추가하는 방법 1. 윈도우 창 하단 검색창에 "환경"이라고 입력하고 시스템 환경 변수 ..