在Android应用程序中添加多个文件提供程序

dev*_*wat 1 android android-manifest android-fileprovider aar

伙计们,我正在开发一个需要外部应用程序依赖项(.aar文件)的android应用程序,该库应用程序具有其自己的文件提供程序,而我的应用程序也具有其自己的文件提供程序。

当我将库作为单独的应用程序运行时,库运行良好,但是当我将其包含在应用程序中时,相机功能将无法正常工作。我收到以下错误

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
Run Code Online (Sandbox Code Playgroud)

跟随应用程序的清单文件

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
Run Code Online (Sandbox Code Playgroud)

以下是lib模块的清单文件

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.ma.bot.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
Run Code Online (Sandbox Code Playgroud)

应用程序和lib模块具有不同的包名称,如何将这2个文件提供程序添加到应用程序中,我也尝试使用多个文件提供程序,但是在应用程序编译时出现XML解析错误。

android:authorities="${applicationId}.provider;com.ma.bot.provider"
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题。

dev*_*wat 8

伙计们,我在此链接上找到了解决方案 可以对FileProvider使用多个权限吗?

基本上问题是我的库和应用程序具有相同的名称android.support.v4.content.FileProvider,所以它在清单合并中发生冲突,为避免这种情况,我需要对扩展文件提供程序的空类进行去污,并使用它的提供程序名称

<provider
            android:name="com.MAG.MAGFileProvider"
            android:authorities="${applicationId}.provider;"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
Run Code Online (Sandbox Code Playgroud)

并像这样声明类

import android.support.v4.content.FileProvider;
public class MAGFileProvider extends FileProvider
{
    //we extend fileprovider to stop collision with chatbot library file provider
    //this class is empty and used in manifest
}
Run Code Online (Sandbox Code Playgroud)