4

私は現在のアンドロイドプロジェクトを修正しているので、複数のフレーバーとビルド設定のために同じデバイスにインストールできます。複数のビルドフレーバーのためのapplicationIdマニフェストプレースホルダーが動作しない

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

パーマ= com.myapp.permission.C2D_MESSAGE

PKG = com.myapp.dev

...指示通り

manifestApplicationIdプレースホルダがOneSignalライブラリにAndroidManifest.xmlをから来ましたon https://documentation.onesignal.com/docs/android-sdk-setup

誰もがこの問題を解決する手がかりを持っていますか?ありがとうございました。

+0

これはhttp://stackoverflow.com/questions/27043933/install-failed-duplicate-permission-c2d-messageの複製であると思います。デバイスからアプリをアンインストールして再インストールする必要があります。 – Blehi

+0

@Blehi:もちろん、インストールされているバリアントをアンインストールすると、エラーが取り除かれます。しかし私の目標は、すべてのバリアントを同じデバイスにインストールすることです。ありがとうございました。 – Wellsen

答えて

10

OneSignalでは、manifestPlaceholdersキーmanifestApplicationIdapplicationId(パッケージ名)とする必要があります。

これは、次のように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"] 
     } 
    } 
} 

更新manifestApplicationIdはもはや3.3.0とOneSignal SDKの新しいのために必要とされません。

+0

ありがとうございます。上記のコードのようにすべてのbuildTypeでdefaultConfigクロージャー内にこれらのプレースホルダーを追加しました。ビルドに失敗しました:エラー: ':app:processProductionReleaseManifest'タスクの実行に失敗しました。 >キー[権限#$ {manifestApplicationId} .permission.C2D_MESSAGE]のレコードがありません – Wellsen

+0

編集:ツールを削除するのを忘れました:overrideLibraryとtools:以前に追加したマニフェストを上書きします。私がした後、エラーは "重複許可"に戻っています。まだ解決策を見つけようとしています... – Wellsen

+0

@Wellsenこの '.gradle'を変更したら、両方のアプリケーションをアンインストールしてから再インストールする必要があります。そのうちの1つが間違った権限を持つ可能性が高いので、これが必要です。 – jkasten

関連する問題