Yah, the `${applicationId}.provider` value is the authority used to allow the app access to that storage location. The authority has to match the one defined in the [authorities config](https://github.com/apache/cordova-plugin-camera/blob/master/plugin.xml#L65).
### Background After a lot of investigation, I think I understand this now. The .BuildConfig class is an Android auto generated class that [BuildHelper.getBuildConfigValue](https://github.com/apache/cordova-plugin-compat/blob/master/src/android/BuildHelper.java#L50) is trying to access via reflection to find the APPLICATION_ID field. Example BuildConfig.java that sits in build/generated/source/buildConfig/debug/com/company/project/ ``` /** * Automatically generated file. DO NOT MODIFY */ package com.company.project; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "com.company.project"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "2018.1-SNAPSHOT"; } ``` We were running into the same issue where BuildHelper.getBuildConfigValue was returning null and crashing the app, because we didn't have the `<preference name="applicationId" value="{PACKAGE_ID}"/>` set either. This is because the application's package name is different from the one that's ultimately built into the APK. We updated the package name of the app, because it's a new version of the app with new branding, but we need to submit the previous package name in the APK so it can goto the same Google Store page. build.gradle ``` android { defaultConfig { applicationId "com.company.oldname" } } ``` `Java app package: com.company.newname;` In our example, `cordova.getActivity().getPackageName() == "com.company.oldname"` but the `com.company.oldname.BuildConfig` doesn't exist (Android has created the `com.company.newname.BuildConfig`). Because `com.company.oldname.BuildConfig` doesn't exist, BuildHelper.getBuildConfigValue returns null. In most cases, BuildHelper.getBuildConfigValue works fine, but this is an edge case where this fails. This would also fail for apps with [multiple productFlavors](http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename). ### Possible Solution The Camera Plugin could support all three options: - First use preference.applicationId. - If null, use BuildHelper.getBuildConfigValue. - If null, use cordova.getActivity().getPackageName() and hope it's good enough. I'm not sure if `cordova.getActivity().getPackageName()` will always be the right package name because I'm not sure if the Cordova activity/context would have the same package name as the app using it. But I think it's worth it to try to prevent this.applicationId from just being null to crash later on. Important note, CordovaInterface.getContext() was added in Cordova Android 7.0, so it might be better to use cordova.getActivity() to support previous versions (this is important to us because we're stuck with Cordova Android 6.3.0 for the minute). Let me know if you want me to submit a PR with these suggested changes, or if you want to just make them in this PR. [ Full content available at: https://github.com/apache/cordova-plugin-camera/pull/320 ] This message was relayed via gitbox.apache.org for devnull@infra.apache.org