I have two custom Android applications that I am distributing to about 1300 endpoints. We are using the "custom apk" option and posting the apps to the Meraki console, rather than through Google Play. Both of these apps are under ongoing development and are updated regularly. When we have a new update, we upload the new .apk, supply the new version number, save, and then push to all devices that are out of date. The console indicates that it has pushed the update to all endpoints. However, the endpoints themselves almost never receive the update - I'd estimate that at most about 50 will receive it without intervention. We will push repeatedly, but the only way to get the new version to apply is to uninstall the old one and then reinstall through Meraki SM on the device.
When we look at the Activity Log for a device, there will be an entry for action "Install app 'App Name'" with a status "Error: Skipping - already installed". When I go to the Overview for this MDM network, it shows a message indicating that my app was updated and pushed to all but a few devices, but I know that there are more than 1200 that haven't updated.
We do have the "auto-install/auto-uninstall" option checked in the app settings.
The devices run a mix of Android 8.0, 8.1, and 9.0. We have a mix of a few different Samsung and Motorola SKUs in use.
Personally, I would opt for the private Google Play deployment method which means your "auto-install/auto-uninstall" is actually taken note of and you can accept remotely any new app permissions on current and future versions.