【问题标题】:Adding multiple file providers in Android application在 Android 应用程序中添加多个文件提供程序
【发布时间】:2018-11-26 14:02:01
【问题描述】:

伙计们,我正在开发一个需要外部应用程序依赖项(.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

跟随应用的清单文件

<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>

以下是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>

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

android:authorities="${applicationId}.provider;com.ma.bot.provider"

如何解决这个问题。

【问题讨论】:

    标签: android android-manifest aar android-fileprovider


    【解决方案1】:

    伙计们,我在此链接上找到了解决方案 Possible to use multiple authorities with 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>
    

    并像这样声明类

    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
    }
    

    【讨论】:

    • 它对我有用。当我将它用于库 android:name="android.support.v4.content.FileProvider" android:authorities="com.library.provider" 和主应用程序清单 android:name="com.MAG.MAGFileProvider" android:authorities="${applicationId}.provider;"
    • 类文件在哪里创建?
    猜你喜欢
    • 2021-11-05
    • 2017-12-25
    • 1970-01-01
    • 2022-12-15
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多