manifestPlaceholders 值不是字符串
manifestPlaceholders value is not string
在我的 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"
]
在 "Build & Assemble" 之后,清单文件中的 FACEBOOK_APP_ID 如下所示:
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="1481023616.000000" />
很遗憾,这不是字符串,而是浮点值。那是不正确的或我想要的。
我知道还有另一种方法可以在 string.xml
文件中定义 FACEBOOK_APP_ID
。但是因为我有很多口味,如果我们将所有与口味相关的参数放在 build.gradle
文件而不是 strings.xml
文件中,那么维护起来会很好并且容易维护。
有谁知道如何避免字符串到浮点数的转换?
您可以使用以下代码将字符串值添加到 build.gradle 文件中的字符串资源:
resValue 'string', 'FACEBOOK_APP_ID', 'facebook_application_id'
但我不确定 AndroidManifest.xml 文件是否不支持特定风味的字符串(我记得如果你尝试会收到警告,但我不确定)。
您还可以按照 this 答案中的建议尝试向您的 FACEBOOK_APP_ID manifestPlaceholder 添加空终止符:
FACEBOOK_APP_ID: "888570042741264[=11=]"
编辑:
直接从 build.gradle 文件使用时,代码空终止符方法似乎不起作用,但是在 AndroidManifest.xml
文件中使用空终止符时它确实有效:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}[=12=]"/>
我使用 manifestPlaceholders 并强制 gradle 通过转义引号来识别字符串,如下所示:
manifestPlaceholders = [facebook_app_id:"\"9999000099990000\"",
fb_login_protocol_scheme:"fb9999000099990000"]
第二个参数不需要它,因为它前面有字符串 fb
。
这对我有用(如果你不使用 flavors,只需将 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>
我刚遇到一个类似的问题,我的 facebook 值被视为数字并且出现乱码。
如果我确保将它们包装在 " 中,那么它会按预期工作,并且它们会被视为字符串。
manifestPlaceholders += [FACEBOOK_APP_ID: "\"" + rootProject.facebookAppId + "\"", FACEBOOK_CLIENT_TOKEN: "\"" + rootProject.facebookClientToken + "\""]
在我的 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"
]
在 "Build & Assemble" 之后,清单文件中的 FACEBOOK_APP_ID 如下所示:
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="1481023616.000000" />
很遗憾,这不是字符串,而是浮点值。那是不正确的或我想要的。
我知道还有另一种方法可以在 string.xml
文件中定义 FACEBOOK_APP_ID
。但是因为我有很多口味,如果我们将所有与口味相关的参数放在 build.gradle
文件而不是 strings.xml
文件中,那么维护起来会很好并且容易维护。
有谁知道如何避免字符串到浮点数的转换?
您可以使用以下代码将字符串值添加到 build.gradle 文件中的字符串资源:
resValue 'string', 'FACEBOOK_APP_ID', 'facebook_application_id'
但我不确定 AndroidManifest.xml 文件是否不支持特定风味的字符串(我记得如果你尝试会收到警告,但我不确定)。
您还可以按照 this 答案中的建议尝试向您的 FACEBOOK_APP_ID manifestPlaceholder 添加空终止符:
FACEBOOK_APP_ID: "888570042741264[=11=]"
编辑:
直接从 build.gradle 文件使用时,代码空终止符方法似乎不起作用,但是在 AndroidManifest.xml
文件中使用空终止符时它确实有效:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}[=12=]"/>
我使用 manifestPlaceholders 并强制 gradle 通过转义引号来识别字符串,如下所示:
manifestPlaceholders = [facebook_app_id:"\"9999000099990000\"",
fb_login_protocol_scheme:"fb9999000099990000"]
第二个参数不需要它,因为它前面有字符串 fb
。
这对我有用(如果你不使用 flavors,只需将 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>
我刚遇到一个类似的问题,我的 facebook 值被视为数字并且出现乱码。
如果我确保将它们包装在 " 中,那么它会按预期工作,并且它们会被视为字符串。
manifestPlaceholders += [FACEBOOK_APP_ID: "\"" + rootProject.facebookAppId + "\"", FACEBOOK_CLIENT_TOKEN: "\"" + rootProject.facebookClientToken + "\""]