I am modifying current android project so it can be installed on same device for multiple flavors and build configs.
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>
When I compile both debug and release version of the same flavor, I got error message:
...
INSTALL_FAILED_DUPLICATE_PERMISSION
perm=com.myapp.permission.C2D_MESSAGE
pkg=com.myapp.dev
...
manifestApplicationId placeholder came from AndroidManifest.xml on OneSignal library as instructed on https://documentation.onesignal.com/docs/android-sdk-setup
Anybody have a clue how to fix this problem? Thank you.
OneSignal requires the manifestPlaceholders
key manifestApplicationId
to be set to your applicationId
(AKA your package name).
This can be done by setting it in your buildTypes
like the following.
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"]
}
}
}
Update 1: OneSignal-Android 3.3.0 no longer requires manifestApplicationId
.
Update 2: OneSignal-Android 4.0.0 no longer requires any manifestPlaceholders
values. Instead OneSignal.setAppId(ONESIGNAL_APP_ID)
needs to be called at runtime.