在我的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&amp; Assemble”之后,清单文件中的FACEBOOK_APP_ID如下所示:
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="1481023616.000000" />
不幸的是,这不是String,而是浮点值。这不正确或我想要的。
我知道还有另一种方法可以在FACEBOOK_APP_ID
文件中定义string.xml
。但是,由于我有很多口味,如果我们将所有与风味相关的参数放在build.gradle
文件而不是strings.xml
文件中,那么它将很好并且易于维护。
有谁知道如何避免字符串浮动转换?
答案 0 :(得分:6)
您可以使用以下代码从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文件中使用时,代码null-terminator方法似乎不起作用,但在AndroidManifest.xml
文件中使用null-terminator时它确实有效:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${FACEBOOK_APP_ID}\0"/>
答案 1 :(得分:1)
我使用manifestPlaceholders并强制gradle通过转义引号来识别字符串,如下所示:
manifestPlaceholders = [facebook_app_id:"\"9999000099990000\"",
fb_login_protocol_scheme:"fb9999000099990000"]
第二个参数不需要它,因为它的前面有字符串fb
。
答案 2 :(得分:0)
这对我有用(如果您不使用风味,只需将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>