본문 바로가기

Application/Android Kotlin

[Android] quick-start android (AndroidManifest.xml 분석)

웹과 마찬가지로 로그인, 회원가입은 firebase 연동을 통해 구현할 수 있다. 관련해서 공식 문서도 잘 되어있었다. 다만 단순히 코드의 부분부분만 나와있는 경우에는, 내가 아직 초보자라 그런지 직접적으로 사용하기 어려웠다. 

 

firebase를 이용한 샘플 코드(quickstart-android)는 전체 코드가 나와있어 사용하기 용이하였다. 

 

https://github.com/firebase/quickstart-android/tree/master/auth

 

이는 firebase 를 이용해서 다양한 로그인 방법(이메일+비밀번호, 구글, facebook oauth, MFA) 등에 대한 구현 코드이다. 코드의 양은 좀 되지만 구조가 단순하고 직관적이었다. 학습용으론 제격으로 보였다.

 

전체 코드를 통으로 분석하는 것은 아직 내게 너무 추상적이다. 실제로 실행해보며, 작은 부분 어떻게 동작하는지 파악하는데 집중하였다. 아래는 AndroidManifest.xml 에 대해 공부한 내용이다. 

AndroidManifest.xml

앱의 정보와 설정을 정의하는 XML 파일이다. 앱의 루트 디렉터리에 위치하며, Android 앱을 개발할 때, 필수적으로 작성해야 한다. 아래와 같은 정보들을 포함할 수 있다.

 

  1. 앱 패키지 이름 (Package Name):
    <manifest> 요소의 package 속성에 정의된다. 앱을 고유하게 식별하는 데 사용되며, Android 디바이스에 설치될 때, 이 패키지 이름을 기반으로 앱을 관리한다. 

  2. 권한 (Permissions):
    <users-permission> 요소를 사용하여 앱이 필요로 하는 권한을 정의한다. 

  3. 앱 아이콘과 이름: 
    <application> 요소의 android:iconandroid:label 속성을 사용하여 앱의 아이콘과 이름을 지정한다. 

  4. 진입점 액티비티 (Launcher Activity):
    앱이 시작될 때 실행되는 액티비티를 지정. 이 액티비티는 <activity> 요소 내에 <intent-filter>로 정의된 MAIN 액션과 LAUNCHER 카테고리를 가진다.

  5. 액티비티 및 서비스 등 앱 구성 요소:
    <activity>, <service>, <receiver>, <provider> 등의 요소를 사용하여 앱 내의 화면, 서비스, 브로드캐스트 리시버 및 콘텐트 프로바이더를 정의한다. 

  6. 인텐트 필터 (Intent Filters):
    각 활동 및 서비스에 대한 인텐트 필터를 정의하여 다른 앱과의 상호 작용을 지정한다. 

  7. 테마 및 스타일: 
    <application> 및 각 액티비티에 대한 테마 및 스타일을 지정한다. 

 

<?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.simple">

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

    <application
        android:name="androidx.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">


        <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>

        <activity
            android:name=".PasswordlessActivity"
            android:label="@string/label_passwordless"
            android:launchMode="singleTop"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <data
                    android:host="your-project-id.firebaseapp.com"
                    android:scheme="https" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <!-- Facebook Configuration -->
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"
            tools:replace="android:value" />

        <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>

        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            tools:replace="android:theme" />
    </application>

</manifest>

 

위 코드는 실제 샘플 코드의 AndroidManifest.xml 이다. 아래와 같이 분석할 수 있다. 

 

  1. 앱 패키지 이름 (Package Name):
    • package 속성에는 앱의 패키지 이름인 "com.example.simple"이 지정되어 있다.
  2. 권한 (Permissions):
    • <uses-permission> 요소를 사용하여 앱이 필요로 하는 인터넷 액세스 권한(android.permission.INTERNET)을 정의되어 있다. 
  3. 앱 아이콘과 이름:
    • <application> 요소 내에 android:icon과 android:label 속성을 사용하여 앱의 아이콘 및 이름을 설정된다. 
  4. 진입점 액티비티 (Launcher Activity):
    • MainActivity가 진입점 액티비티로 설정되어 있다. MAIN 액션과 LAUNCHER 카테고리를 가지고 있어 앱이 시작될 때 이 액티비티가 실행된다. 
  5. 액티비티 및 서비스 등 앱 구성 요소:
    • 두 개의 액티비티 (MainActivity 및 PasswordlessActivity)가 정의되어 있다. PasswordlessActivity는 웹 링크를 열 수 있는 브라우저와 연동될 수 있도록 인텐트 필터가 정의되어 있다. 
    • 또한 Facebook SDK와 관련된 com.facebook.FacebookActivity도 정의되어 있다. 
  6. 인텐트 필터 (Intent Filters):
    • MainActivity에는 MAIN 액션과 LAUNCHER 카테고리를 갖는 인텐트 필터가 있어 앱의 진입점 역할을 한다. 
    • PasswordlessActivity에는 VIEW 액션 및 웹 URL(https://your-project-id.firebaseapp.com)에 대한 데이터 스키마와 호스트를 갖는 인텐트 필터가 정의되어 있습니다.
  7. 테마 및 스타일:
    • 앱의 테마는 android:theme 속성을 통해 AppTheme로 설정되어 있다.
    • Facebook SDK와 관련된 com.facebook.FacebookActivity는 Theme.Translucent.NoTitleBar 스타일을 사용하도록 설정되어 있다.