【问题标题】:manifestPlaceholders value is not stringmanifestPlaceholders 值不是字符串
【发布时间】:2017-01-02 11:20:38
【问题描述】:

在我的 AndroidManifest.xml 文件中,我有以下应该动态填充的元数据标签:

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

我的 gradle 文件如下所示:

manifestPlaceholders = [
                GOOGLE_PROJECT_ID: "A888844613784",
                FACEBOOK_APP_ID: "888570042741264"
        ]

在“构建和组装”之后,清单文件中的 FACEBOOK_APP_ID 如下所示:

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

不幸的是,这不是一个字符串,而是一个浮点值。这不正确或我想要的。

我知道还有另一种方法可以在 string.xml 文件中定义 FACEBOOK_APP_ID。但是由于我有很多口味,如果我们将所有与口味相关的参数放在build.gradle 文件而不是strings.xml 文件中,那将会很好且易于维护。

有谁知道如何避免字符串到浮点数的转换?

【问题讨论】:

    标签: android android-manifest build.gradle android-flavors


    【解决方案1】:

    您可以使用以下代码从 build.gradle 文件中将 String 值添加到您的字符串资源:

    resValue 'string', 'FACEBOOK_APP_ID', 'facebook_application_id'
    

    但我不确定 AndroidManifest.xml 文件是否不支持特定于风味的字符串(我记得如果您尝试会收到警告,但我不确定)。

    您还可以尝试按照this 回答中的建议将空终止符添加到您的 FACEBOOK_APP_ID manifestPlaceholder:

    FACEBOOK_APP_ID: "888570042741264\0"
    

    编辑:

    直接从 build.gradle 文件中使用代码空终止符方法似乎不起作用,但是在 AndroidManifest.xml 文件中使用空终止符时它确实有效:

    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}\0"/>
    

    【讨论】:

    • 谢谢。 resValue 有效,没有警告。但 FACEBOOK_APP_ID: "888570042741264\0" 不工作。
    • 感谢 Rolf,现在 android:value="${FACEBOOK_APP_ID}\0" 也可以使用。你太棒了!
    • "${FACEBOOK_APP_ID}\0" 似乎不起作用(不再?)
    【解决方案2】:

    我使用 manifestPlaceholders 并强制 gradle 通过转义引号来识别字符串,如下所示: manifestPlaceholders = [facebook_app_id:"\"9999000099990000\"", fb_login_protocol_scheme:"fb9999000099990000"]

    第二个参数不需要它,因为它前面有字符串fb

    【讨论】:

      【解决方案3】:

      这对我有用(如果你不使用风味,只需将 resValue 放入 defaultConfig):

      productFlavors {
          production {
              resValue 'string', 'facebookAppId', '22222222222'
              resValue 'string', 'facebookSchemeId', 'fb22222222222'
          }
      
          development {
              resValue 'string', 'facebookAppId', '11111111111'
              resValue 'string', 'facebookSchemeId', 'fb11111111111'
          }
      }
      

      然后在清单中:

          <meta-data
              android:name="com.facebook.sdk.ApplicationId"
              android:value="@string/facebookAppId" />
      
          <activity
              android:name="com.facebook.CustomTabActivity"
              android:exported="true">
              <intent-filter>
                  <action android:name="android.intent.action.VIEW" />
      
                  <category android:name="android.intent.category.DEFAULT" />
                  <category android:name="android.intent.category.BROWSABLE" />
      
                  <data android:scheme="@string/facebookSchemeId" />
              </intent-filter>
          </activity>
      

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多