ребята, я работаю над приложением для Android, для которого мне нужна зависимость от внешнего приложения (файл .aar) у приложения библиотеки есть собственный поставщик файлов, а у моего приложения - собственный.
Библиотека работает хорошо, когда я запускаю ее как отдельное приложение, но когда я включаю ее в свое приложение, функции камеры не работают. Я получаю следующую ошибку
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 имеют разные имена пакетов, как я добавляю этих двух поставщиков файлов в приложение Я также пытаюсь использовать несколько поставщиков файлов, но при компиляции приложения получаю ошибку синтаксического анализа XML.
android:authorities = "${applicationId}.provider;com.ma.bot.provider"
как это решить.
Ребят нашел решение по этой ссылке Можно ли использовать несколько полномочий с 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: sizes = "com.library.provider" и это в основном манифесте приложения android: name = "com.MAG.MAGFileProvider" android: functions = "$ {applicationId} .provider;"