안드로이드 fragment에서 작업 시 다음과 같은 오류가 간간히 발생합니다. java.lang.NullPointerException 오류인데요. android.view.view android.app.activity.findviewbyid(int)' on a null object reference onCreateView에서 inflater 하기 전에 findViewById를 호출해서 생기는 문제인 것 같습니다. 100% 발생하는 것이 아닌 간헐적으로 발생하는 문제입니다. 코딩하면서 가장 애매한 순간이 바로 간헐적으로 발생하는 문제 같습니다. 사이클은 onCreateView -> onActivityCreated 순서로 진행하지만 간혹 inflater가 되기 전에 onActivityCreated가 호출되는 ..
안드로이드 스튜디오에서 프로젝트를 만들면 보통 구글 플레이 마켓이나 원스토어에 앱을 등록하게 됩니다. 이때 필요한 절차가 apk파일을 만들어서 배포를 해야 하는데요. apk 파일을 만들기 위해서는 인증서가 필요합니다. 인증서의 파일명은 *.jks로 되어 있습니다. 자 그럼 앱을 배포하기 위해 인증서와 배포용 apk 파일을 만들어 봅시다. 인증서 및 apk 파일 생성 1. 프로젝트를 띄우고 상단 안드로이드 스튜디오 메뉴 Build > Generate Signed Bundle /APK... 를 클릭합니다. 2. 하단 APK를 선택하고 Next를 클릭합니다. 참고로 앱을 배포하는 방식은 두가지인데, 상단에 Android App Bundle로 만들어서 배포하면 앱의 크기를 어느 정도 줄일 수 있어 구글에서 권장..
안드로이드 스튜디오에서 에뮬레이터 실행 중 간혹 발생하는 오류입니다. 안드로이드 SDK Tools에서 에뮬레이터와 관련된 tool이 설치되어 있지 않아서 발생하는데요. 필요한 tool을 업데이트하면 해결됩니다. emulator: process finished with exit code 1 SDK Tools 업데이트 방법 1. 상단 메뉴 Tools > SDK Manager를 실행합니다. 2. Android SDK 메뉴에서 SDK Tools 탭을 누릅니다. 3. 에뮬레이터와 관련된 Tool을 찾아 인스톨해줍니다. 이미 설치되어 있어도 최신 버젼으로 업데이트되지 않으면 발생할 수 있습니다. 아래는 에뮬레이터와 관련된 Tool입니다. Apply를 누르고 install 해주고 에뮬레이터를 실행합니다. Androi..
새로운 거래처와 SDK 연동 진행 중 안드로이드 스튜디오를 업데이트해야 하는 상황이 발생했다. 샘플 프로젝트가 4.0 버전을 쓰고 있었기 때문에 기기로 테스트를 할 수 없었다. 어쩔 수 없이 미루고 미뤄왔던 업데이트를 진행하게 되었다. 오랫동안 스튜디오 3.4 버전을 쓰고 있다가 이제 4.0으로 갈아탈 때가 온 것 같다. 그럼 업데이트하는 방법을 알아보자. 제발 업데이트되고 난 후 프로젝트 에러가 나오지 않기를 바랄 뿐이다. 안드로이드 스튜디오 4.0 업데이트 방법 1. 안드로이드 스튜디오 메뉴 Help > Check for Updates... 를 클릭합니다. 2. 변경되는 사항 확인 후 Update and Restart를 클릭합니다. 582MB나 됩니다. 3. 업데이트 도중 발생하는 문제들을 보여줍니다..
프로젝트 수정하다가 알게 된 색상 코드에 투명도를 적용하는 방법입니다. 보통 이미지 작업할 때 투명 이미지를 요청하고 전달받았는데 이번에는 xml에서 바로 색상 코드로 투명도를 적용해보았습니다. 예를 들어 팝업창을 띄울 경우 가운데 팝업창을 노출하고 뒷배경은 블랙에 투명도를 조절해서 보여주는 경우가 많습니다. 이것을 한번 색상 코드값으로 구현해 보겠습니다. 투명도에 따른 진수값 HEX 색상값은 16진수 rgb 코드로 #000000 (블랙) 형식으로 표기합니다. 여기서 앞 두 자리를 투명도에 따라 변경해주면 투명한 색상 코드를 얻을 수 있습니다. 아래는 투명도 비율과 진수 값입니다. 저는 블랙 색상 코드(#000000)에 투명도 70% (#B3000000)를 적용해서 종료 팝업을 구현했습니다. 아래 이미지..
작년 8월부터 구글에서 앱을 업데이트하기 위해서는 targetSdkVersion을 28 이상으로 해야 심사가 통과됩니다. 이에 발맞춰 기존에 쓰던 구글 라이브러리도 더 이상 업데이트되지 않는다고 합니다. 그래서 androidx를 사용하라고 권고하고 있는데요. 저도 안드로이드 x로 마이그레이션 하던 도중 기존에 있던 외부 라이브러리가 오류가 나는 바람에 미루고 있다가 이번에 다시 마이그레이션을 시도했습니다. 안드로이드 x 마이그레이션 하는 방법 1. 프로젝트 메뉴의 Refactor > Migrate to AndroidX를 클릭합니다. 2. 나오는 팝업창에서 Migrate를 클릭합니다. 상단에는 Zip 파일로 백업을 하는지 체크 유무를 선택할 수 있습니다. 나중에 다시 되돌릴 경우도 생길 수 있으니 백업하는..
외부 SDK 연동 중 다음과 같은 오류가 발생했다. 라이브러리의 최소 sdk 버젼이 17이고 프로젝트 최소 sdk 버젼이 15여서 충돌하는 문제였다. Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 17 declared in library [라이브러리 네임] C:\Users\user\.gradle\caches\transforms-2\files-2.1\5d1b5240492eda835ebb0b619396d4fb\AndroidManifest.xml as the library might be using APIs not available in 15 Suggestion: use a compatible library w..
액티비티 하단에 광고를 넣기 위해 작업 중 스크롤 뷰가 있는 레이아웃에서는 광고가 노출이 안 되는 현상이 발견되었다. 스크롤 뷰가 전체 레이아웃을 잡고 있어서 가려지던지 화면 아래에 노출이 되어서 보이지 않는 현상 같았다. 스크롤뷰 안에 넣게 되면 스크롤을 하단까지 해야 보이게 되므로 원하는 레이아웃이 아니었다. 스크롤 뷰에 영향을 받지 않고 무조건 하단에 광고를 넣기 위해서는 xml의 스크롤 뷰 속성에 다음을 추가하면 된다. 추가된 속성 android:layout_weight="1" layout_weight를 1로 주면 하단 LinearLayout뷰와 스크롤뷰가 영역을 1:1 비율로 맞춰지는 것이다. 전체 xml 소스
액티비티 시작 시 키보드 올리는 2가지 방법입니다. 액티비티에서 소스 코드 입력하는 방법과 매니페스트에서 설정하는 방법이 있습니다. 1. 액티비티에서 소스 추가하는 방법 private EditText ReplyEdit; ReplyEdit = (EditText)findViewById(R.id.reply_write_edit); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(ReplyEdit, 0); ReplyEdit는 EditText 변수명입니다. 단, 이렇게 하는 경우에도 키보드가 올라오지 않을 수 있습니다. 이유는 ReplyEdit의 커서가 포커싱이 되..
얼마 전 겪었던 구글 플레이 마켓에 앱이 내려갔던 상황에 대해서 과정 및 대처방법을 알려드립니다. 처음 당하게 되면 당황하고 불안하고 초조하고 그럴 텐데요. 만약 저희와 같은 경우라면 당황하지 말고 이렇게 해결하세요. 아침에 같이 일하는 동료로부터 연락이 왔습니다. 앱이 구글 플레이 마켓에 노출이 안된다는 것이었고 구글 플레이 콘솔에서는 어떤 것도 할 수 없게 일시중지라는 문구와 함께 모든 버튼이 비활성화되었습니다. 그리고 개발자 계정 이메일로 다음과 같은 메세지의 메일을 받았습니다. 앱이 내려간 후 받은 이메일 내용 Issue: Violation of Device and Network Abuse policy We don’t allow apps that interfere with, disrupt, dam..
안드로이드 스튜디오 3.4.1로 업데이트 후 빌드를 할려고 하는데 RUN 버튼을 눌러도 아무 반응이 없네요. 밑에 오류창을 확인해 보니 Unable to locate adb 오류가 나서 찾아본 결과 안드로이드 platform-tools 폴더에 adb.exe 파일이 없어서 생기는 오류입니다. 제 폴더 구조는 C:\Users\user\AppData\Local\Android\Sdk\platform-tools 이렇게 되어있는데 폴더 찾아서 adb.exe 파일을 넣어주면 됩니다. adb.exe 파일 다운로드 주소입니다. https://developer.android.com/studio/releases/platform-tools#download SDK Platform Tools release notes | Andr..
스크롤뷰 내부 특정뷰로 포커스되는 현상 막기 메뉴 시작시 sdk를 삽입한 뷰로 스크롤뷰가 포커싱되는 현상이 발견되었다.상단뷰를 먼저 보여줘야 하는데 중간에서 부터 보여주니 사용자들이 당황할 수 있다.sdk를 보니 딱히 설정값을 지정해 주는 메소드도 보이지 않았다. 구글링을 했다. 문제는 스크롤뷰 자식뷰에 내부적으로 포커싱되게 처리를 해서 그런것 같다.포커싱을 막기위해서는 xml 파일의 스크롤뷰의 LinearLayout에 속성을 추가하면 된다. android:descendantFocusability="blocksDescendants" 대충 영어를 보아하니 포커싱을 block 한다는 것.
Android AsyncTask Android AsynkTask 사용법입니다. 저는 통신할 때 위주로 사용합니다. 굉장히 유용하고 깔끔하게 처리가 되기 때문인데요. 시작, 실행, 종료 부분이 명확하게 구분이 되어 있어 사용하기 편리합니다.예제는 아래 소스코드와 같습니다. 네트워크 통신을 예로 설명하자면 onPreExecute : 로딩바 실행doInBackground : 통신 메소드 실행 (url 호출 후 파싱)onPostExecute : 통신 메소드 완료 후 파싱데이터 처리, 로딩바 제거 class pageSerch extends AsyncTask { @Override protected void onPreExecute(){ probar.setVisibility(View.VISIBLE); }@Overrid..
Android 다이얼로그 띄우는 방법입니다. AlertDialog.Builder builder = new AlertDialog.Builder(test.this); builder.setTitle("message") // title .setMessage("nicknameText is null") // message .setCancelable(false) .setPositiveButton("ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton){ //확인버튼 클릭 } }) .setNegativeButton("cancel", new DialogInterface.OnClickLis..
Android SharedPreferences 안드로이드에서 제공하는 SharedPreferences에 대해서 알아봅니다.iOS에서 NSUserDefault와 같은 개념으로 보시면 됩니다. 간단하게 앱내에 저장하고 불러오는 용도로 쓰이는데 로그인 후 아이디, 비밀번호 저장등에 사용하면 좋을 것 같네요. 아래는 디바이스 정보를 불러와 SharedPreferences를 이용하여 저장하는 코드입니다. //디바이스 아이디 및 폰번호 가져오기 TelephonyManager telephony = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String my_phone_num = telephony.getLine1Number(); //폰번호 Strin..