首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何访问AndroidManifest.xml文件中的BuildConfig值?

如何访问AndroidManifest.xml文件中的BuildConfig值?
EN

Stack Overflow用户
提问于 2015-03-10 08:16:43
回答 7查看 57.1K关注 0票数 152

是否可以从AndroidManifest.xml访问BuildConfig值?

在我的build.gradle文件中,我有:

代码语言:javascript
复制
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

代码语言:javascript
复制
# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX

要在我的应用程序中使用Facebook connect,我必须将这一行添加到我的AndroidManifest.xml:

代码语言:javascript
复制
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/> 

我想用gradle中定义的BuildConfig字段FACEBOOK_APP_ID替换@string/applicationId,如下所示:

代码语言:javascript
复制
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/> 

使用BuildConfig可以吗?如果没有,我如何才能做到这一点?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-03-10 08:28:59

替换

代码语言:javascript
复制
buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID

使用

代码语言:javascript
复制
resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID

然后是rebuild your project (Android Studio -> Build -> Rebuild Project)。

这两个命令都会在项目构建期间生成生成值-第一种情况下由Java常量组成,第二种情况下由Android资源组成,但第二种方法将生成可以使用@string/FACEBOOK_APP_ID语法访问的string资源值。这意味着它可以在清单中使用,也可以在代码中使用。

票数 209
EN

Stack Overflow用户

发布于 2015-11-26 17:56:27

从AndroidManifest.xml访问Gradle Build Config值的另一种方法是通过占位符,如下所示:

代码语言:javascript
复制
android {
    defaultConfig {
        manifestPlaceholders = [ facebookAppId:"someId..."]
    }
    productFlavors {
        flavor1 {
        }
        flavor2 {
            manifestPlaceholders = [ facebookAppId:"anotherId..." ]
        }
    }
}

然后在你的清单中:

代码语言:javascript
复制
<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)

票数 88
EN

Stack Overflow用户

发布于 2016-11-14 23:38:39

注意:使用resValue时,该值可能会意外地被字符串资源文件覆盖(例如,对于另一种语言)

要获得可以在清单和java代码中使用的真正常量值,请同时使用manifestPlaceholdersbuildConfigField:例如

代码语言:javascript
复制
android {
    defaultConfig {
        def addConstant = {constantName, constantValue ->
            manifestPlaceholders += [ (constantName):constantValue]
            buildConfigField "String", "${constantName}", "\"${constantValue}\""
        }

        addConstant("FACEBOOK_APP_ID", "xxxxx")
    }

清单文件中的访问权限:

代码语言:javascript
复制
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}"/>

来自java:

代码语言:javascript
复制
BuildConfig.FACEBOOK_APP_ID

如果常量值需要是特定于buildType的,则需要调整帮助器addConstant (以使用groovy闭包语义),例如,

代码语言:javascript
复制
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")
    }
票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28954071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档