12

複数のフレーバーとビルド構成のために同じデバイスにインストールできるように、現在の Android プロジェクトを変更しています。

build.gradle:

{
    // ...
    defaultConfig {
        applicationId "com.myapp"
        manifestPlaceholders = [
            manifestApplicationId: "${applicationId}",
            onesignal_app_id: "xxxx",
            onesignal_google_project_number: "xxxx"
        ]
    // ...
    }

    productFlavors {
        production {
            applicationId "com.myapp"
            // ...
        }

        dev {
            applicationId "com.myapp.dev"
            // ...
        }

        // ...
    }

    buildTypes {
        release {
            // ...
        }

        debug {
            applicationIdSuffix ".debug"
            // ...
        }
    }

    // ...
}

AndroidManifest.xml :

<manifest ... >
    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
    <permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />      
    <!-- ... -->

    <receiver
        android:name="com.onesignal.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

    <!-- ... -->
</manifest>

同じフレーバーのデバッグ バージョンとリリース バージョンの両方をコンパイルすると、次のエラー メッセージが表示されました。

...

INSTALL_FAILED_DUPLICATE_PERMISSION

perm=com.myapp.permission.C2D_MESSAGE

pkg=com.myapp.dev

...

manifestApplicationId プレースホルダーは、 https: //documentation.onesignal.com/docs/android-sdk-setup で指示されているように、OneSignal ライブラリの AndroidManifest.xml から取得されました。

この問題を解決する方法を知っている人はいますか? ありがとうございました。

4

1 に答える 1

21

OneSignal では、manifestPlaceholdersキーを(別名、パッケージ名)manifestApplicationIdに設定する必要があります。applicationId

これはbuildTypes、次のように設定することで実行できます。

buildTypes {
   debug {
      defaultConfig {
         manifestPlaceholders = [manifestApplicationId          : "${applicationId}",
                                 onesignal_app_id               : "11111111-1111-1111-1111-111111111111",
                                 onesignal_google_project_number: "111111111"]
       }
   }

   release {
      defaultConfig {
         manifestPlaceholders = [manifestApplicationId          : "${applicationId}",
                                 onesignal_app_id               : "22222222-2222-2222-2222-222222222222",
                                 onesignal_google_project_number: "222222222"]
      }
   }
}

更新 1 : OneSignal-Android 3.3.0 ではmanifestApplicationId.

更新 2manifestPlaceholders : OneSignal-Android 4.0.0 では、値は不要になりました。代わりにOneSignal.setAppId(ONESIGNAL_APP_ID)、実行時に呼び出す必要があります

于 2016-09-02T02:27:28.687 に答える