あらすじ
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=123456711111111
build.gradle
productFlavors
に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" />