Я хочу создать глобальную переменную, похожую на applicationId. Это значение установлено в build.gradle и будет использоваться в манифесте. Является ли это возможным?
Установите глобальную переменную в gradle, которая может использоваться в файле манифеста
Ответ 1
Вы можете установить их, например, я настраиваю его для разных продуктов
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" />
Ответ 2
Если вы просто хотите использовать идентификатор приложения, установленный в gradle в манифесте, вы можете просто использовать:
${ApplicationID}
Например:
<provider
android:authorities="${applicationId}.ShareFileProvider" ... >
...
</provider>
Если вам нужно такое же поведение с пользовательскими переменными, вы можете использовать manifestPlaceholders, например:
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.
Ответ 3
В то время как ответ Марко, похоже, работает, в настоящее время существует лучшее решение, которое не требует добавления переменных в файлы файлов строк.
манифест слияния принимает заполнители:
Для замены пользовательских заполнителей используйте следующий DSL для настройте значения заполнителей:
android {
defaultConfig {
manifestPlaceholders = [ activityLabel:"defaultName"]
}
productFlavors {
free {
}
pro {
manifestPlaceholders = [ activityLabel:"proName" ]
}
}
заменит местозаполнитель в следующем объявлении:
<activity android:name=".MainActivity" android:label="${activityLabel}" >
Вы также можете манипулировать этими строками с помощью функций groovy.
Ответ 4
Чтобы использовать строку в Manifest
, вы можете сделать ее непосредственно в strings.xml
.
Как это,
<string name="variable_name">value</string>