4

在我的 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" />

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

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

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

4

3 回答 3

7

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

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

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

您还可以尝试按照答案中的建议向您的 FACEBOOK_APP_ID manifestPlaceholder 添加一个空终止符:

FACEBOOK_APP_ID: "888570042741264\0"

编辑:

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

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}\0"/>
于 2017-01-02T11:26:27.037 回答
1

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

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

于 2018-09-13T10:21:54.223 回答
1

这对我有用(如果您不使用风味,只需将 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>
于 2019-09-26T08:00:39.960 回答