1) If you install the content provider with one of your apps, the user could try to install the second app (without the provider) first. You have no control over that. And if the user uninstalls the app with the content provider, the other apps would be useless.
2) You can't put the provider in all the apps, because you cannot have a several apps installing a content provider with the same Authority.
3) You can install the Content Provider as a separate app:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.example.cntntprvdr"
android:versionCode="1"
android:versionName="1.0" >
<application >
<provider
android:name="org.example.cntntprvdr.BookProvider"
android:authorities="org.example.cntntprvdr.BookProvider" >
</provider>
</application>
</manifest>
Then the user can install the apps in the order they want, and can uninstall an app, and the other one would still access the content provider. An "advantage" of this may be that since the content provider doesn't have an app icon, is less likely that the user try to uninstall it. But still you have to ensure that the content provider is installed.
To be honest I haven't found a proper solution for this kind of situations, I'm talking about a google recommendation or best practices. What i've found is this --> https://stackoverflow.com/a/6786587/2017375 Which attempts to solve the scenario where you put the content provider in all of your apps. I haven't tested it, but you can give it a try.