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"
        ]

"Build & Assemble" の後、マニフェスト ファイルの FACEBOOK_APP_ID は次のようになります。

 <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="1481023616.000000" />

残念ながら、これは String ではなく float 値です。それは正しくないか、私が望むものではありません。

ファイルでを定義する別の方法があることは知って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 に null ターミネータを追加することもできます。

FACEBOOK_APP_ID: "888570042741264\0"

編集:

コードの null-terminator メソッドは、build.gradle ファイルから直接使用すると機能しないようですが、AndroidManifest.xmlファイル内で null-terminator を使用すると機能します。

<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"]

前に文字列があるため、2番目のパラメーターには必要ありませんfb

于 2018-09-13T10:21:54.223 に答える