Я пытаюсь создать подключаемый модуль Android для unity3d, который просто передает снимок экрана другому приложению через 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.
Где Android документация говорит, что для включения MultiDex нужно добавить multiDexEnabled true
в defaultConfig в файле build.gradle для указанный модуль.
Примечание: в документации сказано, что это единственный шаг, необходимый для включения MultiDex, если минимальный SDK установлен на API 21 или выше.
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>
а вот мой файл 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, установленной на 28 "Android Pie".
Примечание: мой вопрос отличается от этого один, поскольку я уже включил в манифест androidx.core.content.FileProvider
androidx.core:core:1.10-alpha02
в вашем build.gradle. - person TheWanderer   schedule 23.12.2018