Android
|
안드로이드(Android)는 휴대 전화를 비롯한 휴대용 장치를 위한 운영 체제와 미들웨어, 사용자 인터페이스 그리고 표준 응용 프로그램(웹 브라우저, 이메일 클라이언트, 단문 메시지 서비스(SMS), 멀티미디어 메시지 서비스(MMS)등)을 포함하고 있는 소프트웨어 스택이자 모바일 운영 체제이다. 안드로이드는 개발자들이 java 언어로 응용 프로그램을 작성할 수 있게 하였으며, 컴파일된 바이트코드를 구동할 수 있는 런타임 라이브러리를 제공한다. 또한 안드로이드 소프트웨어 개발 키트(SDK: Software Development Kit)를 통해 응용 프로그램을 개발하기 위해 필요한 각종 도구들과 응용 프로그램 프로그래밍 인터페이스(API)를 제공한다.
안드로이드는 리눅스 커널 위에서 동작하며, 다양한 안드로이드 시스템 구성 요소에서 사용되는 C/C++ 라이브러리들을 포함하고 있다. 안드로이드는 기존의 자바 가상 머신과는 다른 가상 머신인 달빅 가상 머신을 통해 java로 작성된 응용 프로그램을 별도의 프로세스에서 실행하는 구조로 되어 있다.
2005년에 안드로이드 사를 구글에서 인수한 후 2007년 11월에 안드로이드 플랫폼을 휴대용 장치 운영 체제로서 무료 공개한다고 발표한 후 48개의 하드웨어, 소프트웨어, 통신 회사가 모여 만든 오픈 핸드셋 얼라이언스(Open Handset Aliance,OHA)에서 공개 표준을 위해 개발하고 있다. 구글은 안드로이드의 모든 소스 코드를 오픈 소스 라이선스인 아파치 v2 라이선스로 배포하고 있어 기업이나 사용자는 각자 안드로이드 프로그램을 독자적으로 개발을 해서 탑재할 수 있다. 또한 응용 프로그램을 사고 팔 수 있는 구글 플레이를 제공하고 있으며, 이와 동시에 각 제조사 혹은 통신사별 응용 프로그램 마켓이 함께 운영되고 있다. 마켓에서는 유료 및 무료 응용 프로그램이 제공되고 있다.
Version Information
버전 | 코드 네임 | 발표일 | API Level | 점유율 (2014년 1월 8일) |
4.4.x | 킷캣 | 2013년 10월 31일 | 19 | 1.4% |
4.3.x | 젤리빈 | 2013년 07월 24일 | 18 | 7.8% |
4.2.x | 젤리빈 | 2012년 11월 13일 | 17 | 15.4% |
4.1.x | 젤리빈 | 2012년 07월 09일 | 16 | 35.9% |
4.0.3 ~ 4.0.4 | 아이스크림 샌드위치 | 2011년 12월 16일 | 15 | 16.9% |
3.2 | 허니콤 | 2011년 07월 15일 | 13 | 0.1% |
2.3.1 ~ 2.3.7 | 진저브레드 | 2011년 02월 09일 | 10 | 21.2% |
2.2 | 프로요 | 2010년 05월 20일 | 8 | 1.3% |
개발자 옵션 활성화 방법
참조: http://chobbang.com/85
젤리빈 4.2부터 개발자 옵션을 활성화하지 않으면 보이지 않는다. 활성화 방법은 아래와 같다.
- Nexus7: 어플리케이션 > 설정 > 태블릿 정보 > 빌드번호
- 일반 안드로이드 핸드폰: 어플리케이션 > 설정 > 휴대전화 정보 > 빌드번호
빌드번호 박스를 3회 클릭하면 토스트(Toast)박스로 개발자 옵션 활성화 여부가 나타난다.
드라이버 설치 방법
Android 드라이버 설치 방법에 대하여 설명한다.
MTP 모드
요즘 안드로이드 폰들은 PC에 USB를 연결했을 경우, MTP 모드를 이용해서 연결이 됩니다.
이 MTP 모드는 "미디어 전송 프로토콜(Media Transfer Protocol)"의 약자입니다.
그래서 그런지 윈도우즈7이나 윈도우즈8 등에서는 최신 미디어 플레이어가 설치되어 있어서 별도의 드라이버 설치 없이 MTP 모드를 사용할 수 있지만, 윈도우 XP의 경우는 미디어 플레이어를 버전 11 이상으로 설치를 해야 MTP 모드를 사용할 수 있습니다.
ADB 드라이버
Nexus 시리즈의 경우, Android SDK 설치 후 SDK폴더의 /extras/google/usb_driver
를 확인하면 된다. 만약 이 디렉터리를 사용하여 드라이버가 설치되지 않는다면 컴퓨터의 장치 드라이버 목록에서 직접 선택을 사용하여 Android Composite ADB Interface를 선택하면 된다.
루팅(Rooting) 방법
- Nexus Android 4.4.4 루팅 진행 방법(adb sideload를 통한 방법)
- HOW TO ROOT OR UPDATE A NEXUS ANDROID USING ONLY OPEN SOURCE TOOLS (IN LINUX) 1
Android System architecture
Android-system-architecture.jpg
The following diagram shows the major components of the Android operating system. Each section is described in more detail below.
- 리눅스 커널 (Linux Kernel)
- 안드로이드는 내부 메모리 관리, 프로세스 관리, 네트워킹, 운영체제 시스템 서비스 등에 리눅스를 사용합니다.
- 라이브러리 (Libraries)
- 커널 바로 위 계층에는 안드로이드 내장 라이브러리가 있습니다. 이 라이브러리는 모두 C또는 C++로 쓰여 있고, 특정 하드웨어를 위해 컴파일 되어 디바이스에 미리 설치됩니다. 라이브러리의 기능들은 상위 어플리케이션 프레임워크를 통해 개발자에게 제공되며, 중요 라이브러리는 아래와 같다.
- 안드로이드는 Java기반 이므로 C/C++로 작성된 프로그램을 이용하기 위해 JNI(Java Native Interface)를 사용
- 안드로이드 런타임 (Android Runtime)
- 달빅(Dalvik) VM(Virtual Machine)과 코어 자바 라이브러리가 포함되는 레이어 입니다. 달빅은 모바일 디바이스용으로 최적화해 구현된 구글의 자바격인데, 전형적인 자바에 대비해 다음과 같은 차이점이 있습니다. 달빅 VM은 .dex 파일을 실행시키는데, 이 파일은 표준 .class와 .jar 파일이 컴파일 시점에 변환된 것입니다. 이 파일은 클래스 파일보다 작고 효율성이 높기 때문에 적은 메모리와 베터리로 작동하는 환경에 적합합니다. 코어 자바 라이브러리는 자바 스텐더드 에디션(Java SE) 라이브러리와 자바 모바일 에디션(Java ME)라이브러리와는 다르지만 중복되는 부분이 상당히 있습니다.
- 어플리케이션 프레임워크 (Application Framework)
- 어플리케이션을 만들 때 사용될 빌딩 블록(Building Block)을 제공합니다. 응용 프로그램들의 하위 커널이나 시스템 라이브러리를 직접 호출할 수 없으며, 이 레이어를 통해서 기능을 요청 합니다. 프레임워크의 중요 부분은 액티비티 매니저(Activity manager), 컨텐츠 제공자(Content provider), 리소스 매니저(Resource manager), 알림 매니저(Notification manager)가 있다. 자세한 내용은 #Android Application Component을 참조.
- 어플리케이션 (Application)
- 안드로이드 아키텍처의 최상위 계층이며, 눈에 보이는 프로그램. Java 프로그래밍 언어로 열심히 만들어진. 만들어야 될 프로그램이 위치합니다.
Android Application Component
안드로이드 어플리케이션을 구성하는 기본 네 가지 컴포넌트에 대하여 서술한다.
- 액티비티 (Activity)
- 비주얼 UI이다. 한 어플리케이션은 하나 이상의 액티비티(activity)가 존재하며, 결합된 UI를 위해 함께 동작하지만, 각각의 액티비티(activity)는 독립적이다.
- 각 액티비티(activity)는 그리기(draw)가 가능한 하나의 디폴트 윈도우가 부여되며, 추가 윈도우를 사용할 수도 있다.
- 서비스 (Service)
- UI없이, 백그라운드(background)로 실행된다. (음악재생이나 데이터를 처리 등) 예를들어 음악플레이어는 음악을 선택/재생/되감기/다음곡 등의 작업을 할 수 있는 하나 이상의 액티비티(activity)가 있지만, 사용자가 플레이어 화면을 벗어나도 음악재생이 계속 되도록 음악재생은 액티비티(activity)에 의해 제어되면 안되며, 액티비티(activity)는 하나의 서비스(service)를 시작해야 된다.
- 또한 실행되고 있는 서비스(service)에 접속하는 것이 가능하며, 음악플레이어의 경우 이 인터페이스를 통해 사용자는 재생 중에도 음악을 멈추거나/재생하거나/다음곡으로 넘어가는 일이 가능하다.
- 브로드캐스트 리시버 (Broadcast receiver)
- 어플리케이션은 브로드캐스트(배터리 부족, 시간대변경, 언어 변경 등) 공지를 수신하고, 필요 시 응답할 수 있도록 임의의 수의 브로드캐스트 리시버를 가진다.
- 컨텐트 제공자 (Content provider)
- 어플리케이션에서 어떤 정보를 가져오고자 행위의 중심이다. 주소록, 미디어, 북마크, 콜로그 등 디바이스에 저장되어 있는 다양한 데이타를 외부 어플리케이션이 가져가거나 업데이트 할 수 있는 방법을 노출시켜준다. Content Provider 를 사용하거나 직접 구현한다.
- 개발 시 URI를 이용하여 어떠한 Content Provider 를 사용할지 지정하고, SQL 문을 이용하여 쿼리를 전송 하고, Cursor 를 이용하여 그 결과를 탐색한다. Content Provider 는 만들기 쉽고 사용하기 쉬우며, 자신들이 수행하기로 한 일을 수행하고 그 나머지는 신경 쓰지 않는다.
Android SDK 설치
- Android SDK Download: http://developer.android.com/sdk/index.html
- Android SDK Install: http://developer.android.com/sdk/installing/index.html
Android API Guides | |||||
(AndroidMenifest.xml) |
|
|
|
| |
Other topics
- Android Studio
- Android:Process
- Android:Debugging
- Android:Debugging:Wireless - 무선 디버깅 방법
- Android debug bridge (adb)
- Android:Decompile
- Android:Email
- Android:Filesystem
- Android:FFmpeg: FFmpeg on Android.
- Android:HttpClient
Java topics
- 암호화 (MD5): Java.security.MessageDigest
Commandline Tools
Emulators
- Genymotion
- Andro VM
- Anbox
- Android-x86
- Shashlik
- ARChon
- Andy OS
- BlissOS
Gradle Build
Examples
- Android:Example: 간단한 안드로이드 예제.
- Java:Example: 간단한 자바 예제.
- Java:Example:GlobalSetting: 전역으로 사용될 설정(Setting)변수를 관리한다.
- Android.opengl.GLSurfaceView#Example: Android GLSurfaceView Sample.
- Android:Example:DipCalc: Android의 dip와 pixel의 단위를 변환할 수 있다.
- Android:Example:DisplayInfo: Android의 화면장치 정보를 획득할 수 있다.
- Android.content.SharedPreferences:Example: Android의 사용자정보(Preference)를 Save/Load할 수 있다.
- Android:Example:SpinnerDialog: Android의 SPINNER-TYPE 대화상자 출력방법.
- Android:Example:Png2Mp4: png이미지를 mp4로 변환하는 샘플 프로그램.
- Android:Example:MusicInfo: 안드로이드의 음악정보를 획득할 수 있는 샘플 클래스.
- Android:Example:DirectoryManager: 안드로이드에서 사용할 수 있는 미리 정의된 디렉토리 목록을 획득할 수 있도록 도와준다.
- Android:Example:SocketServer: 안드로이드에서 Socket Server와 Socket Client을 만드는 샘플 예제.
- Java.lang.String:InitialConsonant: 한글 초성검색 클래스 예제 (InitialConsonant)
- Android:Example:ImageAdapter: (Geosoft Roadie Android) 이미지 + 문자열 선택형(아이템 선택 가능) 리스트 박스 클래스.
- Android:Example:SpinnerBox: (Geosoft Roadie Android) 스피너(Spinner) 프로그래스 아이콘 다이얼로그 박스 출력 클래스.
- Android:Example:NdkOpenGLESGeometry: (Geosoft Roadie Android) NDK측 에서 OpenGLES를 사용한 기하구조 렌더링.
- SMS-Forward: 문자오면 다른 전화 또는 텔레그램 또는 웹훅 으로 전달.
Design
- Icon#Android icon design - Android 아이콘 디자인.
Tutorials
- Android:SuperdroidTutorials: 슈퍼드로이드 안드로이드 기본강좌.
Libraries
- AndroidAnnotations: AndroidAnnotations is an Open Source framework that speeds up Android development.
- GlowPadView: The GlowPadView library is basically Android’s Lock Ring.
- NewQuickAction3D: Create QuickAction dialog with Gallery3D app style.
- HttpClientAndroidLib: Apache's HttpClient 4.3 repackaged for Android.
- android-aac-enc: Encode AAC files in Android.
- ActionBarSherlock: ActionBarSherlock is an extension of the support library designed to facilitate the use of the action bar design pattern across all versions of Android with a single API.
- MagicTextView: Bringing the magic of Word Art to Android.
- Android-Scripting: Scripting Layer for Android brings scripting languages to Android.
- Android Asynchronous Http Client: A Callback-Based Http Client Library for Android
- SlidingMenu: An Android library that allows you to easily create applications with slide-in menus.
- Android Query (AQuery)
- Boost for Android: Android port of Boost C++ Libraries
- DragSortListView: Android ListView with drag and drop reordering.
- FadingActionBar
- Stetho: 크롬 브라우저의 inspect UI를 이용해 각종 정보(Network, SQLite, SharedPreference, UI) 조회
- KeakCanary
- HoloCircleSeekBar
- IndexableListView
Android:ViewPager
- AndroidViewPagerIndicator: Paging indicator widgets that are compatible with the
ViewPager
from the Android Support Library to improve discoverability of content. - DirectionalViewPager
- JazzyViewPager
Testing
- Robolectric: Test-Drive Your Android Code.
Multimedia
- ITEC-MediaPlayer: Android video player library with exact seek, DASH and GLES support.
- ExoPlayer: https://github.com/google/ExoPlayer
- MultimediaForAndroidLibrary: https://github.com/sonyxperiadev/MultimediaForAndroidLibrary
- Vitamio
Scripting
Favorite
- 7 best Android libraries that Java developer should know about
- Dagger: Dagger is a really lightweight dependency injection with no extra bells and whistles.
- LeakCanary: A memory leak detection library for Android and Java.
- ZXing: Using Barcodes and QR codes has become a standard already in the machine-readable data world.
- Retrofit: A type-safe HTTP client for Android and Java
- Libphonenumber: Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers.
- Tape: A lightning fast, transactional, file-based FIFO for Android and Java.
- Jitpack.io: Easy to use package repository for Git
- Android-PullToRefresh: ListView, ScrollView, ViewPager, WebView 등 새로고침 기능의 View를 만들어 준다.
- ActionBarSherlock: 허니컴부터 적용된 액션바를 이전버전에도 사용할 수 있게 해준다.
- AQuery: jQuery의 Android버전.
- AndroidAnnotations: 안드로이드를 위한 빠른 개발과 코드단축 Annotation.
- Android-SmartImageView: 비동기화 이미지 로딩을 위한 ImageView.
- IndexableListView: 리스트뷰의 알파벳 인덱스 기능.
- QuickScroll: 리스트뷰의 알파벳 인덱스 기능(IndexableListView와 같다).
- StickyListHeaders: ListView의 Section Header 정보를 넣을 수 있다.
- MenuDrawer: 좌측 또는 우측의 슬라이드 메뉴를 구성 할 수 있다.
- SlidingMenu: 좌측 또는 우측의 슬라이드 메뉴를 구성 할 수 있다(MenuDrawer와 같다).
- FadingActionBar: 리스트뷰 스크롤시 헤더 컨텐츠에 따라 액션바의 알파값이 변한다.
- DragSortListView: ListView Sorting.
- ListViewAnimations: ListView 스크롤시 애니메이션(Ex. Google+).
- ViewPagerIndicator: ViewPager Indicator.
- PagerSlidingTabStrip: ViewPager Indicator(ViewPagerIndicator와 동일).
- JazzyViewPager: ViewPager 스크롤시 애니메이션효과 적용.
- ViewPager3D: ViewPager 스크롤시 3D 효과적용.
- DirectionalViewPager: ViewPager의 좌우, 아래위 스크롤.
- VerticalSeekBarAndroid: 수직 SeekBar.
- HoloCircleSeekBar: 원형으로 생긴 SeekBar.
- MultiChoiceAdapter: ListView, GridView에서 다중선택을 쉽게 할 수 있도록 도와준다.
- TwoWayGridView: GridView를 가로, 세로방향으로 스크롤 되도록 한다.
- ScrollBarPanel: 스크롤바 옆에 View를 생성(Path 2.0에서 볼 수 있는 기능).
- ScaleImageView: Pinch 액션으로 Zoom in/out이 가능한 ImageView.
- Mp3VoiceRecorderSampleForAndroid: 안드로드에서 AudioRecord와 LAME을 사용하여 녹음된 음성을 MP3로 저장하는 샘플 프로젝트.
Device
- Nexus7
- Nexus 5X
- Samsung S20 Ultra
Tools
Documentations
- 131014 Android Design Guideline
- 내가 Zekitalk에 근무했을 때 만들었던 안드로이드 디자인 가이드 워드 파일
-
131014-Android_Design_Guideline.zip
See also
- Android Development Tools (ADT)
- Android application package (APK)
- Apktool (hacking & decompile)
Favorite site
- Android web site
- Android 개발자 사이트
- Android developers blog
- Android GIT Source repository
- Wikipedia (en) Android에 대한 간단한 설명
- Wikipedia (en) Android Software Development 에 대한 설명
- KAndroid (ko)
Tutorials
Tools
Guide
- Android에서 @Inject, @Test
- Android MVP 무작정 따라하기 - Google Architecture Model(영상 포함)
- 안드로이드/Android - 빌드시간 최적화하기(빌드시간 70%감소)
- Android's 2D Canvas Rendering Pipeline
- 안드로이드 게임 제작 강좌 - #5. Thread의 우아한 종료
- PAAD 11장 - 고급 안드로이드 개발
- 레이아웃 뷰의 위치
- [추천] 안드로이드: 이클립스에서 네이티브 애플리케이션을 디버그 모드로 서명하기
- 이클립스에서 애플리케이션 Keystore 생성 및 사인하기
- Android: Screen Densities, Sizes, Configurations, and Icon Sizes
- [추천] Android: Device Screen 관련 용어 정리
- [추천] 안드로이드 기기의 해상도와 dpi 그리고 이를 확인하는 소스코드
- Android 성능을 위한 설계 by 이동훈님 9
- 이클립스에서 안드로이드 SDK 소스 연결하기 10
역공학 (Reverse engineering) 관련
- 모바일 앱에서 AI 모델 추출하기 | GeekNews
- [원문] You wouldn't download an AI - by Altay Akkus - Altay's Blog
- Frida는 거의 모든 운영체제에서 실행 가능한 동적 계측 도구로, 실행 중인 프로세스에 연결하여 동작을 변경할 수 있음
앱 배포 관련
References
-
How_to_root_or_update_a_Nexus_Android_using_only_open_source_tools_-_Aaron_Horler.pdf ↩
-
AndroidDesignPreview-0.3.2.tar.gz ↩
-
DPI_Calculator-PPI_Calculator_html.zip ↩
-
Pro_Android_Cpp_with_the_NDK.pdf ↩
-
Wikiware-textcube.blogspot_-_Android_Application_Basic.pdf ↩
-
Android_Design_Downloads_20131106.zip ↩
-
Consideration-of-android-performance.pdf ↩
-
Android_sdk_connect_source.pdf ↩