私は、ビルドシステムとしてGradleを使用したAndroidアプリケーションに取り組んでいます。
私の目的は、値(パッケージ名)をapplicationId
として使用することです。
productFlavors {
orange {
applicationId "com.fruits.Android.orange"
// ...
しかし、それをBuildConfig
を介して公開し、Javaコードがアクセスできるようにします。
このアクセスは、フレーバーの外部から行う必要があります(つまり、無料バージョンのアプリは、ユーザーにPlayストアでのアップグレードを要求できるように、有料バージョンのパッケージ名を知っている必要があります)。
だから私はそのようなことをしたいと思います:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
Build_gradle全体に表示され、スクリプトを壊さないようにorangeProPackage
を定義する方法がわかりません。
いくつかの異なるフレーバーがあるので、どうにかしてこれらすべての定数をそのようにグループ化できれば最高でしょう(私は推測しますか?):
def proPackages = [
orange: "..."
Apple: "..."
banana: "..."
]
次に、proPackages.orange
などのように、わかりやすく説明的な方法でそれらを参照します。
問題は、それを達成する方法ですか?
これは GradleでJavaで使用可能な変数を宣言することは可能ですか? の複製ではありません。
私はその質問を見ました(そして他のいくつか)。私はbuildConfigFieldsを宣言する方法を知っています。すでにたくさんあります。私の質問は、buildConfigField
およびapplicationId
と同じ値を再利用することです。
Build.gradle全体に表示され、スクリプトを壊さないようにorangeProPackageを定義する方法がわからないだけです。
プロジェクトルートのgradle.properties
に配置できます。他の.properties
ファイルと同様に、これは単なるKey-Valueストアです。
ORANGE_PRO_PACKAGE=com.morawski.awesomeapp
次に、ORANGE_PRO_PACKAGE
で単純なグローバル文字列変数(build.gradle
)として参照します。
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', ORANGE_PRO_PACKAGE
これらの定数すべてをどうにかしてグループ化できれば最高です
.properties
ファイルに関係するものは、それを処理しません。そこでは、トップレベルのbuild.gradle
ファイルで、単純なGroovyコードなどでグローバルを定義している場合があります。