Android 43

Android Studio / Github 연동

Android Studio IDE 로 작업을 하면서 코드 형상 관리를 위해 Github 를 사용하는 경우가 있다. Android Studio 와 Github 를 연동하는 방법은 다음과 같다. 확인 진행한 환경 : Android Studio 3.5 git version 2.23.0.windows.1 (git 미설치시 [Windows 내 git 설치] 참고) 현재 작업 중인 프로젝트를 처음으로 github에 연동하는 경우 불필요한 파일을 연동에서 제외 시키기 위한 파일 (.gitignore) 작성 .gitignore 생성을 위한 ".ignore" plugin 설치 제외 파일/폴더 정의를 위한 .gitignore 자동 생성 "Share Project on Github" 를 통한 연동 기타 Trouble sho..

Android 2019.10.08

stetho - 실시간 sqlite db 접근 및 디버깅

sqlite를 이용하여 android 에서 database를 사용하다 보면 database에 쌓이는 실제 값을 확인해야 하는 경우가 종종 있다. android 개발 환경이 상당히 잘 제공되어 있어 기본적으로 실시간 database 확인 방법이 있으리라 생각하고 찾아 보았으나 기본으로 제공하는 툴은 별도로 제공되지 않는 것을 확인하였다. 이에 찾아보니 stetho 라고 facebook 에서 개발하여 공유하는 android application을 위한 debug bridge 가 존재하였다. 다양한 기능이 있겠지만 database 위주로 사용법을 보면 아래와 같다. http://facebook.github.io/stetho/ 1. Android Studio에서 build.gradle 에 아래와 같이 com.f..

Android 2019.01.06

Android - Material icon 의 사용 in Android Studio

개발자들이 UI가 있는 앱을 개발할 때 제일 어려워하는 혹은 곤란해하는 부분이 design 이 아닐까 한다. Design 까지는 아니더라도 앱에 사용되는 이미지나 아이콘등을 구하는 것 또한 쉽지 않은 일이다. 앱 개발시 관련 디자이너가 있다면 좋겠지만 일반적으로 규모가 작은 개발팀의 경우 디자이너가 부재하는 게 일반적이다. 구글에서 이와 같은 개발자들의 고충을 알았는지 디자이너가 없어도 개발자들이 적용가능한 material design을 아래 사이트에서 소개하고 있다. https://material.io/design/ Material design이 발표된지는 몇년 지났지만 최근 관련 icon 을 사용하면서 다시 한번 android studio 에서의 사용법을 정리하고자 한다. 1. 먼저 아래의 주소로 접..

Android 2018.12.27

Android Studio, 외부 java library (.JAR, .AAR) 추가

외부 자바 패키지를 쓰기 위해서는 IDE의 project 설정에 몇가지 작업을 해주어야 한다. 기존에는 eclipse 위에서 java coding을 해서 elipse 상에서의 방법에 대해서만 알고 있었는데 당연히 비슷할 것이라 생각했던 Android Studio에서는 다소 다른 점이 있어 정리해 보았다. 1) [File] > [Project Structure...] 선택한다. 2) 선택 후 발생하는 팝업의 왼쪽 위 "+" (New Module) 버튼을 선택한다. 3) 선택 가능 항목 중에 "Import .JAR/.AAR Package"를 선택한다. 4) 여기서 무엇을 해야 할지 몰라 잠시 당황할 수 있는데, 오른쪽 "..." 버튼을 눌러 추가하기 원하는 .JAR 파일을 선택한다. 5) 선택 후 "Fini..

Android 2017.02.13

Android Studio, module 삭제.

Android studio에서 작업을 하다 보니 아까 내가 테스트로 잠시 만들어 놓았던 code가 별도의 모듈로 project 에 추가되어 있었다. 별도의 project 를 만들어서 테스트했던 줄로만 착각하고 있었던 것이다. 잘못 생성된 혹은 불필요하게 된 Module을 project에서 삭제하기 위해서는 다음과 같이 하면 된다. [File > Project Structure] 1. Project Structure 메뉴에 진입한 이후 위와 같이 왼쪽 메뉴 아래에 Modules에서 필요없는 모듈을 선택한다. 2. 선택 후 위헤 +, - 아이콘에서 -를 눌러 삭제한다 . 3. 여기서 삭제하게 되면 project에서 구조적으로 삭제가 될 뿐 실제 관련 파일들이 삭제되지는 않는다. 이 부분은 실제 탐색기에 들어..

Android 2016.07.19

Android Studio, Instant Run 에 대한 이해

안드로이드 앱 제작시 기본적으로 코드의 결과를 확인하는 과정은 다음과 같다. 코드 작성 -> 빌드 -> 결과물 deploy -> 결과물 확인 이 과정을 반복적으로 계속 하면서 확인하게 된다. 하지만 Instant Run, 이 기능을 이용하게 된다면 말그대로 코드 수정하는 즉시 적용되는 것을 볼 수 있다. 코드를 수정하는 순간 빌드, deploy 없이 바로 결과물을 확인할 수 있다는 뜻이다. 그렇다면 어떤 경우에 해당 기능이 적용될 수 있는지 알아보도록 하자. Android Studio 2.0 이상 Android Plugin for Gradle version 2.0.0 이상minSdkVersion 15 이상 (원활한 성능을 위해서는 minSdkVersion 21 이상) Instant Run의 종류에는 아래..

Android 2016.07.18

[해결방법] The number of method references in a .dex file cannot exceed 64K.

Android Studio : 2.1.2 minSdkVersion 15 (Android 4.0.3 APIs)Google Maps Activity Google Maps 기반으로 작업할 일이 생겨서 기본 Activity 로 Google Maps Activity 를 선택하고 project 를 빌드해 보았다. 별다르게 코드를 넣은 것도 아닌데 아래와 같은 에러가 발생하면서 빌드가 되질 않는다. Error:The number of method references in a .dex file cannot exceed 64K.Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html Android project..

Android 2016.07.18

[해결방법] To run dex in process, the Gradle daemon needs a larger heap.

문제에 대한 해결 방법이라기 보다 Warning에 대한 해결 방법이다. 빌드를 하다보면 아래와 같은 로그가 나올 때가 있는데 Gradle에서 사용하는 기본 heap 이 작게(?) 잡혀 있어서 발생하는 문제이다. 사실 아래 로그와 같이 910MB정도면 작은 편은 아닌데, 상당히 많은 heap을 사용하는 것 같다. To run dex in process, the Gradle daemon needs a larger heap.It currently has approximately 910 MB.For faster builds, increase the maximum heap size for the Gradle daemon to more than 2048 MB.To do this set org.gradle.jvmar..

Android 2016.07.18

Android - Android Studio에서 빌드 후 apk 위치.

보통은 Android Studio에서 빌드하게 되면 자동으로 install하고 실행까지하게 되어 apk를 확인할 일이 별로 없지만 apk 를 직접 확인해야 하는 경우가 생기기도 한다. Workspace 이름, Project 이름 같은 경우는 개별적으로 모두 다르기 때문에 자신의 workspace와 project 를 확인하여 아래 경로에 가보면 apk 를 확인할 수 있다. [Workspace 명]\[Project 명]\app\build\outputs\apk 해당 경로에 가보면 아래와 같이 apk 파일 확인이 가능하다. app-debug.apkapp-debug-unaligned.apk

Android 2016.07.18

Messenger, SNS API 등을 통한 친구 목록 가져오기.

어플을 만들때 사용자의 지인들과의 연관성을 이용한 확산을 의도한다면, 기기 안에 존재하는 사용자의 지인 목록, 즉 친구 목록이 필요하다. 이런 친구 목록들은 흔히 메신저 앱(카카오톡, 라인 등)에서 가져오거나, SNS (페이스북 등)에서 가져오는 것이 일반적이고 가능할 것이라 생각했다. 해당 기능 사용을 위해 좀 찾아봤는데, 생각보다 규제(?)를 만들어 놓아 사용하기가 쉽지가 않다. 카카오톡 : 친구 목록 가져오기가 불가능한 것은 아니다. 카카오 게임에서 보듯이 게임 메뉴중에 친구 목록들을 확인할 수 있지 않은가. 따라서 당연히 바로 가능할 것이라 생각했는데, 기본적으로는 안되는 기능으로, 이 기능을 이용하려면 카카오톡에 제안서, 흔히 말하는 입점을 해야 한다. 페이스북 : 찾아보니 페이스북은 된다고 나..

Android 2016.03.18

Android - Media File이 Media List에 자동 추가되는 것 방지 방법

Android 기기에 Media 파일을 복사하거나 인터넷에서 다운로드 받게되면 사용자의 별다른 조작없이 Gallery나 Media 관련 list에 자동으로 표시되게 된다. 하지만 일부 사용자의 경우 파일이 노출(?)되기를 원치않는 경우가 있기도 하다. 이럴 경우에는 .nomedia 파일을 추가하면 해당 파일이 포함된 폴더에 포함된 media 파일들은 자동으로 추가가되지 않게된다. 예를 들어 아래의 경우 20160221_163047.png 파일은 Gallery에서 보여지지 않게 된다. PC에서 .nomedia 파일을 만들어서 Phone으로 전달하면 아래와 같이 NOMEDIA 파일이라고 나오니 반드시 ".nomedia" 이름으로 만들어야 한다. (확장자 없음)

Android 2016.03.05

Android - Intent (인텐트)

Android 구조를 보다보면 intent 라는 용어가 자주 나온다. 앞서 정리한 구성요소를 시작하는 방식에서도 intent가 나오는데 이 구성요소와 intent의 관계 대해 정확한 이해를 하고, 이 intent의 종류, 구성에 대해 확인해 보자. Intent-. 일종의 메세지 객체 -. 여러 구성요소 사이(다른 앱의 구성요소일지라도)의 통신을 가능하게 함 구성요소 정리시에도 학습하였지만 Intent를 통해서 다음과 같은 동작이 가능하다 1. Activity (액티비티) 시작하기 2. Service (서비스) 시작하기 3. Broadcast (브로드캐스트) 전달하기 Intent 의 종류명시적 인텐트, 암시적 인텐트. Intent는 구성요소 시작하게 하거나, 구성요소에 data 를 전달하기 위한 목적으로 ..

Android 2016.02.26

Android - Preferences (Data의 저장)

현재 만들어 보고 있는 메모의 Widget을 구현하기 위해 이리저리 코드를 찾아보고 만들어보고 있다. 각종 참고 Site에 가이드된대로 Widget은 무난히 구현해서 의도대로 홈 화면에 위젯이 표시되는 것까지 확인하였다. 그런데 분명히 Widget 생성시에는 정상적으로 표시하려는 메모 내용이 보였는데, 어느 순간 보면 해당 내용이 사라지는 현상이 발생하였다. 처음에는 내가 잘못본 것이겠지 했었는데, 현상이 두번이고, 세번이고, 계속 나오는 걸 보니 뭔가 놓친 부분이 있는 것을 알았다. 재현 경로를 확인해 보니 다음과 같다. 메모의 Widget 생성 (문제 없음) -> 재부팅 -> Widget 확인시 해당 내용 사라짐 인터넷을 좀 찾아보니 위와 같은 현상을 해결하는 방법은 다음과 같았다. 1. Widget..

Android 2016.02.24

[Galaxy S6] 롤리팝 (Lollipop)에서 마시멜로우 (Marshmallow)로.

2016년 2월 15일 드디어 Android 5.1.1 롤리팝에서 Android 6.0.1 마시멜로우로 OS Update가 진행되었다. 혹시나 하는 마음에 당일 업데이트는 못하고, 한 일주일이 지난 시점에서 업데이트를 진행하였다.(업데이트가 그러하듯이 문제가 있을 수 있으므로 시장 상황을 좀 보다가.) 그렇다면 Galaxy S6에서 업데이트는 어떻게 진행하고, 나아진 점은 어떤 것들이 있는지 알아보자. 롤리팝에서 마시멜로우로...1. 우선 자신의 기기가 롤리팝인지부터 확인해 보자. [설정 > 디바이스 정보] 에 들어가서 "안드로이드 버전"을 확인해 보자. 6이 아니고, 5로 시작한다면 아직 업그레이드 전인 롤리팝이다. 롤리팝이 확인되었다면 첫번째 메뉴인 "소프트웨어 업데이트"를 선택하자 선택하면 업데이트..

Android 2016.02.22

Android - 권한 정보 (Permission) 확인 및 권한 제거

Google Play에 올려진 앱을 선택해 보면 해당 앱의 권한 정보를 확인할 수 있다. 아래의 앱의 경우 권한 정보를 눌렀을 때 아래와 같은 팝업창을 확인할 수 있다. 별다른 권한(permission) 추가 없이 기본 프로젝트 생성으로 만들더라도 위와 같이 사진/미디어/파일, 기기 ID 및 통화 정보가 추가되는 것을 확인하였다. 사실 위의 권한은 앱에서 필요없는 부분인데 어떻게 제거할 수 있을까? 권한(Permission) 제거 아래 AndroidManifest.xml을 보면 uses-permission 항목이 있다.아래와 같이 WRITE_EXTERNAL_STORAGE, READ_PHONE_STATE, READ_EXTERNAL_STORAGE가 추가되어 있는데 이를 삭제해 주면 된다. AndroidMan..

Android 2016.02.19

Android - Dialog 내의 EditText Padding, Margin 조절하기

환경 정보Android API 23 (Android 6.0)Android Studio 1.5.1. 이 글의 목표는 아래와 같이 유난히 긴 EditText를 상위 Text와 같이 align을 맞춰 줄여주는 것이다. . EditText의 길이가 짧아졌다.[Before] [After] Dialog에 EditText를 추가하는 코드를 구해서 코드에 추가하였다. AlertDialog.Builder alert = new AlertDialog.Builder(CategoryActivity.this); alert.setTitle("Add Box"); // Set an EditText view to get user input final EditText input = new EditText(CategoryActivity.t..

Android 2016.02.01

Android Studio 그리고 adb

기본적으로 android studio를 설치하게 되면 android sdk를 깔거나 기존 것을 사용하게 된다. 이 말은 android sdk 내에 있는 adb를 사용할 수 있다는 이야기이다. Android studio를 이용해 application을 만들어 device에서 실행하는 경우를 보아도 adb를 이용해 install하고 실행하게 된다. 그래서 android studio 가 설치된 컴퓨터에서 command로 adb 를 사용하려고 했더니 이거 웬걸 안된다. 그렇다면 android studio에서 사용하는 adb는 대체 무엇이란 말인가. android studio에서 사용하는 sdk의 위치를 확인해 볼 필요가 있다. 1. Android Studio > Menu > File > Settings... 선..

Android 2016.01.30

Android - Toolbar icon 추가/생성하기

Android App을 보면 상단에 Toolbar를 흔히 볼수 있다. (간혹 없는 App들도 있지만 대체로 다 있다.) 그렇다면 저 bar에는 어떻게 icon을 추가하고 해당 icon에서 발생하는 touch event를 처리할 수 있을까? [Icon이 없는 Toolbar] [Icon을 생성한 Toolbar] 다른 여타 layout과 같이 xml 파일에 추가해 주면 된다. res\menu\main.xml Icon은 전 article에 포스팅한 방법으로 확보하였다. 해당 Icon을 클릭 하였을 때 event는 다음 코드에서 처리할 수 있다. public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItem..

Android 2016.01.29

Android - Widget (위젯) 기본 생성

기본적으로 Activity를 사용해서 APP을 구현한 적은 있지만 Widget 구현은 처음이라 어디 부분의 코드를 추가해 주어야 하는 건지, 어느 부분에 이미지를 넣어줘야 하는 건지 감이 오질 않았다. 기본 환경 : Android Studio 1.5.1 기본 widget을 추가하는 방법은 클릭 몇번으로 끝났다. 1) 메뉴에서 New > Widget > App Widget 선택 2) Widget Class Name 설정 후 Finish완료 되었다. 위의 과정이 모두 끝나게 되면 아래와 같이 Example 용 Widget을 설치할 수 있게 된다.

Android 2016.01.27

Android - 이미지 저장 및 변경 on Project.

Google의 Material Icon 을 download 받았다. 나같은 경우 Content - Add를 다운로드 받았는데, 다운로드 후 압축을 풀어보니 다음과 같은 내용물이 풀렸다. Material Design을 어디까지 지원할 의도인지는 모르겠으나, ios 용도 들어 있고, web 용도 들어 있다. 뭐 어쨌든 나의 경우는 Android App에 사용할 것이기 때문에 drawable-hdpi, drawable-mdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi 폴더를 넣어야 한다. 하지만 기본 project 생성 후 res에 존재하는 drawable 관련 폴더는 drawable, drawable-v21밖에 없다. 그냥 위 폴더들을 app\src\main..

Android 2016.01.24

Android - Material Design of Google.

Material Design 에 대해 쉽게 설명해 놓은 페이지 (한글)http://blog.bsk.im/2015/08/18/introducing-android-design-support-library/ Material Design 사용시 사용할만한 Icon 다운로드 받을수 있는 페이지 (영문, Google)https://design.google.com/icons/ 사용관련해서 CC-BY license를 따른다고 한다.Feel free to use, remix, and re-share the icons in your products. The icons are available under the CC-BY license. We'd love attribution in your app's "about" scre..

Android 2016.01.24

Android - Back key 무시

일반적으로 안드로이드에서 back key를 누르게 되면 back stack에서 activity가 pop 되면서 이전의 activity로 돌아가게 된다. back key의 주요 동작이 이와 같은데 간홀 이 동작 말고 다른 동작을 원할때가 있다. 예를 들면 back key를 누르면 처음 한번째에는 warning을 띄워 주고, 다음 back key를 누를 경우 app을 종료시키는 것과 같은 루틴이다. 이 말고도 back key를 아예 무시하도록 할 수도 있다. 아래 코드와 같이 back key를 누르게 되면 onBackPressed 함수가 호출되게 되고, 해당 함수내에서 super.onBackPressed()가 실제 이전 activity로 복귀하는 곳이다. 이전 activity로 복귀를 원하지 않으면 해당 s..

Android 2016.01.20

Android - 더블탭(double tap), 더블클릭, 더블터치

안드로이드 앱을 개발하다 보면 touch, back key 등 말고도 두번 터치(정확한 명칭은 함수상 이름으로 보면 double tap 인데 사실 함수명 보기 전에는 더블 클릭, 더블 터치등으로 검색했었다.) 뿐만 아니라 fling (슬라이드)등이 있다. 이 추가적인 동작들은 일반적인 event 함수 외에 GestureDetector Class를 통해 인지해 낼 수 있다. GestureDetectorDetects various gestures and events using the supplied MotionEvents. The GestureDetector.OnGestureListener callback will notify users when a particular motion event has occu..

Android 2016.01.19

Android - TextView 그리고 EditText View 전환

메모장 같은 프로그램을 보면 일반 TextView였다가 edit 버튼을 누르면 EditText View로 변경되고,save 버튼을 누르면 다시 TextView로 전환되는 광경을 볼 수 있다. 하나의 view를 가지고 속성을 변경해 가면서 사용하는 것인가...아니면 2개의 view를 가지고 전환해 가면서 사용하는 것인가... 여러 가능성을 열어두고 구글링을 해 본 경과, TextView, EditText를 각각 구현해 놓고 전환해가능 방법이 사용된다는 것을 확인했다. 우선 layout xml에 다음과 같이 선언한다. 여기서 관심있게 보아야 하는 부분은 android:visibility 이다. 수정이 필요할때는 EditText 를 visible하게 하고, 수정이 필요 없을 때는 TextView를 visibl..

Android 2016.01.19

Android - ListView 갱신 with CursorAdapter.

ListView에 CursorAdapter를 연결해서 사용하게 될 경우 Database에 변화가 있을 경우 다시 select하여 해당 결과를 업데이트해주어야 한다. 이 때는 ListView를 건드릴 필요 없이, 중간의 매개체인 Adapter의 changeCursor를 호출해 주면 ListView가 갱신된다. [developer.android.com 출처]public void changeCursor (Cursor cursor)Added in API level 1Change the underlying cursor to a new cursor. If there is an existing cursor it will be closed.ParameterscursorThe new cursor to be used 실제..

Android 2016.01.18

Android - Activity 화면 전환 효과

Google Play에서 설치한 app을 쓰다보면 아무런 효과 없이 Activity가 전환되는 app들도 있지만, Activity 전환시 신규 Activity가 오른쪽에서 왼쪽으로 나타난다거나, 자연스럽게 fade in/out 된다거나 하는 app들이 있다. 자세한 구현 방법을 알기 전, 아무런 기반 지식이 없는 상태에서 생각하기론 flash를 사용하나라고 추측만 했었다. 아무래도 animation 효과를 code 상으로 구현한다고는 감이 오지 않았기 때문이다. 이 효과의 주인공은 다음과 같다.public void overridePendingTransition (int enterAnim, int exitAnim) Added in API level 5 Call immediately after one of ..

Android 2016.01.18

Android - Application Class

sqlite를 사용하는 코드를 짜다 보니 여러 Activity 에서 sqlite를 호출해야 하는 경우가 있었다. 이럴 경우 그렇다면 Activity가 onPuase 될 때 마다 close하고 onResume 될 때 마다 open 해야 하는 것인가. 아니면 Main Activity에서 open해 놓고, open 당시 생성된 sql handler를 인자로 넘겨서 사용할 수 있을 것인가. 생각지도 않은 곳에서 막혀서 헤매이고 있을 때, 구글께서 그럴때는 Application class를 사용하도록 하여라라고 말씀해주셨다.;; 나도 이번에 처음 접한 개념인데 app이 동작하는 동안 공통적인 부분에대해 구현해 놓는, 다시 말하자면 global하게 모든 routine에서 가져다가 쓸수 있는 그런 것들을 선언하거나 ..

Android 2016.01.18

Android - Cursor

Database cursor 우선 cursor의 의미를 명확히할 필요가 있다. 우리가 흔히 아는 cursor는 컴퓨터 화면에 깜빡거리는 막대기가 아니던가. 영어사전에 cursor를 찾아 보아도 그냥 한글로 커서라고만 나온다. 그래서 dictionary.com에 찾아보니 정의가 아래와 같다. noun1.Computers. a movable, sometimes blinking, symbol that indicates the position on a CRT or other type of display where the next character entered from the keyboard will appear, or where user action is needed, as in the correction o..

Android 2016.01.15

Android - ListView, CursorAdapter 그리고 _id

SQLite의 Data를 ListView에 표시하기 위해서는 CursorAdapter를 사용해서 ListView에 연결시켜 주면 된다. [관련글 링크] 이 SQLite에서 select해서 가져오는 data를 보면 아래와 같이 _id, title, body, done 등 4개이다. "_id integer primary key autoincrement, " + "title text, " + "body text, " + "done integer" 그런데 사실 나의 의도는 위의 4개 data를 모두 list상에 보여주는 것이 아니라 body와 done만 보여주고 싶다. 이래저래 열심히 구글링을 해보니 sqlite를 select한 결과물인 cursor를 나름대로 조작해서 새롭게 ArrayAdapter를 만드는 방..

Android 2016.01.14