是否可以从AndroidManifest.xml访问BuildConfig值?
在我的build.gradle文件中,我有:
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
}
在我的gradle.properties文件中定义了FACEBOOK_APP_ID
:
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX
要在我的应用程序中使用Facebook connect,我必须将这一行添加到我的AndroidManifest.xml:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/>
我想用gradle中定义的BuildConfig字段FACEBOOK_APP_ID
替换@string/applicationId
,如下所示:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/>
使用BuildConfig可以吗?如果没有,我如何才能做到这一点?
发布于 2015-03-10 08:28:59
替换
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
使用
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID
然后是rebuild your project (Android Studio -> Build -> Rebuild Project)。
这两个命令都会在项目构建期间生成生成值-第一种情况下由Java常量组成,第二种情况下由Android资源组成,但第二种方法将生成可以使用@string/FACEBOOK_APP_ID
语法访问的string
资源值。这意味着它可以在清单中使用,也可以在代码中使用。
发布于 2015-11-26 17:56:27
从AndroidManifest.xml访问Gradle Build Config值的另一种方法是通过占位符,如下所示:
android {
defaultConfig {
manifestPlaceholders = [ facebookAppId:"someId..."]
}
productFlavors {
flavor1 {
}
flavor2 {
manifestPlaceholders = [ facebookAppId:"anotherId..." ]
}
}
}
然后在你的清单中:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebookAppId}"/>
点击此处查看更多详情:https://developer.android.com/studio/build/manifest-build-variables.html
(旧链接仅供参考:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger)
发布于 2016-11-14 23:38:39
注意:使用resValue
时,该值可能会意外地被字符串资源文件覆盖(例如,对于另一种语言)
要获得可以在清单和java代码中使用的真正常量值,请同时使用manifestPlaceholders
和buildConfigField
:例如
android {
defaultConfig {
def addConstant = {constantName, constantValue ->
manifestPlaceholders += [ (constantName):constantValue]
buildConfigField "String", "${constantName}", "\"${constantValue}\""
}
addConstant("FACEBOOK_APP_ID", "xxxxx")
}
清单文件中的访问权限:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}"/>
来自java:
BuildConfig.FACEBOOK_APP_ID
如果常量值需要是特定于buildType的,则需要调整帮助器addConstant
(以使用groovy闭包语义),例如,
buildTypes {
def addConstantTo = {target, constantName, constantValue ->
target.manifestPlaceholders += [ (constantName):constantValue]
target.buildConfigField "String", "${constantName}", "\"${constantValue}\""
}
debug {
addConstantTo(owner,"FACEBOOK_APP_ID", "xxxxx-debug")
}
release {
addConstantTo(owner,"FACEBOOK_APP_ID", "xxxxx-release")
}
https://stackoverflow.com/questions/28954071
复制相似问题