본문 바로가기

안드로이드73

안드로이드12 개발 앱 실행 "앱이 설치되지 않았습니다." 표시되는 현상 안드로이드 스튜디오에서 오랜만에 프로젝트를 생성했습니다. 기존의 앱은 안드로이드 11 이하의 앱들이라 별문제 없이 개발을 하고 있습니다. 안드로이드12로 개발시 Activity에 필수 속성으로 exported가 추가되어 속성값을 false로 지정했습니다. 그리고 안드로이드 스튜디오에서 앱을 설치 및 실행을 했는데, 앱이 실행되지 않았습니다. 그래서 설치된 개발 앱을 탭하니 아래와 같이 "앱이 설치되지 않았습니다."라고 메세지가 나왔습니다. 해결 방법은 아래와 같이 LAUNCHER Activity의 exported="true"를 지정하면 안드로이드 스튜디오에서 앱을 실행하면 정상적으로 구동됩니다. 2022. 7. 14.
앱이 Google Play 정책을 준수하지 않음(앱삭제) 오늘 새벽 3시에 메일이 도착했습니다. 아래와 같이 Google Play 정책 위반으로 플레이스토어의 앱이 삭제되었다네요. 제가 경험한 Google Play 정책 위반으로 앱이 삭제 된 경우 HTTP 통신 시 Header 값을 위변조 했을 경우 Activity에서 실행한 전면광고가 종료되기 전에 Activity가 종료되는 경우 Main Activity에 어떠한 정보(ListView 등..)도 표시 되지 않는 경우 Google Play 정책 위반 사항을 처리했다면, Google Play Console에서 검토를 요청하는 방법은 아래와 같습니다. Google Play Console에서 정책 위반 확인하기 1. Google Play Console에서 해당 앱으로 이동합니다. 2. 외쪽 메뉴 중에 정책 상태를 .. 2022. 3. 16.
Android12에서 INSTALL_FAILED_UPDATE_INCOMPATIBLE 오류 안드로이드 스튜디오에서 안드로이드12에 디버깅 앱을 설치 할 때 아래의 오류가 표시되며 앱이 설치가 안되었습니다. Installation did not succeed. The application could not be installed: INSTALL_FAILED_UPDATE_INCOMPATIBLE 구글링해서 찾아보니 타켓SDK가 안드로이드12(API 31)인 경우 AndroidManifest.xml 내의 activity, service, receiver에 android:exported를 필수로 입력해야 위의 오류 없이 설치가 가능합니다. android:exported는 다른 앱에서 개발하는 앱에 접근 할 수 있도록 설정하는 속성으로 아래의 링크에서 상세 내용을 확인하세요. https://develop.. 2022. 3. 12.
안드로이드 스튜디어 - Java 소스를 Kotlin 소스로 변환하기(Convert) 안드로이드에서 개발한 Java 소스를 Kotlin 소스로 변환하는 기능을 안드로이드 스튜디오에서 제공하고 있습니다. 간단하게 소스를 선택하고 마우스 오른쪽을 클릭하여 팝업에서 "Convert Java File to Kotlin File"을 클릭하면 Java 소스가 Kotlin 소스로 쉽게 변환됩니다. Java 소스 Kotlin으로 변환 된 소스 2021. 10. 1.
안드로이드 코틀린 - google play-services를 이용한 위치정보 얻기 안드로이드의 기본 라이브러리로 위치정보를 얻기 위해서는 상당히 많은 작업이 필요한다. google의 play-services의 라이브러리를 이용하면 조금(?)은 쉽게 위치정보를 얻을 수 있습니다. 위치 정보를 얻기 위해서는 권한(Permission)과 권한 요청을 해야 하는데 아래의 포스트를 참고하세요. https://docko.tistory.com/739 안드로이드 코틀린 - 권한(Permission) 요청 안드로이드에서 위치, 저장소 읽기/쓰기 등을 하기 위해서는 권한이 필요합니다. 앱에서 사용자에게 권한을 요청하는 방법입니다. 1. AndroidManifast.xml에 필요한 권한을 추가합니다. 위치 권한(ACC docko.tistory.com 1. 모듈(app) gradle에 play-servic.. 2021. 9. 27.
안드로이드 코틀린 - 권한(Permission) 요청 안드로이드에서 위치, 저장소 읽기/쓰기 등을 하기 위해서는 권한이 필요합니다. 앱에서 사용자에게 권한을 요청하는 방법입니다. 1. AndroidManifast.xml에 필요한 권한을 추가합니다. 위치 권한(ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION)을 추가했습니다. ... 2. 앱이 실행하면 권한이 부여되지 않으면 요청합니다. class MainActivity : AppCompatActivity() { val MY_PERMISSION_ACCESS_ALL = 100 ... override fun onCreate(savedInstanceState: Bundle?) { ... if(ActivityCompat.checkSelfPermission(this, android.Ma.. 2021. 9. 26.
안드로이드 코틀린 - 뷰바인딩(View Binding) 안드로이드 스튜디오 4.0이상에서의 뷰바인딩하는 방법입니다. findViewById를 사용해서 뷰(View) 객체를 얻는 것보다 상당히 간편합니다. 1. 모듈 gradle에 뷰바인딩 클래스를 생성하도록 설정합니다. android { ... buildFeatures{ viewBinding true } ... } 2. 뷰바인딩 클래스 이름 규칙은 아래와 같이 레이아웃 XML 파일의 이름에 따라 결정됩니다. 레이아웃 XML 뷰바인팅 클래스명 activity_main.xml ActivityMainBinding item_list.xml ItemListBinding 3. 뷰바인딩 객체 사용하기 (1) 멤버 변수로 뷰바인딩 변수를 생성한다. 뷰바인딩 변수는 onCreate 에서 초기화를 하기 위해서 lateinit로.. 2021. 9. 25.
안드로이드 스튜디오 - 자동 임포트(Auto Import) 설정 안드로이드 스튜디오에서 코딩 시 자동으로 임포트(Auto Import)를 설정하는 방법입니다. 임포트를 자동으로 해주므로 코딩 시 귀찮음이 줄어듭니다. 1. File > Settings..메뉴를 클릭합니다. 2. Settings 화면에서 Editor > General > Auto Import를 선택하고, Java 또는 Kotlin에 자동 임포트 설정을 합니다. 아래의 항목을 체크하여 설정합니다. Add unambiguous imports on the fly Optimize imports on the fly(for current project) 3. 자동 임포트 예시입니다. 2021. 9. 11.
안드로이드 코틀린(Kotlin) - 오류 Module was compiled with an incompatible version of Kotlin. 안드로이드 앱 개발을 자바로 하다 늦게 코틀린으로 개발하기 위해서 스터디 중입니다. 처음부터 아래와 같은 컴파일 오류가 발생하고 말았습니다. C:/Users/~~~~/.gradle/caches/transforms-2/files-2.1/73386cfabd81641255b1adb6f916fd20/jetified-kotlin-stdlib-1.5.10.jar! /META-INF/kotlin-stdlib.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16. 구글링 결과 코틀린의 버전을 상향해야 하네요. 안.. 2021. 9. 10.
안드로이드 개발 Java에서 Kotlin으로의 항해 Java로 안드로이드를 개발한지 거의 10년이 되어가고 있습니다. 구글에서 안드로이드 개발언어로 Kotlin을 발표한지도 몇년이 지났습니다. Kotlin이 아닌 Java로만으로 앱을 개발 할 수 있어서 Kotlin에 관심을 갖고 있지 않았습니다. 개인적으로 안드로이드 앱만 개발하고 있어 Kotlin으로 넘어가지 않으려고 했습니다. 주위의 지인들의 프로젝트에 안드로이 앱 개발 시 현재는 Kotlin으로 개발을 한다는 말을 듣게 되었습니다. 늦었지만 지금이라도 Kotlin으로 안드로이드 앱을 개발하기 위해서 스터디를 하려고 합니다. 강좌는 유튜브로 기본 문법을 학습하려고 합니다. https://www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN.. 2021. 9. 1.
안드로이드 에뮬레이터 스크린샷과 저장 위치 안드로이드 에뮬레이터에서 스크린샷을 하는 방법과 스크린샷의 저장 위치에 대해서 설명합니다. 뭐 간단하지만 자꾸 스크린샷의 저장 위치 잊어버려서 구글링을 하게 되네요. ㅠㅠ 에뮬레이터의 오른쪽 메뉴에서 카메라를 클릭하면 스크린샷이 저장됩니다. 스크린샷의 저장 위치는 바로 바탕화면이랍니다. 2021. 6. 10.
안드로이드 스튜디오에서 다국어 작업하기 한국어로 개발된 안드로이드 앱에 영어를 추가하려고 합니다. 기본언어가 한국어로 되어있는데 이것을 영어로하고, 한국어를 추가하려고 합니다. 안드로이드 스튜디어의 Translations Editor를 이용하여 언어를 추가하여 다국어 지원을 하는 방법입니다. 1. res/values/string.xml을 엽니다. 2. 상단의 Open Editor를 클릭하여 Translations Editor를 엽니다. 3. Translations Editor에서 한국어를 추가합니다. 4. 다국어 작업을 합니다. - Defalut Value : 영어 - Korean : 한국어 ※ 다국어 테스트는 폰의 언어를 바꾸어서 진행 하시며 됩니다. 2021. 3. 31.
Could not download aapt2-windows.jar (com.android.tools.build:aapt2:3.2.0-4818971): No cached version available for offline mode 아래와 같은 오류가 갑자기 발생해버렸습니다. Could not download aapt2-windows.jar (com.android.tools.build:aapt2:3.2.0-4818971): No cached version available for offline mode Gradle이 Offline Mode로 설정이 되어있어 해당 Jar를 다운로드 할 수 없어서 발생한 오류입니다. [Offline Mode 해제] 1. View > Tool Windows > Gradle 메뉴를 선택합니다. 2. Offline Mode 토글 버튼을 해제로 변경 후 다시 컴파일 합니다. ※ 아래와 같이 Gradle Offline Mode 해제 할 수 있습니다. 2021. 3. 16.
안도로이드 SQLite insert or replace 구현 SQLite에서 Insert와 Update를 함께 처리 할 수 있는 "insert or replace" 문법이 있습니다. SQLite의 "insert or replace"에 대해서는 아래의 링크를 참고하세요. https://docko.tistory.com/entry/SQLite-inert-or-replace%EC%98%A4%EB%9D%BC%ED%81%B4MS-SQL-Merge-%EA%B8%B0%EB%8A%A5 SQLite inert or replace(오라클/MS-SQL Merge 기능) 오라클 또는 MS-SQL의 Merge와 유사한 기능으로 SQLite에서는 insert or replace 기능이 있습니다. 사용법은 Merge보다 간단하지만, 디테일한 적용은 조금 부족합니다. insert or repl.. 2021. 2. 15.
E/RecyclerView: No layout manager attached; skipping layout 아래의 오류는 RecyclerView에 Layout Manager를 설정하지 않아 서 발생합니다. E/RecyclerView: No layout manager attached; skipping layout 아래와 같이 RecyclerView에 layoutManager를 설정하면 됩니다. app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 2021. 2. 5.
안드로이드 외부 폰트 Layout XML에 적용하기 안드로이드 앱 개발 시 외부 폰트를 적용하는 방법은 Typeface 객체를 이용하는 방법이 있습니다. 하지만 이 방법은 Layout 디자인에는 표시가 안되기 때문에 디자인 적용을 디버깅에서 확인 해야 하죠. Layout XML에 외부 폰트를 적용하는 방법인데 간단합니다. 1. res(리소스) 하위에 font 디렉토리를 생성하고 외부 폰트를 복사해서 넣습니다. (주의 할 것은 외부 폰트명은 소문자와 "_" 만으로 구성해야 합니다.) 2. Layout XML에 아래와 같이 fontFamily를 지정하면됩니다. 3. 안드로이드 스튜디오 Layout 편집기에서 아래와 같이 확인 할 수 있습니다. 2020. 8. 7.
안드로이드 Action Bar 숨기기, Full Screen을 Style XML로 설정하기 안드로이드 프로젝트를 생성하고, styles.xml에서 Action Bar를 숨기거나 Full Screen을 설정하는 방법입니다. styles.xml 은 아래의 경로에 있습니다. 1. Actin Bar 표시 styles.xml 설정 windowActionBar = true, windowNoTitle = false, windowFullscreen = false 로 설정 2. Actin Bar 숨기기 styles.xml 설정 windowActionBar = false, windowNoTitle = true, windowFullscreen = false 로 설정 3. Full Screen styles.xml 설정 windowFullscreen = true 로 설정 (windowActionBar = true 와.. 2020. 8. 4.
안드로이드 ImageView를 흑백(Gray Scale)으로 표시하기 안드로이드의 ImageView의 이미지를 흑백으로 만드는 방법입니다. 아래의 코드는 ListView의 Adapter에 적용한 예입니다. ImageView ivNationFlag = (ImageView)v.findViewById(R.id.iv_nation_flag); ivNationFlag.setImageResource(NationFlagHelper.getNationFlagRes(quiz.name)); if(isOk){ // 컬러 필터를 제거하여 원본으로 표시 ivNationFlag.setColorFilter(null); }else{ // 컬러 필터를 흑백으로 변경 ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixCol.. 2020. 7. 12.
android.os.FileUriExposedException: file:///storage/emulated/0/... exposed beyond app through Intent.getData() 안드로이드 프로젝트의 targetSdkVersion이 24이상에서 아래의 소스코드(MIME Type에 따른 앱 연결 화면 오픈)를 실행하면 아래와 같이 오류가 발생합니다. [소스코드] String mergeFilePath = "file:///storage/emulated/0/sql.pdf"; File file = new File(mergeFilePath); Intent target = new Intent(Intent.ACTION_VIEW); target.setDataAndType(Uri.fromFile(file),"application/pdf"); target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); Intent intent = Intent.createChooser(t.. 2020. 2. 1.
Failed to resolve: support-core-utils & support-compat 요즘 이전에 개발한 안드로이드 프로젝트 컴파일 시 아래와 같은 오류가 발생합니다. ERROR: Failed to resolve: support-core-utils Affected Modules: app ERROR: Failed to resolve: support-compat Affected Modules: app 해결 방법은 App build.gradle의 dependencies에 support-core-utils와 support-compat을 추가해주면 됩니다. dependencies { ... implementation "com.android.support:support-core-utils:26.+" implementation 'com.android.support:support-compat:26.+'.. 2019. 7. 25.
안드로이드 targetSdkVersion 28 인 경우 HTTP 통신 시 오류 해결 방법 안드로이드 앱의 targetSdkVersion이 28 이상에서 HTTP 통신 할 경우 아래와 같은 오류가 발생합니다. E/AndroidRuntime: FATAL EXCEPTION: Thread-9 Process: com.mypackage, PID: 24239 java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/HeaderGroup; at net.daum.mf.map.common.net.NetWebClient._getResponse(NetWebClient.java:257) at net.daum.mf.map.common.net.NetWebClient.openContentStream(NetWebClient.java:274.. 2019. 7. 14.