あらすじ
FacebookのAPIを使うために facebookAppId を取得したが、このAPI Keyを設定ファイル( AndroidManifest.xml )外に追い出すのに苦労した。
Gradle力が低いので、もっと良いやり方があるかもしれない。
1.strings.xmlファイルを開きます。パスの例:/app/src/main/res/values/strings.xml。 2.新しい文字列を、facebook_app_idの名前とFacebookアプリIDとともに追加します。
やりたいこと
facebookAppIdをgradle.propertiesに定義したいAndroidManifest.xmlにgradle.propertiesから参照した文字列を埋め込みたい- ただし、プロパティに定義したKeyは数値のみ(文字数値入り混じったKeyなら問題ない)
manifestPlaceholdersに登録して参照(うまくいかなかった)
gradle.properties- キーを書いた
facebookAppId=123456711111111build.gradleproductFlavorsにgetProperty("facebookAppId")と記載し、gradle.propertiesから値を呼び出した
productFlavors {
develop {
manifestPlaceholders = [
facebook_app_id: getProperty("facebookAppId")]
略
}
}AndroidManifest.xml
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="${facebook_app_id}" />これ、確かに参照はできるんだけどFacebookSDKの中でKeyが数値とみなされて applicationId cannot be null となってしまった。
そして、 build.gradle の中で何とか文字列に変換して渡そうとしてもうまくいかなかった…。
resValueに登録して参照(うまくいった)
同じような事をした人がおり、その回答は resValue でリソースとして登録すればいけるというものだったので試したところうまくいった。
gradle.properties- 変更なし
build.gradle- 参照のしかたを
resValueに変更した - これで
@string/〜の形式でアクセスできるようになり、そして文字列としてFacebookSDKに渡されるようなので、無事にKeyが通った
- 参照のしかたを
productFlavors {
develop {
resValue("string", "facebook_app_id", getProperty("facebookAppId"))
略
}
}AndroidManifest.xml
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />