웹사이트 검색

Android 빌드 유형 및 제품 맛


이 튜토리얼에서는 Android 빌드 유형 및 제품 특징에 대해 설명합니다. 특히 최소한의 차이로 애플리케이션을 만들 때 Android 개발을 더 쉽고 빠르게 만드는 방법을 살펴보겠습니다. 이러한 차이는 테마 및 앱 아이콘의 변경만큼 작을 수도 있고 개발, 베타, 프로덕션 등과 같은 제품의 여러 단계에 대한 것일 수도 있습니다. Android Studio에서 새 프로젝트를 만들고 기본 활동을 선택합니다. 다음 섹션에서는 빌드 유형을 살펴보겠습니다.

Android 빌드 유형

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

다른 빌드 유형에도 속성을 추가할 수 있습니다. 그 전에 몇 가지 signingConfigsandroid 블록에 추가해 보겠습니다.

signingConfigs {
        release {
            storeFile file("release-key.keystore")
            storePassword 'password'
            keyAlias 'alias'
            keyPassword 'journaldev'
        }
    }

릴리스 키 이름과 Build | 위의 코드가 작동하도록 서명된 APK를 생성합니다.

새로운 빌드 유형과 더 많은 속성을 buildConfig에 추가해 보겠습니다.

buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug{
            applicationIdSuffix ".debug"
            versionNameSuffix "-debug"
        }

        beta{
            signingConfig signingConfigs.release
            applicationIdSuffix ".beta"
            versionNameSuffix "-beta"
        }
    }

빌드 구성

BuildConfig.java 클래스는 다른 buildFlavor가 생성될 때 자동으로 생성됩니다. build.gradle에서 빌드 구성 필드를 설정할 수 있습니다.

buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug{
            applicationIdSuffix ".debug"
            versionNameSuffix "-debug"
            buildConfigField "String", "TYPE", '"I AM A DEBUG NINJA"'
        }

        beta{
            signingConfig signingConfigs.release
            applicationIdSuffix ".beta"
            versionNameSuffix "-beta"
            buildConfigField "String", "TYPE", '"I AM A BETA NINJA"'
        }
    }

Android 제품 맛

Android 제품 플레이버는 다양한 앱 버전을 만드는 데 사용됩니다. 앱 버전은 무료 또는 유료일 수 있습니다. 그들은 다른 주제와 텍스트를 가질 수 있습니다. 서로 다른 환경이나 API를 사용할 수 있습니다. 응용 프로그램에서 두 가지 제품 맛을 무료 및 유료로 지정해 보겠습니다.

productFlavors{

        free{
            applicationId "com.journaldev.androidproductflavors.free"
        }

        paid{
            applicationId "com.journaldev.androidproductflavors.paid"
        }
    }

build.gradle의 위 코드에서 플레이버를 성공적으로 생성하려면 플레이버 차원을 설정해야 합니다. 플레이버 차원은 이름별로 플레이버를 그룹화하는 방법입니다. 지금은 단일 그룹만 사용하고 있습니다. defaultConfig 블록에 다음 줄을 추가합니다.

flavorDimensions "default"

Android 빌드 변형은 빌드 유형과 제품 버전을 결합합니다. 그들은 모든 조합의 매트릭스를 만듭니다.

이제 우리 프로젝트에서 main 폴더는 모든 앱 버전의 공통 논리로 구성됩니다. 플레이버 특정 코드를 작성하려면 플레이버와 동일한 이름으로 폴더를 생성합니다.

  • flavor 폴더에 같은 이름을 가진 Java 클래스는 기본 폴더를 재정의하지 않습니다.
  • mainres 폴더에는 모든 종류에 공통적인 디렉토리만 있어야 합니다.

이제 프로젝트에 무료 및 유료 폴더를 만들고 각각에 대해 별도의 res 폴더를 만들어 보겠습니다.

프로젝트 구조

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textViewLabel"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

textView에서 strings.xml의 문자열을 설정합니다. 각 플레이버에 대한 strings.xml 리소스에는 동일한 키가 포함되어 있습니다.

<string name="textViewLabel">Hello free</string> - For free
<string name="textViewLabel">Hello Paid</string> - For paid.

MainActivity.java:

package com.journaldev.androidproductflavors;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Flavour: "+BuildConfig.FLAVOR + " My type: "+BuildConfig.TYPE , Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

매니페스트 자리 표시자

안드로이드제품맛

GitHub 리포지토리에서 다운로드