Android

Android - 애플리케이션 배포 준비하기 [AndroidManifest 설정 및 ProGuard 적용]

임베디드 친구 2024. 11. 29. 15:36
반응형

안드로이드 애플리케이션을 개발하는 과정에서, 배포 준비는 매우 중요한 단계입니다. 애플리케이션이 사용자에게 배포될 때의 안정성과 보안을 확보하기 위해 필요한 설정들이 많이 존재합니다. 이번 포스팅에서는 AndroidManifest 파일의 주요 설정ProGuard를 통한 난독화 적용을 중심으로 배포를 준비하는 과정을 살펴보겠습니다. 이 가이드를 통해 애플리케이션을 더욱 안전하고 효과적으로 배포할 수 있는 방법을 익히게 될 것입니다.

1. AndroidManifest 설정하기

AndroidManifest.xml은 모든 안드로이드 애플리케이션의 핵심적인 설정 파일입니다. 애플리케이션의 구성 요소, 권한, 버전 정보 등을 지정하는 중요한 파일이므로 배포 전 단계에서 주의 깊게 설정해야 합니다.

주요 설정 요소들

1.1 패키지 이름 설정

패키지 이름은 애플리케이션을 식별하는 중요한 요소입니다. 배포 준비를 할 때는 반드시 고유한 패키지 이름을 설정해야 합니다. 예를 들어:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    ...
</manifest>

패키지 이름은 앱이 Google Play Store에서 다른 앱들과 충돌하지 않도록 유일하게 설정해야 합니다.

1.2 버전 정보 설정

애플리케이션의 버전 정보는 versionCodeversionName으로 나누어집니다. 배포 전에는 이 정보를 최신으로 업데이트하여 사용자가 새 버전을 받을 수 있도록 해야 합니다.

<manifest ...>
    <application ...>
        ...
    </application>

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="33" />

    <meta-data
        android:name="android.support.VERSION"
        android:value="33" />
</manifest>
  • versionCode: 내부적으로 사용하는 버전 코드로, 숫자로 관리되며 업데이트 시마다 증가해야 합니다.
  • versionName: 사용자에게 표시되는 버전 이름으로, 1.0, 1.0.1 등 사람이 이해하기 쉬운 형식으로 작성됩니다.

1.3 권한 설정

애플리케이션이 특정 기능에 접근하기 위해서는 적절한 권한을 AndroidManifest.xml에 명시해야 합니다. 예를 들어, 인터넷 접근 권한이나 위치 정보 접근 권한은 다음과 같이 설정할 수 있습니다.

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

사용자가 설치 시에 앱에서 요구하는 권한을 명확하게 인지할 수 있도록, 반드시 필요한 권한만을 요청하는 것이 중요합니다.

2. ProGuard 적용하기

배포 과정에서 애플리케이션의 코드 보호는 매우 중요한 요소입니다. ProGuard는 코드 난독화와 최적화를 통해 애플리케이션의 보안을 강화하는 도구입니다. 이를 통해 리버스 엔지니어링을 어렵게 하고, APK 파일 크기를 줄이는 등의 효과를 얻을 수 있습니다.

2.1 ProGuard 설정하기

ProGuard는 보통 proguard-rules.pro 파일에서 설정할 수 있습니다. 이 파일은 프로젝트의 app 디렉토리에 위치하며, 다음과 같은 기본 설정을 포함할 수 있습니다.

# 기본적으로 모든 코드 난독화
-keep class com.example.myapp.** { *; }

# 특정 클래스나 메서드 유지
-keepclassmembers class * {
    public static void main(java.lang.String[]);
}

# 라이브러리 클래스 유지 (예: Gson)
-keep class com.google.gson.** { *; }

2.2 ProGuard 활성화하기

ProGuard를 활성화하려면 build.gradle 파일에서 난독화를 위한 설정을 추가해야 합니다. release 빌드 타입에서 ProGuard 파일을 참조하도록 설정할 수 있습니다.

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
  • minifyEnabled true: 코드 최적화와 난독화를 활성화합니다.
  • proguardFiles: ProGuard 설정 파일을 참조합니다.

2.3 ProGuard 적용 시 주의사항

ProGuard를 적용할 때, 라이브러리나 특정 클래스가 난독화되어서는 안 되는 경우가 있습니다. 예를 들어, Reflection을 사용하는 경우 난독화된 클래스 이름으로 인해 문제가 발생할 수 있으므로 이러한 클래스는 -keep 규칙을 통해 유지해야 합니다.

3. 배포 준비를 위한 기타 설정들

3.1 디버그 및 릴리즈 키스토어 설정

애플리케이션을 배포하기 위해서는 릴리즈 키스토어를 사용하여 서명해야 합니다. build.gradle 파일에서 다음과 같이 서명 설정을 추가할 수 있습니다.

android {
    signingConfigs {
        release {
            keyAlias 'my-key-alias'
            keyPassword 'my-key-password'
            storeFile file('path/to/keystore.jks')
            storePassword 'my-store-password'
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}
  • keyAlias: 키스토어 내의 키에 대한 별칭입니다.
  • storeFile: 키스토어 파일의 경로입니다.
  • storePasswordkeyPassword: 키스토어와 키의 비밀번호입니다.

3.2 ProGuard 결과 검토

ProGuard를 적용한 후에는, 난독화된 코드가 정상적으로 동작하는지 검토하는 과정이 필요합니다. 이를 위해 R8 로그나 mapping.txt 파일을 참고하여 문제가 발생하는 지점을 파악할 수 있습니다.

4. Kotlin 예제 코드로 살펴보기

아래는 AndroidManifest와 ProGuard 설정을 통해 안전하게 배포할 수 있는 간단한 애플리케이션의 Kotlin 코드 예제입니다.

package com.example.myapp

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

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

이 코드는 간단한 액티비티를 정의하고 있지만, 배포 전 AndroidManifest와 ProGuard 설정을 통해 애플리케이션의 보안성과 안정성을 강화할 수 있습니다.

결론

배포 준비 과정에서 AndroidManifest 설정과 ProGuard 적용은 애플리케이션의 안정성과 보안을 위해 반드시 필요한 작업입니다. 올바르게 설정함으로써 사용자에게 더 나은 품질의 애플리케이션을 제공할 수 있으며, 리버스 엔지니어링으로부터 코드를 보호할 수 있습니다. 이 포스팅을 참고하여 여러분의 애플리케이션을 더욱 안전하게 배포해 보세요!

반응형