티스토리 뷰

안드로이드 앱 개요

1. 안드로이드 앱

  • 앱 컴포넌트(들), 매니페스트 파일, 리소스
  • 확장자 .apk인 아카이브 파일로 컴파일됨
  • 서로 다른 앱 간 분리: 각 앱은 별도 리눅스 프로세스에서 실행되며 자체 가상머신을 가짐

2. 앱 컴포넌트 유형

  • Activity
  • Broadcast receiver
  • Content provider
  • Service

3. 인텐트

  • 하나의 앱에서 동일 앱 내 컴포넌트 혹은 다른 앱 내 컴포넌트를 인텐트를 통해 시작시킬 수 있음
  • 명시적 인텐트: 시작시킬 컴포넌트의 클래스 이름을 명확히 설정하여 해당 컴포넌트를 시작
  • 암시적 인텐트: 시작시킬 작업 유형을 바탕으로 안드로이드 시스템이 장치 내 해당 작업 유형을 만족하는 컴포넌트를 시작

4. 매니페스트 파일

  • 앱 구성요소 (activity, broadcast receiver, content provider, service) 선언
  • 앱 요구사항 선언: 사용자 권한(예: 인터넷 접근, 연락처 접근), 최소 요구 안드로이드 버전, H/W 요구 기능(예: 카메라 필요 등)

5. 리소스

  • 이미지, 오디오, 메뉴, 색상 등 리소스를 소스코드와 분리

안드로이드 앱 구조

프로젝트 파일

 

AndroidManifest.xml (매니페스트 파일)

  • <uses-permission android:name="android.permission.INTERNET" />: 애플리케이션이 인터넷에 접근 가능하도록 허용
  • 해당 문장을 추가하지 않으면 애뮬레이터 실행 후 앱을 통해서 인터넷 접속 시 컴퓨터 강제 종료 등 오류 발생 가능!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.test">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Test"
        android:usesCleartextTraffic="true"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

activity_main.xml (레이아웃 리소스 파일)

  • 해당 파일이 없어도 MainActivity.java에서 화면을 구성할 수 있음, optional한 파일
<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

 

MainActivity.java

package com.example.exam;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
공지사항
링크