当前位置: 首页 > 知识库问答 >
问题:

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

益和雅
2023-03-14

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

在我的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
}

FACEBOOK\u APP\u ID在my gradle中定义。属性文件:

# Facebook identifier (app ID)
FACEBOOK_APP_ID=XXXXXXXXXX

要在我的应用程序中使用Facebook连接,我必须将此行添加到我的Androidanifest.xml:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId"/> 

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

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="FACEBOOK_APP_ID"/> 

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

共有3个答案

谢铭
2023-03-14

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

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

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

如果常量值需要特定于构建类型,则需要调整助手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")
    }
阙奇思
2023-03-14

从AndroidManifest访问Gradle构建配置值的另一种方法。xml是通过以下占位符生成的:

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)

柴兴贤
2023-03-14

代替

buildConfigField "long", "FACEBOOK_APP_ID", FACEBOOK_APP_ID

具有

resValue "string", "FACEBOOK_APP_ID", FACEBOOK_APP_ID

然后重建你的项目(Android Studio-

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

 类似资料:
  • 我知道我们无法访问web中的属性。但是有没有解决方法来实现这一点。我只需要访问env在web中的价值。xml文件。 如有任何建议,我们将不胜感激。

  • 我正在尝试在: 我从java代码中设置了如下键: 我也尝试了内部的没有工作。如何在布局元素之外的中引用MDC键? 我还在properties部分下为键指定了默认值,如下所示:

  • 我的AndroidManifest文件显示了一个错误“unresolved class'mainactivity'”,但我在包中有一个java类和同名的文件,它应该是程序的第一个活动,所以当我尝试运行程序时它会崩溃,我检查了代码,但没有发现任何问题。 MainActivity文件的java代码 我的程序使用的第二个活动的java代码(“gameui.java”)

  • 我需要在应用程序中设置一个基本url。属性,并且需要使用该基本url将记录插入liquibase中的mongodb 试过下面这样的东西 在应用程序中.属性 在插入更改日志.xml文件 尝试了所有选项。推荐链接https://docs.liquibase.com/concepts/basic/changelog-property-substitution.html 任何人都可以帮忙使用Spring靴

  • 问题内容: 我想访问中提供的值,例如: 我想在Spring Boot应用程序的主程序中访问。 问题答案: 你可以使用批注并在使用的任何Spring bean中访问属性 Spring Boot文档的Externalized Configuration部分介绍了你可能需要的所有详细信息。

  • 我有一个zip文件“items.zip”。 在这个zip-File中有不同的类,其中一些对我有用,而另一些则不是。 圆圈类有一个construcor和一个paint方法。 圆圈ButYoucantDrawit。类具有损坏的构造函数。 在启动主程序之前,我想访问项目。zip,检查它们是否可用,然后尽可能地使用有用的。最好的方法是什么? 到目前为止,我已经尝试了9次,但没有一次有意义。我如何才能做到最