안드로이드 4대요소
Activity
- 사용자와 상호작용하기 위한 진입점, 사용자 인터페이스를 포함한 화면 하나를 나타냄
<manifest ... >
<application ... >
<activity android:name="com.example.myapp.MainActivity" ... >
</activity>
</application>
</manifest>
Service
- 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점
<manifest ... > ...
<application ... >
<service android:name=".ExampleService" /> ...
</application>
</manifest>
BroadCast Receiver
- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 컴포넌트
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
Contents Provider
- 콘텐츠 제공자는 파일 시스템, SQLite 데이터 베이스, 웹상이나 앱이 접근할 수 있는 다른 모든 영구 저장소에 저장 간으한 앱 데이터의 공유형 집합을 관리함
<provider
android:name=".TrackUserContentProvider"
android:authorities="com.android.insecurebankv2.TrackUserContentProvider" android:exported="true" >
</provider>
애플리케이션의 권한 관리 (UID 할당)
- 안드로이드는 리눅스 커널을 기반으로 구축 됨
- 안드로이드에 설치된 모든 애플리케이션은 일반 사용자 권한으로 실행됨
- 접근 시 사용자의 동의를 받도록 하고 있음
안드로이드 디렉토리 구조
디렉토리 |
설명 |
/system/app |
시스템에의해미리설치된앱경로 |
/data/app |
사용자에의해설치된앱경로 |
/data/data/<package> |
설치앱패키지경로,루트권한으로접근가능 |
/data/data/<package>/files |
애플리케이션이 소유한 데이터 또는 파일 저장 (so파일, data파일, ini 파일 등이 포함됨) |
/data/data/<package>/lib |
애플리케이션에 요청하는 라이브러리 파일 저장 (so 파일이 존재함) |
/data/data/<package>/databases |
설정 파일, 컨텐츠 파일 등의 쿼리 정보가 포함된 SQLlite 데이터베이스 파일 (db 파일이 존재함) |
/data/data/<package>/cache |
브라우저 캐시같이 일시적인 사용자의 상태정보가 포함 |
/data/data/<package>/shared_prefs |
XML파일로저장이되며,앱에공유되는설정파일 |
/mnt/sdcard or /sdcard |
External/Internal SD Card 경로 |
/system/app/앱이름.apk |
시스템앱공간 세이프모드로 부팅이 될 시에는 시스템 앱들이 가능한 앱들이 실행 |
/data/app/앱이름.apk |
사용자가 다운로드한 앱들의 공간 |
/data/davik-cache |
dex 파일이 보관 |
adb 명령어
옵션 |
설명 |
adb –help |
adb 명령어 도움말 확인 |
adb connect <device_ip_address> |
아이피 주소로 디바이스에 연결 |
adb devices |
연결되어 있는 디바이스 목록 출력 |
adb kill-server |
서버가 실행 중인 경우 종료 |
adb start-server |
서버가 종료된 경우 실행 |
adb shell |
adb를 통해 양방향 셸 실행 |
adb –s <SERIAL> |
지정된 SERIAL 대상 디바이스에 명령어 전송 |
adb install <path_to_apk> |
APK 파일을 지정하여 설치 |
adb uninstall <PACKAGE> |
디바이스에서 앱 패키지 제거 |
adb pull <remote> <local> |
디바이스에서 로컬 컴퓨터로 파일 및 디렉터리를 복사 |
adb push <local> <remote> |
로컬 컴퓨터에서 디바이스로 파일 및 디렉터리를 복사 |
adb logcat |
디바이스 로그 모니터링 |
- 떠있는 패키지 확인 방법
- adb shell dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’
안드로이드 shell command
옵션 |
설명 |
am <command> |
Activity Manager(활동 관리자) 호출 |
am start <intent> |
인텐트에 지정된 Activity를 시작 |
am startservice <intent> |
인텐트에 지정된 Service를 시작 |
am broadcast <intent> |
브로드캐스트 인텐트를 실행 |
am dumpheap <process> <file> |
process의 힙을 덤프하고 file에 작성 |
pm <command> |
Package Manager(패키지 관리자) 호출 |
pm list packages |
모든 패키지 목록 출력 |
pm path <package> |
지정한 패키지의 APK 경로 출력 |
input text <string> |
지정한 텍스트 입력 |
Input keyevent <key code number or name> |
지정한 키 이벤트 입력 |
- 액티비티 실행 명령어
- adb shell am start -n [package name/component name]
- 호출가능한 경우 아래와 같이 exported 속성이 true 여야함
<activity
android:name="com.android.ChangePassword"
android:exported="true"
android:lable="change_password">
</activity>
intent 옵션
옵션 |
설명 |
-a action |
인텐트 작업을 지정 |
-n component |
패키지 이름을 접두사로 구성 요소 이름을 지정 |
-e | –es extra_key extra_string_value |
문자열 데이터를 키-값 쌍으로 추가 |
–ez extra_key extra_boolean_value |
불리언 데이터를 키-값 쌍으로 추가 |