我使用的是EasyPermission库,当我想接受存储权限时,我的应用程序会崩溃,StackTrace如下:
java.lang.NoClassDefFoundError: android.app.PictureInPictureParams
at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
at java.lang.Class.getDexCacheType(Class.java:2551)
at java.lang.reflect.AbstractMethod.getParameterTypes(AbstractMethod.java:169)
at java.lang.reflect.Method.getParameterTypes(Method.java:193)
at java.lang.Class.getDeclaredMethods(Class.java:1812)
at pub.devrel.easypermissions.EasyPermissions.runAnnotatedMethods(EasyPermissions.java:368)
at pub.devrel.easypermissions.EasyPermissions.onRequestPermissionsResult(EasyPermissions.java:240)
at com.my.app.base.BaseActivity.onRequestPermissionsResult(BaseActivity.java:489)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7458)
at android.app.Activity.dispatchActivityResult(Activity.java:7284)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4516)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4563)
at android.app.ActivityThread.-wrap22(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1698)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.app.PictureInPictureParams" on path: DexPathList[[zip file "/data/app/com.my.app.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app..debug-2/lib/arm, /data/app/com.my.app.debug-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at libcore.reflect.InternalNames.getClass(InternalNames.java:53)
at java.lang.Class.getDexCacheType(Class.java:2551)
at java.lang.reflect.AbstractMethod.getParameterTypes(AbstractMethod.java:169)
at java.lang.reflect.Method.getParameterTypes(Method.java:193)
at java.lang.Class.getDeclaredMethods(Class.java:1812)
at pub.devrel.easypermissions.EasyPermissions.runAnnotatedMethods(EasyPermissions.java:368)
at pub.devrel.easypermissions.EasyPermissions.onRequestPermissionsResult(EasyPermissions.java:240)
at com.my.app.base.BaseActivity.onRequestPermissionsResult(BaseActivity.java:489)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7458)
at android.app.Activity.dispatchActivityResult(Activity.java:7284)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4516)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4563)
at android.app.ActivityThread.-wrap22(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1698)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
您应该注意的是,这种情况发生在版本和调试版本上。
这是我的分级文件:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.22.2'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dexOptions {
javaMaxHeapSize "4g"
}
signingConfigs {
release_config {
[not showing it here]
}
}
compileSdkVersion 27
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.my.app"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "x"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
}
dataBinding {
enabled = true
}
// workaround for "duplicate files during packaging of APK" issue
// see https://groups.google.com/d/msg/adt-dev/bl5Rc4Szpzg/wC8cylTWuIEJ
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
//Workaround to an issue due to google play-services 11.0.0 + rxJava
exclude 'META-INF/rxjava.properties'
}
buildTypes {
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release_config
}
debug {
applicationIdSuffix ".debug"
versionNameSuffix " - debug"
debuggable true
}
}
flavorDimensions "public"
productFlavors {
dev {
dimension "public"
}
prod {
dimension "public"
}
}
}
//Define gradle variables
ext {
supportLibVersion = '27.0.2'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'org.jetbrains:annotations-java5:15.0'
//Support Libraries
compile "com.android.support:appcompat-v7:${supportLibVersion}"
compile "com.android.support:support-v4:${supportLibVersion}"
compile "com.android.support:support-v13:${supportLibVersion}"
compile "com.android.support:design:${supportLibVersion}"
compile "com.android.support:recyclerview-v7:${supportLibVersion}"
compile "com.android.support:cardview-v7:${supportLibVersion}"
compile 'com.google.android.gms:play-services-auth:11.6.2'
compile 'com.android.support.constraint:constraint-layout:1.1.0-beta3'
//Google Collections -> Known as Guava. Provides tools to work with collections.
compile 'com.google.guava:guava:22.0-android'
//Google FlexBox -> Flexible layout to handle unknown number of children.
compile 'com.google.android:flexbox:0.2.3'
//Fragment Args -> Library using annotation to simplify the process of passing arguments to a fragment
compile 'com.hannesdorfmann.fragmentargs:annotation:3.0.2'
annotationProcessor 'com.hannesdorfmann.fragmentargs:processor:3.0.2'
//Dart -> Library using annotation to simplify the process of passing arguments to an activity
compile 'com.f2prateek.dart:dart:2.0.0'
annotationProcessor 'com.f2prateek.dart:dart-processor:2.0.0'
//Dagger -> Library used for dependencies injections
compile 'com.google.dagger:dagger:2.2'
annotationProcessor 'com.google.dagger:dagger-compiler:2.2'
//GSON -> Library to simplify Json parsing
compile 'com.google.code.gson:gson:2.8.0'
//Couchbase -> NoSQL Database Manager
compile 'com.couchbase.lite:couchbase-lite-android:1.4.0'
compile 'com.couchbase.lite:couchbase-lite-android-sqlcipher:1.4.0'
//Retrofit -> Library developed by Square. Used to communicate with Restful API.
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//AVLoading -> Provides multiple loaders.
compile 'com.wang.avi:library:1.0.5'
compile 'com.nineoldandroids:library:2.4.0'
//Crashlytics -> Crash reporting library. Developed by Fabric.
compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
transitive = true
}
//Faker -> Library to create fake data
compile 'com.github.thiagokimo:faker:1.4.3'
//MaterialSearchView -> Provides a styled material searchView.
compile 'com.miguelcatalan:materialsearchview:1.4.0'
//LovelyDialog -> Provide beautiful and easy to use dialogs
compile 'com.yarolegovich:lovely-dialog:1.0.4'
//TextDrawable -> Provides images with text, useful for profile avatar (eg: Gmail).
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
//2D ScrollView
compile 'com.jaredrummler:twodscrollview:1.0.1'
//RecyclerViewTools -> Tools for RecyclerView (Headers, Footers, Sections, etc).
compile 'com.eyeem.recyclerviewtools:library:0.4.0'
//RopeProgressBar -> A sweet animated progress bar
compile 'com.github.cdeange:RopeProgressBar:0.1.2'
//AsyncJob -> Simplify the use of AsyncTask.
compile 'com.arasthel:asyncjob-library:1.0.3'
//Simple -> Xml Parser
compile ('org.simpleframework:simple-xml:2.7.1') {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
//RxAndroid -> Reactive Android. Library that implement Observable/Reactive pattern for Android.
compile 'io.reactivex:rxandroid:1.2.1'
// Because RxAndroid releases are few and far between, it is recommended to
// explicitly depend on RxJava's latest version for bug fixes and new features.
compile 'io.reactivex:rxjava:1.1.6'
//Leak Canary -> Detect memory leaks.
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
//Material about -> Library to build neat about page
compile 'com.github.daniel-stoneuk:material-about-library:2.2.1'
//Stetho -> used to analyze application (database, shared-preferences, traffic network, etc)
compile 'com.facebook.stetho:stetho:1.5.0'
compile 'com.robotpajamas.stetho:stetho-couchbase:0.2.0'
compile project(path: ':security')
//Apache commons lang 3 -> contains utilities such as ClassUtils
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
//ExpandableRecyclerView -> Implementation of ExpandableListView for RecyclerView
compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1'
//TextDecorator -> Easy to implements span etc.
compile 'com.tuyenmonkey:text-decorator:1.0.0'
//EasyPermission -> Helper for Android-M permissions
compile 'pub.devrel:easypermissions:1.0.0'
// CompositeAndroid -> Library that make uses of plugins to inject into Activities and Fragments
// instead of using inheritance trees.
// contains CompositeActivity
compile "com.pascalwelsch.compositeandroid:activity:26.0.0"
// contains CompositeFragment and CompositeDialogFragment
compile "com.pascalwelsch.compositeandroid:fragment:26.0.0"
// core module (not required, only abstract classes and utils)
compile "com.pascalwelsch.compositeandroid:core:26.0.0"
}
我已经尝试过几件事了:
关于第4点和第5点,我是如何创建文件的(也许我做错了):
MultiDexKeepFile
android/app/PictureInPictureParams.class
MultiDexKeepProguard
-keep class android.app.PictureInPictureParams
我在我的项目的根目录和'app‘目录下添加了它们(与gradle文件的级别相同)。显然,我也在gradle文件中添加了相应的multiDexKeepFile
和multiDexKeepProguard
行,但是它没有改变任何东西。
我检查了我的APK的dex文件,但没有找到android.app.PictureInPictureParams
。
我没什么办法解决我的问题。我应该怎样做呢?
发布于 2019-07-16 09:27:52
让我用其他库(EventBus)解释一下,但是使用OP要求的相同上下文。在比奥利奥更少的android操作系统版本中,我得到了崩溃日志。
参考资料:https://github.com/greenrobot/EventBus/issues/595
关于同样的补充参考资料:
GreenBot的所有者也将FAQ更新为相同的:http://greenrobot.org/eventbus/documentation/faq/
导致错误的原因:如果类有一个参数不能用于设备的API级别的方法,则抛出异常。
示例:在APILevel21中添加了类PersistableBundle
。随着新类的出现,在以PersistableBundle
为参数的类活动中引入了一些新的生命周期方法,例如,onCreate (Bundle savedInstanceState, *PersistableBundle* persistentState)
。现在,如果您覆盖此方法,并试图在旧设备上将此活动注册到EventBus
,那么我们就有了所描述的导致错误的场景。
可能的建议:
对于我的问题建议#4,我使用了一个私有修饰符。
https://stackoverflow.com/questions/47754855
复制相似问题