Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试为Unity构建Android插件时,无法获取提供程序androidx.core.content.FileProvider ClassNotFoundException_Android_Unity3d_Android Fileprovider_Androidx - Fatal编程技术网

尝试为Unity构建Android插件时,无法获取提供程序androidx.core.content.FileProvider ClassNotFoundException

尝试为Unity构建Android插件时,无法获取提供程序androidx.core.content.FileProvider ClassNotFoundException,android,unity3d,android-fileprovider,androidx,Android,Unity3d,Android Fileprovider,Androidx,我正在尝试为unity3d构建一个android插件,它只需通过文件提供商将屏幕截图共享给另一个应用程序。 我将我的项目迁移到androidx。 我使用了androidx.core.content.FileProvider类。 我的应用程序在每次启动时都会崩溃,日志如下: 2018-12-22 21:46:13.678 14755-14755/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.anascompany.testandroi

我正在尝试为unity3d构建一个android插件,它只需通过文件提供商将屏幕截图共享给另一个应用程序。
我将我的项目迁移到androidx。
我使用了androidx.core.content.FileProvider类。
我的应用程序在每次启动时都会崩溃,日志如下:

2018-12-22 21:46:13.678 14755-14755/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.anascompany.testandroidplugin, PID: 14755
java.lang.RuntimeException: Unable to get provider androidx.core.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/base.apk"],nativeLibraryDirectories=[/data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/lib/x86, /data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/base.apk!/lib/x86, /system/lib]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:6396)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5938)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5853)
    at android.app.ActivityThread.access$1100(ActivityThread.java:199)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/base.apk"],nativeLibraryDirectories=[/data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/lib/x86, /data/app/com.anascompany.testandroidplugin-bwZMktz2HTL449ojsD7y9g==/base.apk!/lib/x86, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.java:121)
我已经搜索了这个问题,并尝试了以下方法:
1.多指标问题。
为了在我的项目中方便地包含MultiDex,我将最小SDK更改为API 23 Marshmallow 6.0。
其中Android说要包含MultiDex,您需要在指定模块的build.gradle文件的defaultConfig中添加
multiDexEnabled true

注意:文档中说,如果最小SDK设置为API 21或更高,则这是包含MultiDex所需的唯一步骤。
2.错误的包装问题(我想这就是问题所在)。
在使用androidx之前,我们使用了这个包:
com.android.support:support-v4
,因此根据这个包,您应该将以前的包替换为:
androidx.legacy:legacy-support-v4:1.0.0
,并将
android.support.v4.content.FileProvider
替换为
androidx.core.content.FileProvider
这是我的android清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anascompany.unity">
<application>
    <provider
        android:authorities="com.anascompany.unity.fileprovider"
        android:name="androidx.core.content.FileProvider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>
</application>

注意:unity和android studio中的目标SDK都设置为28“android Pie”。
注意:我的问题与此不同,因为我已经将androidx.core.content.FileProvider包含在清单中,更改为

实现“androidx.core:core:1.0.1”


我终于找到了解决方案,它太简单了。只需手动将“support-v4-24.1.1.aar”复制到pluginunity项目文件夹中即可。或其他支持aar android文件。它与SDK一起提供。 在我的例子中,文件位于“C:\AndroidSDK\extras\android\m2repository\com\android\support\support-v4\24.1.1”中

无论版本如何,但您应该确保“FileProvider”类在文件中。您可以使用winrar简单地解压aar文件,并确保类在其中

---更新---

总结:在/yourProjectFolder/Assets/Plugins内复制您的unity-release.aar编译的android模块,并手动复制support-v4-24.1.1.aar(或其他版本,我的大小接近1MB)

这是我的舱单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unity">
<application>
 <provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.example.unity.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
 </provider>
</application>
</manifest>

我希望它能帮助你和其他人。

可能重复的@AlexKolydas不,它不是重复的,因为我避免了这个问题的错误(从我的android清单中可以清楚地看到).core:core:1.10-alpha02在build.gradle.@Hks.Adohkd它是1.1。0@TheWanderer可悲的是,我的朋友,我也试过了,没有迟到的希望,你的回答对我不起作用,对我也不起作用,您确定没有更改此库的清单或build.gradle中的任何内容吗?请检查一下这些文件,确认它们和我的一样好吗?如果没有,请更新您的答案。哦,是的!我触摸了一切,使这一切工作,但最终工作。哦,是的。。。我看到你用androidx。。。首先我使用了这个,但最后我使用SupportV4从一开始就再次制作了这个插件。如果你把androidx放在manifest上,把android支持放在plugin目录下,可能会出现同样的混乱,不是吗?也许我可以用我的清单和依赖项来帮助你跟进我的答案,好吗?好的,请通过显示你的清单和build.gradle文件来更新你的答案,这样我就可以将你的答案标记为已接受。对不起,我正在努力工作。你已经更新了我的答案
<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_provider_paths" />
</provider>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unity">
<application>
 <provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.example.unity.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
 </provider>
</application>
</manifest>
dependencies {
  implementation fileTree(include: ['*.jar'], dir: 'libs')
  implementation 'com.android.support:appcompat-v7:28.0.0'
  testImplementation 'junit:junit:4.12'
  androidTestImplementation 'com.android.support.test:runner:1.0.2'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}