Voglio creare una variabile globale simile a applicationId. È impostato a valore in build.gradle e verrà utilizzato in manifest. È possibile?Imposta una variabile globale in gradle che può essere utilizzata nel file manifest
risposta
È possibile impostare, ad esempio, sto impostando per diversi sapori di prodotti
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"
}
}
e utilizzarlo come questo
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="@string/authority"
android:exported="true" />
Grazie mille. Questa è esattamente la mia situazione. Ho provato a impostare una variabile facebookProdiderId all'interno di build.gradle, quindi riutilizzata all'interno del file manifest Android come $ {facebookProdiderId}, ma non funziona – thanhnd
Contento di poterti aiutare! :) – Marko
possiamo usare lo stesso applicationId con più sapori in questo. –
Per utilizzare la stringa in Manifest
, è possibile effettuare direttamente in strings.xml
. Ti piace questa,
<string name="variable_name">value</string>
Mentre la risposta di Marko sembra per funzionare, attualmente c'è una soluzione migliore che non richiede l'aggiunta di variabili ai file di risorse stringa.
I manifest merger accepts placeholders:
Per i segnaposto personalizzati sostituzioni, utilizzare il seguente DSL per configurare i valori segnaposto:
android {
defaultConfig {
manifestPlaceholders = [ activityLabel:"defaultName"]
}
productFlavors {
free {
}
pro {
manifestPlaceholders = [ activityLabel:"proName" ]
}
}
sostituirà il segnaposto nella seguente dichiarazione:
<activity android:name=".MainActivity" android:label="${activityLabel}" >
È anche possibile manipolare tali stringhe con funzioni groovy.
Questa è una soluzione più conveniente. Grazie. –
Se si desidera utilizzare l'ID applicazione impostato in Gradle nel vostro manifesto, si può utilizzare semplicemente:
$ {ApplicationID}
Per esempio:
<provider
android:authorities="${applicationId}.ShareFileProvider" ... >
...
</provider>
Se si desidera lo stesso comportamento con le variabili personalizzate, è possibile utilizzare manifestPlaceholders, ad esempio:
android {
defaultConfig {
manifestPlaceholders = [hostName:"www.example.com"]
}
}
E nel tuo manifesto:
<intent-filter ... >
<data android:scheme="http" android:host="${hostName}" ... />
...
</intent-filter>
Vedi https://developer.android.com/studio/build/manifest-build-variables.html per ulteriori informazioni.
gradle è una parte del sistema di build/IDE, non correlato all'app – droidev
se si spiega il caso di utilizzo reale, penso che potremmo essere in grado di aiutare – droidev
possibile duplicato di http://stackoverflow.com/questions/17197636/ is-it-possible-to-declare-a-variable-in-gradle-usable-in-java –