É possível acessar um valor BuildConfig no AndroidManifest.xml?
No meu arquivo build.gradle, tenho:
defaultConfig {
applicationId "com.compagny.product"
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
// Facebook app id
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
}
FACEBOOK_APP_ID
é definido nos meus arquivos gradle.properties:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
Para usar a conexão do Facebook no meu aplicativo, devo adicionar esta linha ao meu AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
Eu quero substituir @string/applicationId
pelo campo BuildConfig FACEBOOK_APP_ID
definido em gradle, assim:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
Isso é possível usando o BuildConfig? Se não, como posso conseguir isso?
<item name="facebook_app_id" type="string">15233522...</item>
Outra maneira de acessar os valores do Gradle Build Config no seu AndroidManifest.xml é através de espaços reservados como este:
e depois no seu manifesto:
Veja mais detalhes aqui: https://developer.android.com/studio/build/manifest-build-variables.html
(Link antigo apenas para referência: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger )
fonte
nota: quando você usa
resValue
o valor, acidentalmente, pode ser substituído pelo arquivo de recursos de strings (por exemplo, para outro idioma)Para obter um verdadeiro valor constante que você pode usar no manifesto e no código java, use ambos
manifestPlaceholders
ebuildConfigField
:acesso no arquivo de manifesto:
de java:
Se o valor constante precisar ser específico do buildType, o auxiliar
addConstant
precisará ser ajustado (para trabalhar com a semântica de fechamento de groovy), por exemplo,fonte
addConstant()
duas vezes (com diferentes, éconstantNames
claro). Que erro você recebe?+=
operador como estemanifestPlaceholders += [...]
Acesse as propriedades build.gradle no seu manifesto, como no exemplo a seguir:
Por exemplo, você tem uma propriedade "applicationId" em seu build.gradle e deseja acessá-la em seu AndroidManifest:
Acesse "applicationId" no AndroidManifest:
Da mesma forma, podemos criar recursos de string para outras constantes e acessá-los em arquivos de código tão simples quanto:
fonte
@stkent é bom, mas esquece de acrescentar que você precisa reconstruir seu projeto posteriormente
Substituir
com
então
Isso permitirá que o Android gere o recurso de string acessível via
fonte
Outra opção: use um arquivo de recurso de sequência diferente para substituir todos os valores dependentes do Flavor:
Etapa 1: crie uma nova pasta na pasta "src" com o nome do seu sabor, no meu caso "estágio"
Etapa 2: Crie arquivos de recursos para todos os arquivos que dependem do sabor, por exemplo:
Etapa 3: Também estou usando ícones diferentes, para que você também veja as pastas do mipmap. Para esta opção, apenas o "strings.xml" é importante. Agora você pode substituir todos os recursos importantes da string. Você só precisa incluir os que deseja substituir, todos os outros serão usados a partir do "strings.xml" principal, ele será exibido no Android Studio assim:
Etapa 4: use os recursos de sequência no seu projeto e relaxe:
fonte
Você pode usar um valor longo como abaixo
buildConfigField 'long', 'FLAVOR_LONG', '11500L'
fonte