xamarin / AndroidSupportComponents

Xamarin bindings for Android Support libraries - For AndroidX see https://github.com/xamarin/AndroidX
MIT License
146 stars 56 forks source link

ProGuard fails when using WorkManager #166

Open tbalcom opened 5 years ago

tbalcom commented 5 years ago

Xamarin.Android Version (eg: 6.0):

9.2.0.5 (HEAD/292d27fa)

Operating System & Version (eg: Mac OSX 10.11):

Windows 10 1809 (OS build 17763.437)

Support Libraries Version (eg: 23.3.0):

28.0.0.1

Describe your Issue:

Adding Xamarin.Android.Arch.Work.Runtime NuGet package causes ProGuard to fail.

Steps to Reproduce (with link to sample solution if possible):

  1. Enable ProGuard
  2. Add Xamarin.Android.Arch.Work.Runtime NuGet package
  3. Compile

Sample solution

Include any relevant Exception Stack traces, build logs, adb logs:

Output from Visual Studio 2019:

1>C:\Users\Trevor.nuget\packages\xamarin.android.arch.work.runtime\1.0.0\build....\proguard\proguard.txt : warning XA4304: Proguard configuration file 'C:\Users\Trevor.nuget\packages\xamarin.android.arch.work.runtime\1.0.0\build....\proguard\proguard.txt' was not found. 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find superclass or interface android.arch.paging.PositionalDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced method 'int computeInitialLoadPosition(android.arch.paging.PositionalDataSource$LoadInitialParams,int)' in program class android.arch.persistence.room.paging.LimitOffsetDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced method 'int computeInitialLoadSize(android.arch.paging.PositionalDataSource$LoadInitialParams,int,int)' in program class android.arch.persistence.room.paging.LimitOffsetDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced method 'void invalidate()' in program class android.arch.persistence.room.paging.LimitOffsetDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadInitialCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeParams 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource$LoadRangeCallback 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource: can't find referenced class android.arch.paging.PositionalDataSource 1>PROGUARD : warning : android.arch.persistence.room.paging.LimitOffsetDataSource$1: can't find referenced method 'void invalidate()' in program class android.arch.persistence.room.paging.LimitOffsetDataSource 1>PROGUARD : warning : there were 27 unresolved references to classes or interfaces. 1>PROGUARD : warning : there were 4 unresolved references to program class members. 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2662,3): error MSB6006: "java.exe" exited with code 1.

tranb3r commented 4 years ago

@Redth Any progress on this issue ?

ndastur commented 4 years ago

Adding these to your own proguard config seems to solve the problem

-dontwarn android.arch.util.paging.CountedDataSource
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource
Redth commented 4 years ago

Yep, generally those errors just require adding proguard warnings. Thanks for posting that @ndastur !

ndastur commented 4 years ago

@redth the only thing I'd say is that the NuGET package should have the relevant proguard config included with it or at least something in the readme.

Redth commented 4 years ago

We ship whatever proguard rules exist in the .aar so I’m not sure why these rules would be missed, but apparently it was.

ndastur commented 4 years ago

Thanks @Redth .. Yes, they do seem to be. I'm sure I've seen a build warning saying an expected proguard file is missing. Any idea about timeline on a fix?

tranb3r commented 4 years ago

@Redth I don't understand why this issue has been closed:

Redth commented 4 years ago

Thanks, I wasn't aware the file wasn't being properly included. Looking at this. I see why it's happening (it's only inside proguard/proguard.txt in the nupkg instead of in proguard/monoandroid90/proguard.txt which the .targets file expects). We'll get this fixed and release an update.

ndastur commented 4 years ago

Brilliant. Thank you.

tranb3r commented 4 years ago

Thanks, I wasn't aware the file wasn't being properly included. Looking at this. I see why it's happening (it's only inside proguard/proguard.txt in the nupkg instead of in proguard/monoandroid90/proguard.txt which the .targets file expects). We'll get this fixed and release an update.

Are you kidding me ? This ticket was opened several months ago and the warning is the first line of the stack trace, how could you not be aware of that ??

Let me remind you that there are other issues concerning this package and waiting to be fixed: #204 #168

Redth commented 4 years ago

This should be fixed in this package update: https://www.nuget.org/packages/Xamarin.Android.Arch.Work.Runtime/1.0.0.3

Please let us know if this resolves the problem.

thudugala commented 4 years ago

issue is fixed

tranb3r commented 4 years ago

No more warnings but I still need to add some rules to my proguard.cfg in order for it to work.