Gradle "manifest requires a placeholder substitution" error but manifestPlaceholders supplies a value
You need to just add to the array. You are replacing it. Do this:
manifestPlaceholders = [encoding: "some value", version: cityVersion]
By declaring manifestPlaceholders twice for the same flavor/build type, your are replacing the previous one. After the previous one got replaced, your build failed because the property no longer exists.