반응형

IT/안드로이드+JAVA 178

[Android] Foreground, Background 감지 (ActivityLifecycleCallbacks)

안드로이드에서 Foreground, Background를 감지하는 방법 Foreground, Background를 감지하는 방법은 아래 두 가지 경우로 나눌 수 있습니다. 1. Background/Foreground로 변경됐을 때 감지하는 방법 - Background -> Foreground로 변경된 경우 - Foreground -> Background로 변경된 경우 2. 현재 상태가 Background/Foreground인지 체크하는 방법 - 현재 Background 인지 체크하는 경우 - 현재 Foreground 인지 체크하는 경우 Github 샘플 https://github.com/eunsuu1015/AndroidSample/tree/main/ActivityLifecycleCallbacks GitH..

[AndroidStudio] An exception occurred applying plugin request 오류 해결 방법

Android Studio 업그레이드 후 새로운 프로젝트를 생성하고 빌드하였더니 아래와 같은 오류로 컴파일 실패가 발생했다. 오류 텍스트 Build file 'C:\AndroidStudio\workspace\test\MyApplicationTest2\app\build.gradle' line: 2 An exception occurred applying plugin request [id: 'com.android.application'] > Failed to apply plugin 'com.android.internal.application'. > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8. You can tr..

[Android] Database 파일명 변경하기 (rename db filename)

Database filename 변경하는 방법 renameTo() 사용하여 변경합니다. File dbFile = getDatabasePath("dbfilename"); boolean result = dbFile.renameTo(new File(getDatabasePath("dbfilename").getParent(), "newdbfilename.db")); Log.d("TAG", "" + result); getDatabasePath() 메서드를 찾을 수 없다면 Context에서 조회해보세요. public static void changeDbFileName(Context context) { File dbFile = context.getDatabasePath("dbfilename"); boolean resu..

[Android] 앱 다크 모드 비활성화 방법 (Dark Mode)

안드로이드 앱에서 다크 모드를 비활성화하는 방법 최신 안드로이드 스튜디오에서 프로젝트를 생성하면 다크 모드가 자동으로 지원됩니다. 다크 모드를 지원하지 않으려면 themes.xml 파일을 수정하면 됩니다. themes.xml 파일 위치 AndroidStudio에서 확인 위치 : res\values\themes 파일 탐색기에서 확인 위치 : res\values 또는 res\values-night 수정 방법 themes.xml (night) 파일의 style를 바꿔줍니다. 수정 전 수정 후 수정 후 앱을 빌드해보면 디바이스 다크모드와 상관 없이 Light 모드로 앱이 실행됩니다.

[Android] Handler() deprecated

Handler() deprecated 해결 방법 Deprecated 기존에는 Handler()를 선언할 때 생성자에 아무런 값도 넣지 않았지만 현재는 deprecated 되었다. 그 이유는 핸들러 생성 중에 Lopper를 명시하지 않으면 작업이 자동으로 손실, 충돌 등의 버그가 발생할 수 있다고 한다. 공식 문서 내용 https://developer.android.com/reference/android/os/Handler#Handler() Handler | Android Developers developer.android.com 해결 방법 생성자에 Looper.getMainLopper()를 넣어주면 된다. // Handler handler = new Handler(); // deprecated Handl..

[Android] getDrawable() deprecated

getResources().getDrawable deprecated 해결 방법 Deprecated API 22에서 getDrawable() 이 deprecated 되었다. 공식 문서 내용 https://developer.android.com/reference/android/content/res/Resources#getDrawable(int) Resources | Android Developers developer.android.com 해결 방법 아래와 같이 ContextCompat.getDrawable()을 사용한다. // Drawable drawable = getResources().getDrawable(img);// deprecated Drawable drawable = ContextCompat.ge..

[Android] 앱, 패키지 설치 여부 확인 (App Install Check)

안드로이드에서 디바이스에 앱이 설치되어 잇는지 여부를 조회하는 방법 조회하려면 패키지명을 알아야 한다. 방법 1 String PACKAGE_NAME = "com.kakao.talk"; private boolean isPackageInstalled(String packageName, PackageManager packageManager) { try { packageManager.getPackageInfo(packageName, 0); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } // 사용 방법 PackageManager pm = getPackageManager(); if (isPackageInstalled..

[Android Studio] Installed Build Tools Revision 31.0.0 is corrupted 에러 해결 방법

안드로이드 스튜디오 Installed Build Tools Revision 31.0.0 is corrupted 오류 해결 방법 새 컴퓨터에 안드로이드 스튜디오를 설치하고 빌드를 진행하니 아래와 같은 오류가 발생했다. 오류 Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'. > Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option..

[Android] 내부 저장소 경로 가져오기

각 앱에서만 접근 가능한 내부 저장소 폴더 경로 가져오기 및 파일 목록 조회 내부 저장소 경로는 아래와 같다. data/data/패키지명 ex) data/data/com.test.app 내부 저장소 안에는 files, databases, cache 등의 폴더로 구성되어 있다. Context를 사용하여 내부 저장소에 접근 가능하며 getDir(), getCacheDir(), getDataDir() 등으로 접근 가능하다. 내부 저장소 file 경로 접근 방법 String path = getFilesDir().getAbsolutePath(); // /data/user/0/com.test.app/files 내부 저장소 databases 경로 접근 방법 dbFileName은 실제 파일명을 입력한다. String ..

[Android] Play스토어 앱 업로드 절차

플레이스토어 앱 업로드 방법 사실 요즘은 구글 플레이 콘솔에서 엄청 친절히 알려주고 있기 때문에 업로드가 쉬워졌다. 그래서 이 글도 사실 설명이라기보다는 어떤 절차로 진행되는지를 스크린샷 위주로 정리했다. 시작 전 준비사항 구글 개발자 계정 필요! 개발자 계정이 있어야 앱을 업로드할 수 있는 것은 당연하죠 업로드 순서 1. Google Play Console 진입하여 앱 만들기 선택 play.google.com/console/ 2. 앱 만들기 시작 앱 이름 및 기본 언어 등 선택 유료 또는 무료: 앱을 게시하기 전에는 수정 가능하나, 한 번 앱을 게시한 후에는 무료 앱을 유료로 변경할 수 없음 앱을 만들려면 요청에 있는 개발자 프로그램 정책과 미국 수출 법규는 무조건 체크해야 함 모든 정보 입력 후 하단..

[Android] AES256 암호화 복호화 (2가지 방법)

AES256 암호화하는 방법 키를 직접 지정해서 암호화, 복호화하는 방법 키 스토어에서 생성한 키를 사용해서 암호화, 복호화하는 방법 1번 방법이 일반적으로 많이 사용되고 알려진 방법이다. 방법 1. 키를 직접 지정해서 암호화, 복호화하는 방법 샘플 코드 public static byte[] iv = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }; // 사용자 지정 키로 AES256 암호화 public static String encByKey(String key, String value) throws Exception { return encByKey(key.getBytes()..

[Android] EditText showSoftInput 작동 안할 때 해결 방법

EditText showSoftInput()으로 키보드를 보이게 하려고 할 때, 작동 안 하는 경우가 발생한다. 그런 경우는 EditText에 포커스가 없기 때문에 발생하는 것이다. 해결 방법은 showSoftInput()을 호출하기 전에 EditText에 requestFocus()로 포커스를 주는 방법이다. requestFocus() Android 공식 문서 설명 아래 링크에서 requestFocus 검색 developer.android.com/reference/android/view/View View | Android 개발자 | Android Developers developer.android.com 예제 코드는 아래와 같다. // 초기화 EditText et = (EditText)findViewBy..

[Android Studio] 원격 디버깅, 로그 출력 (adb)

안드로이드 스튜디오에서 컴퓨터와 디바이스 간에 USB 연결선을 연결하지 않고 원격으로 디버깅할 수 있는 방법과 로그를 출력하는 방법을 설명한다. adb를 사용하여 디버깅과 로그 출력 등을 원격으로 진행할 수 있다. 참고로 adb.exe는 Android SDK 폴더 내 platform-tools 폴더에 있다. 필요조건 최초 원격 설정 시에는 USB 연결선으로 컴퓨터와 디바이스 직접 연결 필요 컴퓨터와 디바이스가 동일 네트워크에 접속 준비 - Terminal 사용을 위한 환경변수 설정 이 준비단계는 Android Studio Terminal에서 adb에 간편하게 접근하기 위해 진행하는 것이며, Terminal이 아닌 cmd창에서 adb 폴더에 직접 접근해서 사용할 경우는 진행하지 않아도 된다. 하지만 간편하..

[안드로이드] SHA256 해시 알고리즘 예제

안드로이드 자바 SHA256 해시 알고리즘 예제이다. 결과를 byte[]로 리턴 public static byte[] sha256(String input) { byte[] result = null; try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(input.getBytes()); result = md.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return result; } 결과를 String(Hex)으로 리턴 위 코드에서 StringBuffer 부분만 추가되었다. public static String sha256ToString(String..

[안드로이드] 앱 버전 비교 예제 (버전 표기법, 규칙)

일반적으로 앱 버전을 표기하는 방법과 규칙에 대해 설명한다. 버전 표기법 일반적으로 앱 버전은 1.0.0 식의 구조를 가지고 있으며 점(.)으로 구분된다. . . Major Version: 1부터 시작. 앱 전체 디자인 또는 기능 등이 매우 크게 바뀌는 경우 올림 Miner Version: 0부터 시작. 기능 추가 기능 변경 등의 경우 올림 Build or Maintenance Version: 1부터 시작. 자잘한 버그 수정, 코드 보완 등 미미한 변화가 발생한 경우 올림. 패치 버전이라고도 함 버전 비교 참고사항 버전은 소수가 아닌 각 버전의 숫자다. 예를 들어 1.0.1과 1.0.10 두 버전이 있을 때 아래와 같다. 1.0.1과 1.0.10은 같은 버전이 아니다. 1.0.1은 1번째 메이저 버전, ..

[안드로이드] 음악파일 재생하기 (MediaPlayer)

안드로이드에서 MediaPlayer를 사용해서 프로젝트 리소스 폴더 내 음악파일을 재생하는 예제이다. 지원되는 음악 파일은 mp3, wav 형식 등이고 더 자세한 형식을 아래 링크에서 확인 가능하다. developer.android.com/guide/topics/media/media-formats?authuser=1&hl=ko 1. raw 파일 생성 res 폴더 안에 raw 파일을 생성한다. res 폴더에서 마우스 우클릭 > New > Android Resource Directory 2. Resource type으로 raw 선택 후 OK를 선택한다. raw 폴더가 생성된다. 3. raw 폴더 안에 재생할 음악 파일을 추가한다. 예제에서는 test.mp3 파일을 사용한다. 4. xml 레이아웃에 버튼을 추..

[안드로이드] Find Security Bugs 사용 방법 (소스코드 정적 분석 도구)

안드로이드 소스코드 정적 분석 도구 Find Security Bugs 설치 방법과 사용 방법 소스코드 분석은 정적 분석과 동적 분석으로 나뉜다. 정적 분석: 실제 프로그램(웹, 애플리케이션) 실행 없이 프로그램 소스코드로 분석 진행 동적 분석: 실제 프로그램을 실행하여 분석 진행 해당 글에서는 안드로이드 스튜디오에서 정적 분석을 하기 위한 Find Security Bugs 사용법을 소개한다. Find Securt Bugs: find-sec-bugs.github.io/ Find Security Bugs Sonar Qube with FindBugs plugin (version 3.2+). find-sec-bugs.github.io Find Security Bugs는 Eclipse, IntelliJ/Andro..

[Android] HTTPS 통신 시 사설인증서 사용 방법 (SSLHandshakeException, SSLPeerUnverifiedException)

HTTPS 통신 시 사설인증서 사용하는 방법 사설 인증서의 경우, 공인된 인증기관에서 인증을 받은 것이 아니기 때문에 인증서 검증을 우회하는 방법을 사용해야 한다. 인증서 검증은 우회하지만 보안 통신은 그대로 진행하기 때문에 별다른 문제는 없다. HTTPS 통신을 하며 사설인증서를 사용하고 그냥 통신을 하는 경우 SSLHandshakeException 오류가 발생한다. SSLHandshakeException 오류는 HTTPS 통신 시 서버 인증서와 관련해 발생하며 아래와 같은 이유로 발생할 수 있다. 1. 서버 인증서를 발급한 CA를 알 수 없는 경우 2. CA에서 서버 인증서에 서명한 것이 아니라 자체 서명되어있는 경우 3. 서버 구성에 중간 CA가 누락되어 있는 경우 자세한 설명은 아래 링크를 참고 ..

[안드로이드] 타 앱 호출하기 (Custom URL Scheme)

타 앱을 호출하는 방법 중 Custom URL Scheme 방식으로 호출하는 방법을 설명한다. 타 앱을 호출하는 앱을 Caller 앱, 호출되는 앱을 Callee 앱이라 한다. 1. Caller 앱 Caller 앱은 Callee 앱을 실행하며 데이터를 전달한다. 데이터 전달 받식은 scheme://host?query 형식이다. 테스크를 생성하지 않고 Callee 앱 호출 아래 코드로 앱을 호출하면 Caller 앱 내에서 Callee 앱을 호출한다. (Callee 앱의 테스크는 생성되지 않음) 앱 호출 후 메뉴 버튼을 눌러 앱 목록을 확인하면 Caller 앱만 존재한다. 1 2 3 4 5 6 7 String urlScheme ="callee://data?key1=value1&key2=value2"; Int..

[안드로이드] 앱 내 다크 모드 비활성화

삼성 최신 폰을 보면 다크 모드라고 어두운 테마를 제공한다. 다크 모드로 개발된 앱을 실행시키면 흰색 배경이 검은색 배경으로, 흰색 텍스트가 검은색 텍스트로 변경되는 등의 문제를 발견할 수 있다. 핸드폰에서 다크모드를 설정해두었더라도, 앱에서는 다크 모드를 비활성화할 수 있다. (다크 모드 on/off 상관없이 동일하게 표시함) Application 클래스 onCreate에 아래 코드를 추가하면 된다. 아래 코드를 추가하면 앱의 모든 화면에서 다크 모드가 비활성화된다. 1 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) cs launcher activity에 적용하면, launcher activity가 두 번 실행되는 문제가 ..

반응형