アンドロイドのビルドタイプとプロダクトフレーバー
このチュートリアルでは、Androidのビルドタイプとプロダクトフレーバーについて説明します。これらが私たちのAndroid開発をより簡単かつ速くする方法を見ていきます、特に私たちが最小限の違いを持つアプリケーションを作成する場合です。これらの違いは、テーマやアプリアイコンの変更のように非常に小さなものであるか、dev、beta、productionなどの製品の異なる段階であるかもしれません。Android Studioで新しいプロジェクトを作成し、基本アクティビティを選択してください。次のセクションでは、ビルドタイプを見ていきます。
アンドロイドのビルドタイプ
新しいプロジェクトが作成されると、デフォルトで2つのビルドタイプ/バリアント(デバッグ、リリース)が含まれています。デバッグは、アプリケーションをIDEから直接デバイスに実行する際に使用されるビルドタイプです。リリースは、APKに署名する必要があるビルドタイプです。リリースビルドはプレイストアにアップロードすることが意図されています。リリースビルドタイプでは、逆アセンブルを防ぐためにProGuardを使用してコードを難読化します。次の画像はデフォルトのビルドタイプを示しています。build.gradleにはデフォルトでリリースビルドタイプブロックのみが書かれています。
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
他のビルドタイプにもプロパティを追加することができます。それを行う前に、androidブロックにいくつかのsigningConfigsを追加しましょう。
signingConfigs {
release {
storeFile file("release-key.keystore")
storePassword 'password'
keyAlias 'alias'
keyPassword 'scdev'
}
}
上記のコードが動作するためには、Build | Generate Signed 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"
}
}
applicationIdの接尾辞は、アプリケーションのapplicationIdに文字列を追加します。versionNameも同様に、defaultConfigに存在するバージョン名に追加します。今や3つのビルドバリアントがあります。デバッグビルドをデバイスで実行した後、設定|アプリケーション|アプリ名に移動しました。以下はアプリ情報のスクリーンショットです:下部のバージョン番号が変更されました。これは異なるビルドを区別するために役立ちます。
ビルドの設定
異なる buildFlavor が作成されると、BuildConfig.java クラスが自動生成されます。build.gradle で Build Config のフィールドを設定することができます。
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"'
}
}
ベータビルドのためのBuildConfig
BuildConfig.javaクラスとそのフィールドは、私たちのアクティビティから直接アクセスすることができます。また、buildConfigs内でリソースフィールドを追加することもできます。次の内容をベータのbuildConfigに追加すると、リソース|strings.xmlフォルダに自動的に作成されます。resValue “string”, “my_name”, “Anupam Beta”
アンドロイド製品フレーバー
AndroidのProduct Flavorsは、異なるアプリのバージョンを作成するために使用されます。アプリのバージョンは無料または有料にできます。異なるテーマやテキストを持つことができます。異なる環境やAPIを使用することもできます。アプリケーションで無料と有料の2つのProduct Flavorsを割り当てましょう。
productFlavors{
free{
applicationId "com.scdev.androidproductflavors.free"
}
paid{
applicationId "com.scdev.androidproductflavors.paid"
}
}
上記のbuild.gradleのコードでフレーバーを正常に作成するためには、フレーバーディメンションを設定する必要があります。フレーバーディメンションは、フレーバーを名前でグループ化する方法です。現時点では、われわれは単一のグループのみを使用しています。defaultConfigブロックに以下の行を追加してください。
flavorDimensions "default"
現在、Gradleを同期すると、次のプロダクトフレーバーが提供されます。
Androidのビルドバリアントは、ビルドタイプとプロダクトフレーバーを組み合わせています。これにより、すべての組み合わせの行列が作成されます。
私たちのプロジェクトでは、主フォルダにはすべてのアプリバージョンで共通のロジックが含まれています。フレーバー固有のコードを書くためには、フレーバーと同じ名前のフォルダを作成してください。
- The java classes with the same name in the flavor folders won’t override the main folder.
- The res folder in the main should only have those directories that are common to all flavors.
今、プロジェクト内に無料フォルダと有料フォルダを作成し、それぞれのために独立したリソースフォルダを作成しましょう。
プロジェクトの構造
フリーと有料のフォルダーには、それぞれのフレーバーごとにアプリアイコンとstrings.xmlの異なるresフォルダーを作成しました。最終的なbuild.gradleファイルは以下のようになります。これはcontent_main.xmlクラスです。
<?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.scdev.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);
}
}
私たちはデバイス上で「freeDebug」と「paidDebug」という2つのフレーバーを実行しました。これがそれらの様子です:わぁ!左側のアプリは無料で、右側のアプリは有料です。それぞれを起動しましょう。以下は、それらのスクリーンショットです。わぁ!異なる色のFloatingActionButtonとアプリケーション名です。FABをクリックしてみてください。フレーバーに特有のSnackBarテキストが表示されます。
マニフェストのプレースホルダー
以下のように、AndroidManifest.xmlファイル内で各製品フレーバーのアプリ名を直接設定することができます。別々のstrings.xmlファイルを作成する必要はありません。build.gradleでのManifest Placeholdersを使用します。以下にその定義方法が示されています。これで、AndroidManifest.xmlファイルでappLabelキーを使用することができます。このチュートリアルはこれで終了です。以下のリンクからプロジェクトをダウンロードできます。
アンドロイドのプロダクトフレーバー
GitHubリポジトリからダウンロードしてください。