Instabug / Instabug-Android

In-app feedback and bug reporting tool for apps.
https://instabug.com/
Other
188 stars 38 forks source link

AndroidX and proguard: fail to build #123

Closed fleficher closed 6 years ago

fleficher commented 6 years ago

Hi,

Application fail to build when using proguard & androidx when using instabug.

Warning: com.instabug.bug.network.b: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener
Warning: com.instabug.chat.network.a.a: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener
Warning: com.instabug.featuresrequest.ui.d.b: can't find referenced method 'void addOnTabSelectedListener(com.google.android.material.tabs.TabLayout$OnTabSelectedListener)' in program class com.google.android.material.tabs.TabLayout
Warning: com.instabug.survey.network.service.a: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener

SDK Version

8.0.8.2

Steps to Reproduce the Problem

Create a project targeting & compiling for api 28 & use androidx

In gradle.properties add:

android.enableJetifier=true
android.useAndroidX=true

The build will fail

ramiimagdi commented 6 years ago

Hey @fleficher Thank you for reaching out, we'll be investigating the issue, and get back to you as fast as we can 😊

ramiimagdi commented 6 years ago

Hey @fleficher, have you tried enabling MultiDex?

fleficher commented 6 years ago

Hi @ramiimagdi yes i've tried this but nothing changed.

The sample app has the same problem if you migrate to androidx

ramiimagdi commented 6 years ago

Hey @fleficher, thank you for your reply, will get back to you as fast as possible on this.

ramiimagdi commented 6 years ago

Hello again @fleficher, can you please 8.0.8.7-SNAPSHOT?

fleficher commented 6 years ago

Hi @ramiimagdi same problem with this snapshot version. i'm using android studio 3.2.0 with latest plugin & build tools.

Here's the full stacktrace when building the sample project:

Initializing...
Note: the configuration refers to the unknown class 'rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef'
Note: the configuration refers to the unknown class 'rx.internal.util.atomic.LinkedQueueNode'
Note: the configuration refers to the unknown class 'rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef'
Note: the configuration refers to the unknown class 'rx.internal.util.atomic.LinkedQueueNode'
Note: the configuration refers to the unknown class 'com.instabug.library.R.menu'
Note: the configuration refers to the unknown class '.R'
      Maybe you meant the fully qualified name 'androidx.appcompat.R'?
      Maybe you meant the fully qualified name 'androidx.arch.core.R'?
      Maybe you meant the fully qualified name 'androidx.asynclayoutinflater.R'?
      Maybe you meant the fully qualified name 'androidx.cardview.R'?
      Maybe you meant the fully qualified name 'androidx.coordinatorlayout.R'?
      Maybe you meant the fully qualified name 'androidx.core.R'?
      Maybe you meant the fully qualified name 'androidx.cursoradapter.R'?
      Maybe you meant the fully qualified name 'androidx.customview.R'?
      Maybe you meant the fully qualified name 'androidx.documentfile.R'?
      Maybe you meant the fully qualified name 'androidx.drawerlayout.R'?
      Maybe you meant the fully qualified name 'androidx.fragment.R'?
      Maybe you meant the fully qualified name 'androidx.interpolator.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.coreui.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.coreutils.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.v4.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.livedata.core.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.viewmodel.R'?
      Maybe you meant the fully qualified name 'androidx.loader.R'?
      Maybe you meant the fully qualified name 'androidx.localbroadcastmanager.R'?
      Maybe you meant the fully qualified name 'androidx.media.R'?
      Maybe you meant the fully qualified name 'androidx.multidex.R'?
      Maybe you meant the fully qualified name 'androidx.print.R'?
      Maybe you meant the fully qualified name 'androidx.recyclerview.R'?
      Maybe you meant the fully qualified name 'androidx.slidingpanelayout.R'?
      Maybe you meant the fully qualified name 'androidx.swiperefreshlayout.R'?
      Maybe you meant the fully qualified name 'androidx.transition.R'?
      Maybe you meant the fully qualified name 'androidx.vectordrawable.R'?
      Maybe you meant the fully qualified name 'androidx.versionedparcelable.R'?
      Maybe you meant the fully qualified name 'androidx.viewpager.R'?
      Maybe you meant the fully qualified name 'com.example.instabug.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.ads_identifier.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.base.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.common.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.measurement_base.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.stats.R'?
      Maybe you meant the fully qualified name 'com.google.android.gms.tasks.R'?
      Maybe you meant the fully qualified name 'com.google.android.material.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.analytics.connector.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.analytics.connector.impl.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.firebase_common.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.firebase_core.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.iid.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.iid.internal.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.measurement.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.measurement_impl.R'?
      Maybe you meant the fully qualified name 'com.google.firebase.messaging.R'?
      Maybe you meant the fully qualified name 'com.instabug.all.R'?
      Maybe you meant the fully qualified name 'com.instabug.bug.R'?
      Maybe you meant the fully qualified name 'com.instabug.chat.R'?
      Maybe you meant the fully qualified name 'com.instabug.crash.R'?
      Maybe you meant the fully qualified name 'com.instabug.featuresrequest.R'?
      Maybe you meant the fully qualified name 'com.instabug.library.R'?
      Maybe you meant the fully qualified name 'com.instabug.survey.R'?
      Maybe you meant the fully qualified name 'io.reactivex.android.R'?
      Maybe you meant the fully qualified name 'petrov.kristiyan.colorpicker.R'?
      Maybe you meant the fully qualified name 'android.R'?
Note: the configuration refers to the unknown class 'com.instabug.library.ui.onboarding.WelcomeMessageState'
Note: the configuration refers to the unknown class 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian'
Warning: com.instabug.featuresrequest.ui.d.b: can't find referenced method 'void addOnTabSelectedListener(com.google.android.material.tabs.TabLayout$OnTabSelectedListener)' in program class com.google.android.material.tabs.TabLayout
Note: com.google.android.gms.common.util.WorkSourceUtil: can't find dynamically referenced class android.os.WorkSource$WorkChain
Note: com.google.android.gms.internal.measurement.zzaaf: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
Note: com.google.android.gms.internal.measurement.zzaak: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
Note: com.google.android.gms.internal.measurement.zzaau: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
Note: com.google.android.gms.internal.measurement.zzaaz: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
Note: com.google.android.gms.internal.measurement.zzaaz: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
Note: com.google.android.gms.internal.measurement.zzeg: can't find dynamically referenced class android.os.SystemProperties
Note: com.google.android.gms.internal.measurement.zzhl: can't find dynamically referenced class com.google.android.gms.tagmanager.TagManagerService
Note: com.google.android.gms.internal.measurement.zzyx: can't find dynamically referenced class libcore.io.Memory
Note: com.google.android.gms.internal.measurement.zzyx: can't find dynamically referenced class org.robolectric.Robolectric
Note: com.google.android.gms.internal.measurement.zzzj: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
Note: com.google.android.gms.internal.measurement.zzzk: can't find dynamically referenced class com.google.protobuf.Extension
Note: com.google.android.gms.internal.measurement.zzzn: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
Note: the configuration refers to the unknown field 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian' in class 'com.google.android.gms.common.api.internal.BasePendingResult'
Note: the configuration keeps the entry point 'com.google.android.gms.common.api.internal.LifecycleCallback { com.google.android.gms.common.api.internal.LifecycleFragment getChimeraLifecycleFragmentImpl(com.google.android.gms.common.api.internal.LifecycleActivity); }', but not the descriptor class 'com.google.android.gms.common.api.internal.LifecycleActivity'
Note: the configuration keeps the entry point 'com.google.android.gms.common.images.internal.LoadingImageView { void setOnImageLoadedListener(com.google.android.gms.common.images.ImageManager$OnImageLoadedListener); }', but not the descriptor class 'com.google.android.gms.common.images.ImageManager$OnImageLoadedListener'
Note: the configuration keeps the entry point 'com.google.android.gms.common.images.internal.LoadingImageView { void setClipPathProvider(com.google.android.gms.common.images.internal.LoadingImageView$ClipPathProvider); }', but not the descriptor class 'com.google.android.gms.common.images.internal.LoadingImageView$ClipPathProvider'
Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { AppMeasurement(com.google.android.gms.internal.measurement.zzgm); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzgm'
Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void setEventInterceptor(com.google.android.gms.measurement.AppMeasurement$EventInterceptor); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$EventInterceptor'
Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void registerOnMeasurementEventListener(com.google.android.gms.measurement.AppMeasurement$OnEventListener); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$OnEventListener'
Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void unregisterOnMeasurementEventListener(com.google.android.gms.measurement.AppMeasurement$OnEventListener); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$OnEventListener'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationMenuView { void setPresenter(com.google.android.material.bottomnavigation.BottomNavigationPresenter); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationPresenter'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemReselectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setChipDrawable(com.google.android.material.chip.ChipDrawable); }', but not the descriptor class 'com.google.android.material.chip.ChipDrawable'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setTextAppearance(com.google.android.material.resources.TextAppearance); }', but not the descriptor class 'com.google.android.material.resources.TextAppearance'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.ChipGroup { void setOnCheckedChangeListener(com.google.android.material.chip.ChipGroup$OnCheckedChangeListener); }', but not the descriptor class 'com.google.android.material.chip.ChipGroup$OnCheckedChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealFrameLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealGridLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealLinearLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealRelativeLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.cardview.CircularRevealCardView { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.coordinatorlayout.CircularRevealCoordinatorLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.navigation.NavigationView { void setNavigationItemSelectedListener(com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnLayoutChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnAttachStateChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.stateful.ExtendableSavedState { ExtendableSavedState(android.os.Parcel,java.lang.ClassLoader,com.google.android.material.stateful.ExtendableSavedState$1); }', but not the descriptor class 'com.google.android.material.stateful.ExtendableSavedState$1'
Note: the configuration keeps the entry point 'com.google.android.material.tabs.TabLayout { void setOnTabSelectedListener(com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener); }', but not the descriptor class 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.textfield.TextInputLayout { void setTextInputAccessibilityDelegate(com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate); }', but not the descriptor class 'com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate'
Note: the configuration keeps the entry point 'com.google.firebase.analytics.FirebaseAnalytics { FirebaseAnalytics(com.google.android.gms.internal.measurement.zzgm); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzgm'
Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { com.google.firebase.iid.FirebaseInstanceId getInstance(com.google.firebase.FirebaseApp); }', but not the descriptor class 'com.google.firebase.FirebaseApp'
Note: the configuration keeps the entry point 'com.instabug.bug.OnSdkDismissedCallback { void onSdkDismissed(com.instabug.bug.OnSdkDismissedCallback$DismissType,com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.cache.BugsCacheManager { void addBug(com.instabug.bug.model.Bug); }', but not the descriptor class 'com.instabug.bug.model.Bug'
Note: the configuration keeps the entry point 'com.instabug.bug.cache.BugsCacheManager { void sendBug(com.instabug.bug.model.Bug); }', but not the descriptor class 'com.instabug.bug.model.Bug'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { java.util.List getSubReportCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { java.util.List getRemoteSubReportCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { boolean hasSubCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.screenshot.viewhierarchy.utilities.ViewHierarchyDiskUtils { void saveViewHierarchyImage(com.instabug.bug.screenshot.viewhierarchy.b); }', but not the descriptor class 'com.instabug.bug.screenshot.viewhierarchy.b'
Note: the configuration keeps the entry point 'com.instabug.bug.screenshot.viewhierarchy.utilities.ViewHierarchyDiskUtils { android.net.Uri zipViewHierarchyImages(com.instabug.bug.screenshot.viewhierarchy.b); }', but not the descriptor class 'com.instabug.bug.screenshot.viewhierarchy.b'
Note: the configuration keeps the entry point 'com.instabug.chat.cache.ChatsCacheManager { void updateLocalMessageWithSyncedMessage(android.content.Context,com.instabug.chat.model.Message); }', but not the descriptor class 'com.instabug.chat.model.Message'
Note: the configuration keeps the entry point 'com.instabug.chat.cache.ReadQueueCacheManager { void add(com.instabug.chat.model.d); }', but not the descriptor class 'com.instabug.chat.model.d'
Note: the configuration keeps the entry point 'com.instabug.crash.cache.CrashesCacheManager { void addCrash(com.instabug.crash.models.Crash); }', but not the descriptor class 'com.instabug.crash.models.Crash'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.FeatureRequestCacheManager { void addFeature(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.NewFeatureRequestsCacheManager { void addNewFeatureRequest(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.NewFeatureRequestsCacheManager { com.instabug.featuresrequest.models.FeatureRequest deleteNewFeatureRequest(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.TimelineCacheManager { void addTimeline(com.instabug.featuresrequest.models.e); }', but not the descriptor class 'com.instabug.featuresrequest.models.e'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.IbFrRippleView { void setRippleType(com.instabug.featuresrequest.ui.custom.IbFrRippleView$b); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.IbFrRippleView$b'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.IbFrRippleView { void setOnRippleCompleteListener(com.instabug.featuresrequest.ui.custom.IbFrRippleView$a); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.IbFrRippleView$a'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.SnackbarLayout { void setOnLayoutChangeListener(com.instabug.featuresrequest.ui.custom.SnackbarLayout$b); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.SnackbarLayout$b'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.SnackbarLayout { void setOnAttachStateChangeListener(com.instabug.featuresrequest.ui.custom.SnackbarLayout$a); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.SnackbarLayout$a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a); }', but not the descriptor class 'com.instabug.library.a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a,com.instabug.library.Instabug$1); }', but not the descriptor class 'com.instabug.library.a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a,com.instabug.library.Instabug$1); }', but not the descriptor class 'com.instabug.library.Instabug$1'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setDrawingMode(com.instabug.library.annotation.AnnotationView$b); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$b'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnActionDownListener(com.instabug.library.annotation.AnnotationView$e); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$e'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnNewMagnifierAddingAِِِbilityChangedListener(com.instabug.library.annotation.AnnotationView$f); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$f'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnPathRecognizedListener(com.instabug.library.annotation.AnnotationView$g); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$g'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ColorPickerPopUpView { void setOrientation(com.instabug.library.annotation.ColorPickerPopUpView$c); }', but not the descriptor class 'com.instabug.library.annotation.ColorPickerPopUpView$c'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ColorPickerPopUpView { void setOnColorSelectionListener(com.instabug.library.annotation.ColorPickerPopUpView$b); }', but not the descriptor class 'com.instabug.library.annotation.ColorPickerPopUpView$b'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ShapeSuggestionsLayout { void setOnShapeSelectedListener(com.instabug.library.annotation.ShapeSuggestionsLayout$a); }', but not the descriptor class 'com.instabug.library.annotation.ShapeSuggestionsLayout$a'
Note: the configuration keeps the entry point 'com.instabug.library.broadcast.LastContactedChangedBroadcast { LastContactedChangedBroadcast(com.instabug.library.broadcast.LastContactedChangedBroadcast$a); }', but not the descriptor class 'com.instabug.library.broadcast.LastContactedChangedBroadcast$a'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.EventBus { EventBus(io.reactivex.subjects.PublishSubject); }', but not the descriptor class 'io.reactivex.subjects.PublishSubject'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.EventBus { io.reactivex.disposables.Disposable subscribe(io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.coreeventbus.SDKCoreEventSubscriber { io.reactivex.disposables.Disposable subscribe(io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void prepare(com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void stream(java.lang.String,com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void getDurationAsync(java.lang.String,com.instabug.library.internal.media.AudioPlayer$b); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$b'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void doAction(com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void access$000(com.instabug.library.internal.media.AudioPlayer,com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.AttachmentManager { void saveBitmap(android.graphics.Bitmap,android.content.Context,com.instabug.library.internal.storage.AttachmentManager$a); }', but not the descriptor class 'com.instabug.library.internal.storage.AttachmentManager$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.AttachmentManager { void saveBitmap(android.graphics.Bitmap,java.io.File,com.instabug.library.internal.storage.AttachmentManager$a); }', but not the descriptor class 'com.instabug.library.internal.storage.AttachmentManager$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { com.instabug.library.internal.storage.cache.Cache addCache(com.instabug.library.internal.storage.cache.Cache); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { void migrateCache(com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.CacheManager$KeyExtractor); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { void migrateCache(com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.CacheManager$KeyExtractor); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.SessionsCacheManager { void addSession(com.instabug.library.model.Session); }', but not the descriptor class 'com.instabug.library.model.Session'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.SessionsCacheManager { com.instabug.library.model.Session deleteSession(com.instabug.library.model.Session); }', but not the descriptor class 'com.instabug.library.model.Session'
Note: the configuration keeps the entry point 'com.instabug.library.logging.InstabugLog { void addLog(com.instabug.library.logging.InstabugLog$b); }', but not the descriptor class 'com.instabug.library.logging.InstabugLog$b'
Note: the configuration keeps the entry point 'com.instabug.library.model.State { com.instabug.library.model.State setSessionProfilerTimeline(com.instabug.library.sessionprofiler.model.timeline.c); }', but not the descriptor class 'com.instabug.library.sessionprofiler.model.timeline.c'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { io.reactivex.Observable doRequest(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.Request buildRequest(android.content.Context,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection buildConnection(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithNormalType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithFileDownloadType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithMultiPartType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.RequestResponse handleFileDownloadRequestResponse(com.instabug.library.network.Request,java.net.HttpURLConnection); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$100(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$200(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$300(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.RequestResponse access$600(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request,java.net.HttpURLConnection); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager$OnDoRequestListener { void onRequestStarted(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.NpsView { void setOnSelectionListener(com.instabug.survey.ui.custom.NpsView$a); }', but not the descriptor class 'com.instabug.survey.ui.custom.NpsView$a'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.RatingView { void setGravity(com.instabug.survey.ui.custom.RatingView$a); }', but not the descriptor class 'com.instabug.survey.ui.custom.RatingView$a'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.RatingView { void setOnRatingBarChangeListener(com.instabug.survey.ui.custom.RatingView$b); }', but not the descriptor class 'com.instabug.survey.ui.custom.RatingView$b'
Note: the configuration keeps the entry point 'org.jcodec.audio.FilterGraph { FilterGraph(org.jcodec.audio.FilterSocket[],org.jcodec.audio.FilterGraph$1); }', but not the descriptor class 'org.jcodec.audio.FilterGraph$1'
Note: the configuration keeps the entry point 'org.jcodec.codecs.aac.blocks.BlockCCE { BlockCCE(org.jcodec.codecs.aac.blocks.BlockICS$BandType[]); }', but not the descriptor class 'org.jcodec.codecs.aac.blocks.BlockICS$BandType'
Note: the configuration keeps the entry point 'org.jcodec.codecs.mpeg12.MPEGConst$MBType { MPEGConst$MBType(int,int,int,int,int,int,int,org.jcodec.codecs.mpeg12.MPEGConst$1); }', but not the descriptor class 'org.jcodec.codecs.mpeg12.MPEGConst$1'
Note: there were 8 references to unknown classes.
      You should check your configuration for typos.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Note: there were 1 references to unknown class members.
      You should check your configuration for typos.
Note: there were 96 unkept descriptor classes in kept class members.
      You should consider explicitly keeping the mentioned classes
      (using '-keep').
      (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Note: there were 13 unresolved dynamic references to classes or interfaces.
      You should check if you need to specify additional program jars.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Warning: there were 1 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
Thread(Tasks limiter_1): destruction
:app:transformClassesAndResourcesWithProguardForDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'.
> Job failed, see logs for details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 11s

I guess that the error is Warning: com.instabug.featuresrequest.ui.d.b: can't find referenced method 'void addOnTabSelectedListener(com.google.android.material.tabs.TabLayout$OnTabSelectedListener)' in program class com.google.android.material.tabs.TabLayout

Increasing the compileSdkVersion to 28 and updating the Support Libraries to 28+ of the SDK should resolve the issue

fleficher commented 6 years ago

Hi, I've added the following line in my proguard file : -dontwarn com.instabug.** And it works without crashing for the moment, I don't need Instabug on production ATM so that's good for me

ramiimagdi commented 6 years ago

Hey @fleficher, after digging deeper, we have found that this should not happen as Google is supporting backward compatibility with Android X, however, we are still investigating why this is happening and will update you soon.

ablenesi commented 6 years ago

I'm experiencing the same issue, and our project is not updated to use Android X. (I'm using v 8.0.8)

micHar commented 6 years ago

Same here, from 8.0.8 to 8.0.10.1-SNAPSHOT

thuutin commented 6 years ago

Warning: com.instabug.bug.network.b: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener Warning: com.instabug.chat.network.a.a: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener Warning: com.instabug.crash.a.a: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract Warning: com.instabug.crash.a.a: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract$CrashEntry Warning: com.instabug.crash.network.InstabugCrashesUploaderService: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract Warning: com.instabug.crash.network.InstabugCrashesUploaderService: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract$CrashEntry Warning: com.instabug.crash.network.InstabugCrashesUploaderService$1: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract Warning: com.instabug.crash.network.InstabugCrashesUploaderService$1: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract$CrashEntry Warning: com.instabug.crash.network.InstabugCrashesUploaderService$2: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract Warning: com.instabug.crash.network.InstabugCrashesUploaderService$2: can't find referenced class com.instabug.library.internal.storage.cache.db.InstabugDbContract$CrashEntry Warning: com.instabug.survey.network.service.a: can't find referenced class com.instabug.library.network.NetworkManager$OnDoRequestListener

This is what I get by running assembleRelease from the sample app with the library version 8.0.9. I guess the issue is about proguard config of the library only, not related to AndroidX or API 28.

If I change the library version to 8.0.7 then the build can pass.

kamelnabil commented 6 years ago

@fleficher @ablenesi @micHar @thuutin Thanks all for sharing your feedback here!

That was an issue with proguard, and it seems that there is an internal issue in proguard which was showing wrong class paths while using AndroidX. Added to that, there was a new issue introduced by us in the latest release (that was done 3 days ago) which changed the proguard wrong msgs with the right one, and we were able to debug and solve it. The good news is that this snapshot 8.0.10.2-SNAPSHOT includes the fix, and we are releasing a hotfix also.

ddinchev commented 6 years ago

I'm having the same issue but 8.0.10.2-SNAPSHOT does not resolve for me. Can you also give a proguard rules recommendation?

ddinchev commented 6 years ago

I saw that 8.0.11 was just released, and it drags support library 28.0.0 with itself (which is still in alpha). Is the bleeding edge of google libs really a requirement for a feedback tool to work?

ramiimagdi commented 6 years ago

@ddinchev Thank you for getting back to us.

You actually won't need to add any rules to Proguard. However, can you please update us with the following:

And actually, the library 28.0.0 is not an alpha, it is prouction ready since September 21, 2018. Also, we use Google Support libraries because we have many UI in the SDK that use APIs from Google Support libraries.

I hope this answers your questions.

ramiimagdi commented 6 years ago

Hey @fleficher @ablenesi @micHar @thuutin @ddinchev, I hope you all are doing great!

I was wondering if you had the chance to try our 8.0.10.2-SNAPSHOT. Please let us know if you are still facing any further issues.

Thank you.

thuutin commented 6 years ago

@ramiimagdi Just tested 8.0.10.2-SNAPSHOT and it is working great. Also migrating to support lib 28.0.0 is nice :)

fleficher commented 6 years ago

Hi @ramiimagdi, 8.0.10.2-SNAPSHOT seems to fix the issue for me too.

ramiimagdi commented 6 years ago

Hey all, please feel free to reopen this thread again if you need further assistance on this issue, we'd love to help you out!

Thank you 😊

yousef96m commented 5 years ago

@ramiimagdi any fix for that?

ZOlbrys commented 5 years ago

Hi all, I am seeing a similar issue with Instabug 8.0.14 using Android Studio 3.3 in a project with Androidx dependencies setup. See my test project here: https://github.com/ZOlbrys/InstabugProguardExample

Before adding Instabug dependency the release build worked fine. Should I open a new issue for this, I see the original bug is closed.

Here's my output when I try to run assembleRelease

Zachs-MBP:InstabugProguardExample Zach$ ./gradlew assembleRelease
ProGuard, version 6.0.3
Reading input...
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/instabug-8.0.14.aar/7178e06d3a630721e4942b64ce343e33/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-survey-8.0.14.aar/9044cd21b6357dccedbb61e04a436154/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-crash-8.0.14.aar/63aa8df4d29a592d08d042b96609c09c/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-bug-8.0.14.aar/d20f233e7bcfb3350a357d11b87ecae2/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-chat-8.0.14.aar/a15a50336d485da87ca83c2c8af637a0/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-features-request-8.0.14.aar/df42bebdd513582f292d4bf4020acb14/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/jetified-instabug-core-8.0.14.aar/b55d096cefc7b1bd4e8be1227ddf3876/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/material-1.0.0.aar/5e960da0b5e20416ed6b0d44c2544c67/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/appcompat-1.1.0-alpha01.aar/3a2f33bc46f2de4e4ffafc10f63415c1/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/constraintlayout-1.1.3.aar/29f18d8546b58fffb37c42143db71bb4/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/legacy-support-v4-1.0.0.aar/345b26f9fde38b449f071cb26ee7e815/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/fragment-1.1.0-alpha02.aar/9977e3aef0624aca4fb6da5024ef75d1/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/vectordrawable-animated-1.0.0.aar/b3766ffd9d8c4cb9f7aa41ba510d286b/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/vectordrawable-1.0.1.aar/519b841125ee2345277c28569537098e/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/recyclerview-1.0.0.aar/a5dab170357e520f7bc8c5ca62f038d8/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/legacy-support-core-ui-1.0.0.aar/701ea4605a663c6c5ffef36fad1553bb/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/drawerlayout-1.0.0.aar/ed0661335e9b769bc4ebea1a8a38f0cd/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/viewpager-1.0.0.aar/a204e2c936feb1b699b8f6121ec22461/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/legacy-support-core-utils-1.0.0.aar/7b120f76aeded836a7b3792d8c0130d0/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/loader-1.0.0.aar/7a4562c0055413ab4c8494c709fefd71/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/activity-1.0.0-alpha02.aar/b45f1f8ceec23c1a1ec5ffb6e0fce358/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/coordinatorlayout-1.0.0.aar/3935222ac474c663eab4890f9091e52a/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/slidingpanelayout-1.0.0.aar/1d647782e9bc2a40978f15c7158b9867/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/customview-1.0.0.aar/d5f15e28da3b8b5ec69b42b68271ea5e/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/swiperefreshlayout-1.0.0.aar/15921782ea2dfbb7e554f63510d55b9e/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/asynclayoutinflater-1.0.0.aar/eefce6d4358900545fda34f8e2749dfc/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/media-1.0.0.aar/47792f7c5352ae1ef17c7607a146f5c6/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/transition-1.0.0.aar/9a400ca3ca92a78c30802d4e829cc376/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/core-1.1.0-alpha01.aar/1ebe580b4cbd669e0eeb3ac5d3046dd9/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/versionedparcelable-1.1.0-alpha01.aar/9f1e9b9c97a435798907064f09ef9dbf/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/androidx.collection/collection/1.1.0-alpha01/b0dc394c09edd6fe0539bd2587e7d24ee954fdcf/collection-1.1.0-alpha01.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/cursoradapter-1.0.0.aar/d1d90c65356e34197cbe7d6b0d01791e/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/lifecycle-viewmodel-2.0.0.aar/77225c9eebb96532e82eef14b1ae93c0/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/interpolator-1.0.0.aar/46a9060e372924510f809b26505341e9/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/lifecycle-livedata-2.0.0.aar/a31b2c0c50729739fc3f50a85fcb6e82/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/lifecycle-livedata-core-2.0.0.aar/ac0cf018295da79ec8b6057ae2193e04/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/core-runtime-2.0.0.aar/7420b48373520f24b1e8cc2cb14de8c6/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/lifecycle-runtime-2.0.0.aar/5ff52d113e240af7d64f64d02d157339/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.0.0/bb21b9a11761451b51624ac428d1f1bb5deeac38/core-common-2.0.0.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/documentfile-1.0.0.aar/526ece779b76b66b02586b2833d08975/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/localbroadcastmanager-1.0.0.aar/0e0b94442a0bf6c7e817f0d7e043dbeb/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/print-1.0.0.aar/9bb0211ae1bbcb1b81fdea1ac77105f8/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/cardview-1.0.0.aar/a8f3579bea8d3f58ceb39b1833fd261e/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.0.0/e070ffae07452331bc5684734fce6831d531785c/lifecycle-common-2.0.0.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.0.0/45599f2cd5965ac05a1488fa2a5c0cdd7c499ead/annotation-1.0.0.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/androidx.constraintlayout/constraintlayout-solver/1.1.3/54abe9ffb22cc9019b0b6fcc10f185cc4e67b34e/constraintlayout-solver-1.1.3.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/rxandroid-2.0.2.aar/3094f0b8db9b87ba128b5c02a20dd4ca/jars/classes.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.1.13/193f20aa559aaa5b9eb1154a9e2ee7dbde476213/rxjava-2.1.13.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/transforms-1/files-1.1/mimecraft-1.1.1.jar/4e14c7bf92d24bb27d7a7a5d50d201d9/jetified-mimecraft-1.1.1.jar] (filtered)
Reading program jar [/Users/zach/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.2/323964c36556eb0e6209f65c1cef72b53b461ab8/reactive-streams-1.0.2.jar] (filtered)
Reading program directory [/Users/zach/Developer/Code/InstabugProguardExample/app/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes] (filtered)
Reading program jar [/Users/zach/Developer/Code/InstabugProguardExample/app/build/intermediates/transforms/mergeJavaRes/release/0.jar] (filtered)
Reading library jar [/Users/zach/Library/Android/sdk/platforms/android-28/android.jar]
Reading library jar [/Users/zach/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar]
Reading library jar [/Users/zach/Library/Android/sdk/platforms/android-28/optional/org.apache.http.legacy.jar]
Reading library jar [/Users/zach/Library/Android/sdk/platforms/android-28/optional/android.test.mock.jar]
Reading library jar [/Users/zach/Library/Android/sdk/platforms/android-28/optional/android.test.base.jar]
Reading library jar [/Users/zach/Library/Android/sdk/platforms/android-28/optional/android.test.runner.jar]
Initializing...
Note: the configuration refers to the unknown class 'rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef'
Note: the configuration refers to the unknown class 'rx.internal.util.atomic.LinkedQueueNode'
Note: the configuration refers to the unknown class 'rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef'
Note: the configuration refers to the unknown class 'rx.internal.util.atomic.LinkedQueueNode'
Note: the configuration refers to the unknown class 'com.instabug.library.R.menu'
Note: the configuration refers to the unknown class '.R'
      Maybe you meant the fully qualified name 'androidx.activity.R'?
      Maybe you meant the fully qualified name 'androidx.appcompat.R'?
      Maybe you meant the fully qualified name 'androidx.arch.core.R'?
      Maybe you meant the fully qualified name 'androidx.asynclayoutinflater.R'?
      Maybe you meant the fully qualified name 'androidx.cardview.R'?
      Maybe you meant the fully qualified name 'androidx.constraintlayout.widget.R'?
      Maybe you meant the fully qualified name 'androidx.coordinatorlayout.R'?
      Maybe you meant the fully qualified name 'androidx.core.R'?
      Maybe you meant the fully qualified name 'androidx.cursoradapter.R'?
      Maybe you meant the fully qualified name 'androidx.customview.R'?
      Maybe you meant the fully qualified name 'androidx.documentfile.R'?
      Maybe you meant the fully qualified name 'androidx.drawerlayout.R'?
      Maybe you meant the fully qualified name 'androidx.fragment.R'?
      Maybe you meant the fully qualified name 'androidx.interpolator.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.coreui.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.coreutils.R'?
      Maybe you meant the fully qualified name 'androidx.legacy.v4.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.livedata.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.livedata.core.R'?
      Maybe you meant the fully qualified name 'androidx.lifecycle.viewmodel.R'?
      Maybe you meant the fully qualified name 'androidx.loader.R'?
      Maybe you meant the fully qualified name 'androidx.localbroadcastmanager.R'?
      Maybe you meant the fully qualified name 'androidx.media.R'?
      Maybe you meant the fully qualified name 'androidx.print.R'?
      Maybe you meant the fully qualified name 'androidx.recyclerview.R'?
      Maybe you meant the fully qualified name 'androidx.slidingpanelayout.R'?
      Maybe you meant the fully qualified name 'androidx.swiperefreshlayout.R'?
      Maybe you meant the fully qualified name 'androidx.transition.R'?
      Maybe you meant the fully qualified name 'androidx.vectordrawable.R'?
      Maybe you meant the fully qualified name 'androidx.versionedparcelable.R'?
      Maybe you meant the fully qualified name 'androidx.viewpager.R'?
      Maybe you meant the fully qualified name 'com.example.instabugproguardexample.R'?
      Maybe you meant the fully qualified name 'com.google.android.material.R'?
      Maybe you meant the fully qualified name 'com.instabug.all.R'?
      Maybe you meant the fully qualified name 'com.instabug.bug.R'?
      Maybe you meant the fully qualified name 'com.instabug.chat.R'?
      Maybe you meant the fully qualified name 'com.instabug.crash.R'?
      Maybe you meant the fully qualified name 'com.instabug.featuresrequest.R'?
      Maybe you meant the fully qualified name 'com.instabug.library.R'?
      Maybe you meant the fully qualified name 'com.instabug.survey.R'?
      Maybe you meant the fully qualified name 'io.reactivex.android.R'?
      Maybe you meant the fully qualified name 'android.R'?
Note: the configuration refers to the unknown class 'com.instabug.library.ui.onboarding.WelcomeMessageState'
Note: the configuration refers to the unknown class 'com.instabug.library.internal.video.ScreenRecordingService.Action'
      Maybe you meant the fully qualified name 'io.reactivex.functions.Action'?
Note: the configuration refers to the unknown class 'com.instabug.library.internal.video.ScreenRecordingService.Action'
      Maybe you meant the fully qualified name 'io.reactivex.functions.Action'?
Warning: com.instabug.library.util.FileUtils: can't find referenced class javax.annotation.Nonnull

> Task :app:transformClassesAndResourcesWithProguardForRelease
Request to incrementing alive workforce from 0. Current workforce (dead or alive) 0
thread-pool size=4

Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationMenuView { void setPresenter(com.google.android.material.bottomnavigation.BottomNavigationPresenter); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationPresenter'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemReselectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setChipDrawable(com.google.android.material.chip.ChipDrawable); }', but not the descriptor class 'com.google.android.material.chip.ChipDrawable'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setTextAppearance(com.google.android.material.resources.TextAppearance); }', but not the descriptor class 'com.google.android.material.resources.TextAppearance'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.ChipGroup { void setOnCheckedChangeListener(com.google.android.material.chip.ChipGroup$OnCheckedChangeListener); }', but not the descriptor class 'com.google.android.material.chip.ChipGroup$OnCheckedChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealFrameLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealGridLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealLinearLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealRelativeLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.cardview.CircularRevealCardView { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.coordinatorlayout.CircularRevealCoordinatorLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.navigation.NavigationView { void setNavigationItemSelectedListener(com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnLayoutChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnAttachStateChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.stateful.ExtendableSavedState { ExtendableSavedState(android.os.Parcel,java.lang.ClassLoader,com.google.android.material.stateful.ExtendableSavedState$1); }', but not the descriptor class 'com.google.android.material.stateful.ExtendableSavedState$1'
Note: the configuration keeps the entry point 'com.google.android.material.tabs.TabLayout { void setOnTabSelectedListener(com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener); }', but not the descriptor class 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.textfield.TextInputLayout { void setTextInputAccessibilityDelegate(com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate); }', but not the descriptor class 'com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate'
Note: the configuration keeps the entry point 'com.instabug.bug.OnSdkDismissedCallback { void onSdkDismissed(com.instabug.bug.OnSdkDismissedCallback$DismissType,com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { java.util.List getSubReportCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { java.util.List getRemoteSubReportCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.model.ReportCategory { boolean hasSubCategories(com.instabug.bug.model.b); }', but not the descriptor class 'com.instabug.bug.model.b'
Note: the configuration keeps the entry point 'com.instabug.bug.screenshot.viewhierarchy.utilities.ViewHierarchyDiskUtils { void saveViewHierarchyImage(com.instabug.bug.screenshot.viewhierarchy.b); }', but not the descriptor class 'com.instabug.bug.screenshot.viewhierarchy.b'
Note: the configuration keeps the entry point 'com.instabug.bug.screenshot.viewhierarchy.utilities.ViewHierarchyDiskUtils { android.net.Uri zipViewHierarchyImages(com.instabug.bug.screenshot.viewhierarchy.b); }', but not the descriptor class 'com.instabug.bug.screenshot.viewhierarchy.b'
Note: the configuration keeps the entry point 'com.instabug.chat.cache.ChatsCacheManager { void updateLocalMessageWithSyncedMessage(android.content.Context,com.instabug.chat.model.Message); }', but not the descriptor class 'com.instabug.chat.model.Message'
Note: the configuration keeps the entry point 'com.instabug.chat.cache.ReadQueueCacheManager { void add(com.instabug.chat.model.d); }', but not the descriptor class 'com.instabug.chat.model.d'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void syncMessages(android.content.Context,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void handleSuccessResponse(com.instabug.library.network.RequestResponse,android.content.Context,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void handleFailureResponse(io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void handleTTL(long,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void access$300(com.instabug.chat.synchronization.SynchronizationManager,com.instabug.library.network.RequestResponse,android.content.Context,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void access$500(com.instabug.chat.synchronization.SynchronizationManager,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.chat.synchronization.SynchronizationManager { void access$700(com.instabug.chat.synchronization.SynchronizationManager,android.content.Context,io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.crash.CrashReporting { void createStateTextFile(android.content.Context,com.instabug.crash.models.Crash,java.io.File); }', but not the descriptor class 'com.instabug.crash.models.Crash'
Note: the configuration keeps the entry point 'com.instabug.crash.CrashReporting { void stopAutoScreenRecordingAndAttach(com.instabug.crash.models.Crash); }', but not the descriptor class 'com.instabug.crash.models.Crash'
Note: the configuration keeps the entry point 'com.instabug.crash.CrashReporting { void addCrashAttachments(android.content.Context,com.instabug.crash.models.Crash); }', but not the descriptor class 'com.instabug.crash.models.Crash'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.FeatureRequestCacheManager { void addFeature(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.NewFeatureRequestsCacheManager { void addNewFeatureRequest(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.NewFeatureRequestsCacheManager { com.instabug.featuresrequest.models.FeatureRequest deleteNewFeatureRequest(com.instabug.featuresrequest.models.FeatureRequest); }', but not the descriptor class 'com.instabug.featuresrequest.models.FeatureRequest'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.cache.TimelineCacheManager { void addTimeline(com.instabug.featuresrequest.models.e); }', but not the descriptor class 'com.instabug.featuresrequest.models.e'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.IbFrRippleView { void setRippleType(com.instabug.featuresrequest.ui.custom.IbFrRippleView$b); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.IbFrRippleView$b'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.IbFrRippleView { void setOnRippleCompleteListener(com.instabug.featuresrequest.ui.custom.IbFrRippleView$a); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.IbFrRippleView$a'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.SnackbarLayout { void setOnLayoutChangeListener(com.instabug.featuresrequest.ui.custom.SnackbarLayout$b); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.SnackbarLayout$b'
Note: the configuration keeps the entry point 'com.instabug.featuresrequest.ui.custom.SnackbarLayout { void setOnAttachStateChangeListener(com.instabug.featuresrequest.ui.custom.SnackbarLayout$a); }', but not the descriptor class 'com.instabug.featuresrequest.ui.custom.SnackbarLayout$a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a); }', but not the descriptor class 'com.instabug.library.a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a,com.instabug.library.Instabug$1); }', but not the descriptor class 'com.instabug.library.a'
Note: the configuration keeps the entry point 'com.instabug.library.Instabug { Instabug(com.instabug.library.a,com.instabug.library.Instabug$1); }', but not the descriptor class 'com.instabug.library.Instabug$1'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setDrawingMode(com.instabug.library.annotation.AnnotationView$b); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$b'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnActionDownListener(com.instabug.library.annotation.AnnotationView$e); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$e'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnNewMagnifierAddingAِِِbilityChangedListener(com.instabug.library.annotation.AnnotationView$f); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$f'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.AnnotationView { void setOnPathRecognizedListener(com.instabug.library.annotation.AnnotationView$g); }', but not the descriptor class 'com.instabug.library.annotation.AnnotationView$g'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ColorPickerPopUpView { void setOrientation(com.instabug.library.annotation.ColorPickerPopUpView$c); }', but not the descriptor class 'com.instabug.library.annotation.ColorPickerPopUpView$c'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ColorPickerPopUpView { void setOnColorSelectionListener(com.instabug.library.annotation.ColorPickerPopUpView$b); }', but not the descriptor class 'com.instabug.library.annotation.ColorPickerPopUpView$b'
Note: the configuration keeps the entry point 'com.instabug.library.annotation.ShapeSuggestionsLayout { void setOnShapeSelectedListener(com.instabug.library.annotation.ShapeSuggestionsLayout$a); }', but not the descriptor class 'com.instabug.library.annotation.ShapeSuggestionsLayout$a'
Note: the configuration keeps the entry point 'com.instabug.library.broadcast.LastContactedChangedBroadcast { LastContactedChangedBroadcast(com.instabug.library.broadcast.LastContactedChangedBroadcast$a); }', but not the descriptor class 'com.instabug.library.broadcast.LastContactedChangedBroadcast$a'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.EventBus { EventBus(io.reactivex.subjects.PublishSubject); }', but not the descriptor class 'io.reactivex.subjects.PublishSubject'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.EventBus { io.reactivex.disposables.Disposable subscribe(io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.library.core.eventbus.coreeventbus.SDKCoreEventSubscriber { io.reactivex.disposables.Disposable subscribe(io.reactivex.functions.Consumer); }', but not the descriptor class 'io.reactivex.functions.Consumer'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void prepare(com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void stream(java.lang.String,com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void getDurationAsync(java.lang.String,com.instabug.library.internal.media.AudioPlayer$b); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$b'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void doAction(com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.media.AudioPlayer { void access$000(com.instabug.library.internal.media.AudioPlayer,com.instabug.library.internal.media.AudioPlayer$a); }', but not the descriptor class 'com.instabug.library.internal.media.AudioPlayer$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.AttachmentManager { void saveBitmap(android.graphics.Bitmap,android.content.Context,com.instabug.library.internal.storage.AttachmentManager$a); }', but not the descriptor class 'com.instabug.library.internal.storage.AttachmentManager$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.AttachmentManager { void saveBitmap(android.graphics.Bitmap,java.io.File,com.instabug.library.internal.storage.AttachmentManager$a); }', but not the descriptor class 'com.instabug.library.internal.storage.AttachmentManager$a'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { com.instabug.library.internal.storage.cache.Cache addCache(com.instabug.library.internal.storage.cache.Cache); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { void migrateCache(com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.CacheManager$KeyExtractor); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.internal.storage.cache.CacheManager { void migrateCache(com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.Cache,com.instabug.library.internal.storage.cache.CacheManager$KeyExtractor); }', but not the descriptor class 'com.instabug.library.internal.storage.cache.Cache'
Note: the configuration keeps the entry point 'com.instabug.library.logging.InstabugLog { void addLog(com.instabug.library.logging.InstabugLog$b); }', but not the descriptor class 'com.instabug.library.logging.InstabugLog$b'
Note: the configuration keeps the entry point 'com.instabug.library.model.State { com.instabug.library.model.State setSessionProfilerTimeline(com.instabug.library.sessionprofiler.model.timeline.c); }', but not the descriptor class 'com.instabug.library.sessionprofiler.model.timeline.c'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { io.reactivex.Observable doRequest(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.Request buildRequest(android.content.Context,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection buildConnection(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithNormalType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithFileDownloadType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection connectWithMultiPartType(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.RequestResponse handleFileDownloadRequestResponse(com.instabug.library.network.Request,java.net.HttpURLConnection); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$100(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$200(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { java.net.HttpURLConnection access$300(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager { com.instabug.library.network.RequestResponse access$600(com.instabug.library.network.NetworkManager,com.instabug.library.network.Request,java.net.HttpURLConnection); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.library.network.NetworkManager$OnDoRequestListener { void onRequestStarted(com.instabug.library.network.Request); }', but not the descriptor class 'com.instabug.library.network.Request'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.NpsView { void setOnSelectionListener(com.instabug.survey.ui.custom.NpsView$a); }', but not the descriptor class 'com.instabug.survey.ui.custom.NpsView$a'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.RatingView { void setGravity(com.instabug.survey.ui.custom.RatingView$a); }', but not the descriptor class 'com.instabug.survey.ui.custom.RatingView$a'
Note: the configuration keeps the entry point 'com.instabug.survey.ui.custom.RatingView { void setOnRatingBarChangeListener(com.instabug.survey.ui.custom.RatingView$b); }', but not the descriptor class 'com.instabug.survey.ui.custom.RatingView$b'
Note: there were 9 references to unknown classes.
      You should check your configuration for typos.
      (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Note: there were 89 unkept descriptor classes in kept class members.
      You should consider explicitly keeping the mentioned classes
      (using '-keep').
      (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Warning: there were 1 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
Thread(Tasks limiter_1): destruction

> Task :app:transformClassesAndResourcesWithProguardForRelease FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> Job failed, see logs for details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 13s
22 actionable tasks: 10 executed, 12 up-to-date
mzelzoghbi commented 5 years ago

Hey @ZOlbrys,

Thanks for Reporting this, we will release a hot-fix soon, I'll update you once it is released. For now you can use this snapshot.

implementation 'com.instabug.library:instabug:8.0.15.6-SNAPSHOT'

And don't forget to add this to your app build.gradle before your dependencies

repositories {
    ....
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }
    ...
}

This snapshot is completely safe to use and has no debug code at all.

ZOlbrys commented 5 years ago

Hi @mzelzoghbi - thanks for the quick response!

Using 8.0.15.6-SNAPSHOT I am able to run the assembleRelease task successfully.

However, I still see a lot of the notes about the configuration keeps the entry point... etc. Do you know if these notes are something that needs to be corrected on the Instabug side? Or is there something I can do to avoid these? Sorry if it's a dumb question, I'm not too familiar with proguard yet!

Thanks again!

mzelzoghbi commented 5 years ago

I am happy to hear that this snapshot solved the issue and we already released this fix in version 8.0.16

implementation 'com.instabug.library:instabug:8.0.16' 

Regarding the notes, this needs to be fixed from our side and we are working on a fix that will be released soon, however, this has no impact on production code.

ZOlbrys commented 5 years ago

@mzelzoghbi Awesome, thanks for the support!

ZOlbrys commented 5 years ago

@mzelzoghbi Should I open a new ticket to track this? I'm up to version 8.0.19 and the warnings are still being reported.

mzelzoghbi commented 5 years ago

@ZOlbrys can you share with me these warnings, please?

ZOlbrys commented 5 years ago

@mzelzoghbi of course. Here's some of the output I see with the Instabug 8.0.19:

Zachs-MBP:InstabugProguardExample Zach$ ./gradlew assembleRelease
ProGuard, version 6.0.3
...
> Task :app:transformClassesAndResourcesWithProguardForRelease
Request to incrementing alive workforce from 0. Current workforce (dead or alive) 0
thread-pool size=4

Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationMenuView { void setPresenter(com.google.android.material.bottomnavigation.BottomNavigationPresenter); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationPresenter'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemReselectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setChipDrawable(com.google.android.material.chip.ChipDrawable); }', but not the descriptor class 'com.google.android.material.chip.ChipDrawable'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setTextAppearance(com.google.android.material.resources.TextAppearance); }', but not the descriptor class 'com.google.android.material.resources.TextAppearance'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.chip.ChipGroup { void setOnCheckedChangeListener(com.google.android.material.chip.ChipGroup$OnCheckedChangeListener); }', but not the descriptor class 'com.google.android.material.chip.ChipGroup$OnCheckedChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealFrameLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealGridLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealLinearLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealRelativeLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.cardview.CircularRevealCardView { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.coordinatorlayout.CircularRevealCoordinatorLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
Note: the configuration keeps the entry point 'com.google.android.material.navigation.NavigationView { void setNavigationItemSelectedListener(com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnLayoutChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnAttachStateChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener'
Note: the configuration keeps the entry point 'com.google.android.material.tabs.TabLayout { void setOnTabSelectedListener(com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener); }', but not the descriptor class 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener'
Note: the configuration keeps the entry point 'com.google.android.material.textfield.TextInputLayout { void setTextInputAccessibilityDelegate(com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate); }', but not the descriptor class 'com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate'
Note: there were 21 unkept descriptor classes in kept class members.
      You should consider explicitly keeping the mentioned classes
      (using '-keep').
      (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
...

You can use the sample app here as well to reproduce this: https://github.com/ZOlbrys/InstabugProguardExample

if I remove the instabug dependency from the project none of these errors are reported.

Please let me know if you'd prefer a new issue, I'll gladly open one! Thanks for reviewing this!