Instant App:RuntimeException:无法获得提供商FileProvider:SecurityExc



我尝试在我的应用程序中添加一个即时应用程序功能,但是在启动我的应用程序作为即时应用程序时,我会遇到此错误:

runtimeException:无法获得提供商Android.support.v4.content.fileprovider:java.lang.securityexception:提供商必须授予URI Permissions

这是我的feature清单中使用的方式:

<manifest>
    <application>
        <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/provider_paths" />
        </provider>
    </application>
</manifest>

和我的Instant-App build.gradle

apply plugin: 'com.android.instantapp'
android {
    compileSdkVersion rootProject.compileSdk
    defaultConfig {
        applicationId "applicationId" // same than my app's APK module
        minSdkVersion rootProject.minSdk
        targetSdkVersion rootProject.compileSdk
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation project(':feature') // app's feature
}

怎么了?感谢您的帮助。

编辑:这是完整的logcat:

02-13 17:51:28.501 28992-28992/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: package, PID: 28992
                                                   java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must grant uri permissions
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:6206)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
                                                       at android.app.ActivityThread.-wrap2(ActivityThread.java)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
                                                       at android.os.Handler.dispatchMessage(Handler.java:105)
                                                       at android.os.Looper.loop(Looper.java:156)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6523)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
                                                    Caused by: java.lang.SecurityException: Provider must grant uri permissions
                                                       at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:375)
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:6203)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721) 
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639) 
                                                       at android.app.ActivityThread.-wrap2(ActivityThread.java) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                       at android.os.Looper.loop(Looper.java:156) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:6523) 
                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 
02-13 17:51:28.535 28932-28944/? E/Isotope: UID: [10188]  PID: [28932] IActivityManagerProxy : Instant app: package crashed: java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must grant uri permissions
                                                at android.app.ActivityThread.installProvider(ActivityThread.java:6206)
                                                at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721)
                                                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
                                                at android.app.ActivityThread.-wrap2(ActivityThread.java)
                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
                                                at android.os.Handler.dispatchMessage(Handler.java:105)
                                                at android.os.Looper.loop(Looper.java:156)
                                                at android.app.ActivityThread.main(ActivityThread.java:6523)
                                                at java.lang.reflect.Method.invoke(Native Method)
                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
                                             Caused by: java.lang.SecurityException: Provider must grant uri permissions
                                                at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:375)
                                                at android.app.ActivityThread.installProvider(ActivityThread.java:6203)
                                                at android.app.ActivityThread.installContentProviders(ActivityThread.java:5721) 
                                                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639) 
                                                at android.app.ActivityThread.-wrap2(ActivityThread.java) 
                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637) 
                                                at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                at android.os.Looper.loop(Looper.java:156) 
                                                at android.app.ActivityThread.main(ActivityThread.java:6523) 
                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 

看起来像 FileProvider 不支持O 要么因为其他应用程序不允许看到其 ContentProvider

我有一个测试应用程序,可以用作已安装应用程序,但不作为 Instant App 。看起来 Instant Apps 不允许使用grantUriPermission(Grant URI权限((考虑到即将安装的应用程序无法看到即时应用程序,并且ContentProvider不可见,这是有意义的。(。

这意味着即时应用程序无法检索ACTION_IMAGE_CAPTURE拍摄的图片(因为它们无法读取外部存储,而相机应用程序无法写入即时应用程序的私人存储(。

在您的AndroidManifest.xml文件中添加grantUriPermissionsexported

        <provider
            android:exported="false"
            android:grantUriPermissions="true"
            android:authorities="${applicationId}.fileprovider"
            android:name="androidx.core.content.FileProvider">
            <meta-data
                android:resource="@xml/file_paths"
                android:name="android.support.FILE_PROVIDER_PATHS"
                />
        </provider>

最新更新