web-dev-qa-db-ja.com

GradleでアセンブルするときにAndroidアプリパッケージ名を変更するには?

Gradleを使用してAndroidアプリケーションのパッケージ名を変更することはできますか?

一意のパッケージ名を持つ同じアプリの2つのコピーをコンパイルする必要があります(したがって、市場に2回公開できます)。

45
Seraphim's

このようなことができます

Android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    flavorDimensions "flavor1", "flavor2"

    productFlavors {
        flavor1 {
            applicationId "com.example.flavor1"
            versionCode 20
        }

        flavor2 {
            applicationId "com.example.flavor2"
            minSdkVersion 14
        }
    }
}

フィールドを変更することもできますAndroid.defaultConfig.applicationId一度限りのビルドを行いたい場合。

から取得: http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration

53
Ethan

product flavoursEthanの答えのように を使用するより簡単な代替手段として、build typesをカスタマイズすることもできます。

アプローチの選択方法:

  • debugreleaseapkの両方をデバイスにインストールできるようにするために異なるパッケージ名が必要な場合は、build type以下のアプローチ、 Gradleプラグインドキュメントが同意します 。この場合、フレーバーは過剰です。 (特にafterストアに公開し、新しい機能を開発している後は、すべてのプロジェクトがデフォルトでこれを行うべきだと思います。)
  • 製品フレーバーには有効な用途があります。典型的な例は無料版と有料版のアプリです。そのような場合、 イーサンの答え を確認し、ドキュメントも読んでください: Gradleビルドの構成 および Gradleプラグインユーザーガイド

(2つのアプローチを組み合わせて、すべてのビルドバリアントが個別のパッケージ名になることも考えられますが、これはテストしていません。)

ビルドタイプの構成

debugビルドタイプ、およびその他すべての非releaseタイプの場合、applicationIdSuffixを定義します。デフォルトのパッケージ名。 ( Android Gradleプラグインバージョン0.11より前 この設定はpackageNameSuffixと呼ばれていました。)

Android {
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '-DEBUG'
        }

        beta {
            applicationIdSuffix '.beta'
            versionNameSuffix '-BETA'

            // NB: If you want to use the default debug key for a (non-debug) 
            // build type, you need to specify it:
            signingConfig signingConfigs.debug 
        }

        release {
            // signingConfig signingConfigs.release
            // runProguard true
            // ...
        }

    }
}

上記のdebugreleaseはいくつかの側面が設定されたデフォルトのビルドタイプであり、betaは完全にカスタムのビルドタイプです。さまざまなタイプを作成するには、通常どおりassembleDebugassembleBetaなどを使用します。

同様に、versionNameSuffixを使用して、AndroidManifestのデフォルトのバージョン名をオーバーライドできます(非常に便利です!)。例えば。上記で設定した「0.8」→「0.8-BETA」。

リソース:

私自身はこれまでproductFlavorsをこの正確な目的のために使用していましたが、ビルドタイプのカスタマイズは私のニーズにより近いように思われます。

更新(2016):それ以来、すべてのプロジェクトでこのアプローチを使用してきました。 Android Best Practices Futuriceのガイドにも含まれています。

63
Jonik

1.0.0+のgradleプラグインバージョンでは、 移行ガイド に記載されているようにapplicationIdを使用する必要があります

ProductFlavorsで名前が変更されたプロパティ

packageName => applicationId

したがって、build.gradleで次を使用します。

productFlavors {
   flavor1 {
      applicationId "com.example.flavor1"
   }

   flavor2 {
      applicationId "com.example.flavor2"
   } 
}
10
Amio.io

イーサンの答えから、flavorGroupsとpackageNameは両方とももう利用できません。以下は2015年3月の時点で機能します。

Android {
...

defaultConfig {
    minSdkVersion 8
    versionCode 10
}

flavorDimensions "flavor"

productFlavors {
    flavor1 {
        flavorDimension "flavor"
        applicationId "com.example.flavor1"
        versionCode 20
    }

    flavor2 {
        flavorDimension "flavor"
        applicationId "com.example.flavor2"
        minSdkVersion 14
    }
}
}
9
sivag1