gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:58:34 70 4
gpt4 key购买 nike

我正在尝试为 unity3d 构建一个 android 插件,它只是通过 FileProvider 将屏幕截图分享给另一个应用程序。
我将我的项目迁移到 androidx。
我使用了 androidx.core.content.FileProvider 类。
每当我启动我的应用程序时,它就会崩溃,并显示以下 Logcat:

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问题。
为了在我的项目中轻松包含 MultiDex,我将最低 SDK 更改为 API 23 Marshmallow 6.0。
安卓在哪里documentation表示要包含 MultiDex,您需要在指定模块的 build.gradle 文件的 defaultConfig 中添加 multiDexEnabled true
注意:文档说,如果最低 SDK 设置为 API 21 或更高版本,这是包含 MultiDex 所需的唯一步骤。
2. 包错问题(估计就是这个问题)
在 androidx 之前,我们使用了这个包:com.android.support:support-v4 所以根据这个 page您应该将之前的包替换为:androidx.legacy:legacy-support-v4:1.0.0 并将 android.support.v4.content.FileProvider 替换为 androidx.core.content.FileProvider.
这是我的 android list :

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


这是我的模块的 build.gradle 文件:

apply plugin: 'com.android.library'

android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
productFlavors {
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}

task copyPlugin(type: Copy){
dependsOn assemble
from ('build/outputs/aar')
into ('../../Assets/Plugins/Android')
include (project.name + '-release.aar')
}


注意:目标SDK在unity和android studio中均设置为28“Android Pie”。
注意:我的问题与此不同 one因为我已经包含在 list androidx.core.content.FileProvider

最佳答案

终于找到了解决方案,非常简单。就像手动将“support-v4-24.1.1.aar”复制到插件统一项目文件夹中一样简单。或者其他支持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)

这是我的 list :

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

这里是我的模块 build.gradle:

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

希望对您和其他人有所帮助。

关于android - 尝试为 Unity 构建 Android 插件时无法获取提供程序 androidx.core.content.FileProvider ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899143/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com