Back

안드로이드 기초 정리

안드로이드 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 불리언 데이터를 키-값 쌍으로 추가
comments powered by Disqus