2015-10-23 6 views
10

applicationIdと同様のグローバル変数を作成したい。 これはbuild.gradleに設定された値で、マニフェストで使用されます。出来ますか?マニフェストファイルで使用できるgradleのグローバル変数を設定する

+0

gradleはビルドシステム/ IDEの一部で、実際の使用例を説明すると – droidev

+0

とは関係ありません。私は助けることができると思います。 – droidev

+0

可能な複製http://stackoverflow.com/questions/17197636/それでは、Javaで使用可能な変数を宣言することが可能です。 –

答えて

17

あなたがそれらを設定することができ、例えば私は別の製品の風味のために

productFlavors { 
     production { 
      applicationId = "com.myapp.app" 
      resValue "string", "authority", "com.facebook.app.FacebookContentProvider5435651423234" 
     } 
     development { 
      applicationId = "com.myapp.development" 
      resValue "string", "authority", "com.facebook.app.FacebookContentProvider2134564533421" 
     } 
     qa { 
      applicationId = "com.myapp.qa" 
      resValue "string", "authority", "com.facebook.app.FacebookContentProvider29831237981287319" 
     } 
} 

そしてマルコの答えは思えますが、この

<provider 
    android:name="com.facebook.FacebookContentProvider" 
    android:authorities="@string/authority" 
    android:exported="true" /> 
+0

ありがとうございます。これはまさに私の状況です。変数facebookProdiderIdをbuild.gradle内に設定しようとしましたが、$ {facebookProdiderId}のようなアンドロイドマニフェストファイル内で再利用しましたが、動作しません。 – thanhnd

+0

うれしいことに助けてくれるでしょう! :) – Marko

+0

これで複数のフレーバーで同じapplicationIdを使用できますか? –

0

Manifestの文字列を使用する場合は、直接strings.xmlにすることができます。このよう 、

<string name="variable_name">value</string> 
10

のようにそれを使用し、それを設定しています現在、文字列リソースファイルに変数を追加する必要のない優れたソリューションがあります。

manifest merger accepts placeholders:カスタムプレースホルダの交換のために

、 構成するには、次のDSLを使用するプレースホルダ値:

android { 
    defaultConfig { 
     manifestPlaceholders = [ activityLabel:"defaultName"] 
    } 
    productFlavors { 
     free { 
     } 
     pro { 
      manifestPlaceholders = [ activityLabel:"proName" ] 
     } 
    } 

は、次の宣言でプレースホルダを置き換えます:

<activity android:name=".MainActivity" android:label="${activityLabel}" > 

また、これらの文字列をグルービー機能で操作することもできます。あなたは自分のマニフェストでのGradleに設定されたアプリケーションIDを使用したい場合は

+0

これはより便利なソリューションです。ありがとうございました。 –

13

、あなたは簡単に使用することができます。

$ {APPLICATIONID}例えば

<provider 
    android:authorities="${applicationId}.ShareFileProvider" ... > 
    ... 
</provider> 

カスタム変数で同じ動作が必要な場合は、次のようにマニフェストプレースホルダを使用できます。

android { 
    defaultConfig { 
     manifestPlaceholders = [hostName:"www.example.com"] 
    } 
} 

そして、あなたのマニフェストで:

<intent-filter ... > 
    <data android:scheme="http" android:host="${hostName}" ... /> 
    ... 
</intent-filter> 

は、より多くの情報のためhttps://developer.android.com/studio/build/manifest-build-variables.htmlを参照してください。

関連する問題