Fixed
Status Update
Comments
gg...@google.com <gg...@google.com>
il...@google.com <il...@google.com>
yb...@google.com <yb...@google.com>
at...@gmail.com <at...@gmail.com> #2
I guess technically, the ProGuard rule should be on androidx.work.NonBlockingWorker subclasses, but I'd also be okay with just not using reflection to access the Worker(Context, WorkerParamters) constructor and skipping the need for a ProGuard rule at all.
at...@gmail.com <at...@gmail.com> #4
The fix will be available in alpha10.
il...@google.com <il...@google.com> #5
I tried to use the ProGuard configuration which is linked in comment #3 in my project.
The release build fails and the following warnings are printed:
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.NonBlockingWorker { NonBlockingWorker(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.NonBlockingWorker { void internalInit(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.Worker { Worker(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
The app is opensource if you want to run the release build yourself. Here is the branch (WIP):
https://github.com/EventFahrplan/EventFahrplan/tree/workmanager
Please run: ./gradlew --info --debug aCcc34c3Release
The release build fails and the following warnings are printed:
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.NonBlockingWorker { NonBlockingWorker(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.NonBlockingWorker { void internalInit(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
22:22:06.567 [QUIET] [system.out] Note: the configuration keeps the entry point 'androidx.work.Worker { Worker(android.content.Context,androidx.work.WorkerParameters); }', but not the descriptor class 'androidx.work.WorkerParameters'
The app is opensource if you want to run the release build yourself. Here is the branch (WIP):
Please run: ./gradlew --info --debug aCcc34c3Release
ma...@gmail.com <ma...@gmail.com> #6
Ah, that's because we have a typo in our Proguard file. Change WorkParameters to WorkerParameters.
il...@google.com <il...@google.com>
il...@google.com <il...@google.com> #7
Thank you for quick reply. I changed this here:
https://github.com/EventFahrplan/EventFahrplan/commit/7567331dc69a303d5c423850a97bf29005ea7b1c
The release build still fails though. Here is a part of the log output:
23:43:15.760 [ERROR] [system.err] Note: there were 11 duplicate class definitions.
23:43:15.760 [ERROR] [system.err] (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass )
23:43:15.822 [QUIET] [system.out] Initializing...
23:43:15.827 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.impl.background.firebase.FirebaseJobScheduler'
23:43:15.845 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.WorkParameters'
23:43:15.857 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.impl.background.firebase.FirebaseJobScheduler'
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.285 [ERROR] [system.err] Warning: androidx.work.impl.background.systemjob.SystemJobService: can't find referenced method 'android.net.Network getNetwork()' in library class android.app.job.JobParameters
23:43:16.883 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobService
23:43:16.883 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobScheduler
23:43:16.911 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
23:43:16.911 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
23:43:16.912 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk7.JDK7PlatformImplementations
23:43:16.912 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
23:43:16.914 [QUIET] [system.out] Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.ConscryptEngineSocket
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
The release build still fails though. Here is a part of the log output:
23:43:15.760 [ERROR] [system.err] Note: there were 11 duplicate class definitions.
23:43:15.760 [ERROR] [system.err] (
23:43:15.822 [QUIET] [system.out] Initializing...
23:43:15.827 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.impl.background.firebase.FirebaseJobScheduler'
23:43:15.845 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.WorkParameters'
23:43:15.857 [QUIET] [system.out] Note: the configuration refers to the unknown class 'androidx.work.impl.background.firebase.FirebaseJobScheduler'
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper: can't find referenced class sun.misc.Unsafe
23:43:16.272 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.273 [ERROR] [system.err] Warning: androidx.concurrent.futures.AbstractFuture$UnsafeAtomicHelper$1: can't find referenced class sun.misc.Unsafe
23:43:16.285 [ERROR] [system.err] Warning: androidx.work.impl.background.systemjob.SystemJobService: can't find referenced method 'android.net.Network getNetwork()' in library class android.app.job.JobParameters
23:43:16.883 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobService
23:43:16.883 [QUIET] [system.out] Note: androidx.work.impl.Schedulers: can't find dynamically referenced class androidx.work.impl.background.firebase.FirebaseJobScheduler
23:43:16.911 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
23:43:16.911 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
23:43:16.912 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk7.JDK7PlatformImplementations
23:43:16.912 [QUIET] [system.out] Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
23:43:16.914 [QUIET] [system.out] Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.ConscryptEngineSocket
23:43:16.944 [QUIET] [system.out] Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
ap...@google.com <ap...@google.com> #8
I think your compileSdk is too low. WorkManager requires it to be 28 or higher: https://irina-dot-devsite.googleplex.com/topic/libraries/architecture/adding-components
I'm not sure why you are running into the warnings about Unsafe, but you can try using -dontwarn sun.misc.Unsafe in your proguard file to see if it helps. We haven't observed it ourselves.
For what it's worth, one of the notes is referring to WorkParameters still - are you sure it was changed properly?
I'm not sure why you are running into the warnings about Unsafe, but you can try using -dontwarn sun.misc.Unsafe in your proguard file to see if it helps. We haven't observed it ourselves.
For what it's worth, one of the notes is referring to WorkParameters still - are you sure it was changed properly?
at...@gmail.com <at...@gmail.com> #10
I changed the ProGuard configuration as you can see it in the GitHub repository. It matches with your change here https://android-review.googlesource.com/c/platform/frameworks/support/+/782087/2/work/workmanager/proguard-rules.pro if I don't miss anything. I cannot tell why "WorkParameters" is still listed. I verified the output once again by running ./gradlew clean --info --debug aCcc34c3Release. Feel free to run the build yourself. All you need to do is to create a random release-keystore and the app/gradle.properties from the app/gradle.properties.example.
So you saying when I want to migrate my app to targetSdkVersion 26 until November I need to raise the compileSdkVersion to 28 in order to use WorkManager? Using targetSdkVersion 26 with compileSdkVersion 28 won't work?
So you saying when I want to migrate my app to targetSdkVersion 26 until November I need to raise the compileSdkVersion to 28 in order to use WorkManager? Using targetSdkVersion 26 with compileSdkVersion 28 won't work?
il...@google.com <il...@google.com> #11
There shouldn't be any issues with targetSdkVersion 26 and compileSdkVersion 28.
at...@gmail.com <at...@gmail.com> #12
Okay. I will try that. Thanks.
Feel free to contact me if you are not able to build my project.
Feel free to contact me if you are not able to build my project.
at...@gmail.com <at...@gmail.com> #13
Does it suffice to raise the compileSdkVersion to 28 or do I also have to raise the version of the support library artifacts at the same time? I tried your suggestion in comment #11 but the build still fails.
il...@google.com <il...@google.com> #14
Project: platform/frameworks/support
Branch: androidx-master-dev
commit cee9ab55352f3ad506552afb4753baf8648b4c30
Author: Sumir Kataria <sumir@google.com>
Date: Mon Oct 08 14:20:57 2018
Fix class name in Proguard configuration.
Bug: 116296569
Test: N/A
Change-Id: I3525f9d2f3b06523cbe842b35f97014677879a64
M work/workmanager/proguard-rules.pro
https://android-review.googlesource.com/782087
https://goto.google.com/android-sha1/cee9ab55352f3ad506552afb4753baf8648b4c30
Branch: androidx-master-dev
commit cee9ab55352f3ad506552afb4753baf8648b4c30
Author: Sumir Kataria <sumir@google.com>
Date: Mon Oct 08 14:20:57 2018
Fix class name in Proguard configuration.
Bug: 116296569
Test: N/A
Change-Id: I3525f9d2f3b06523cbe842b35f97014677879a64
M work/workmanager/proguard-rules.pro
ap...@google.com <ap...@google.com> #15
Support library as well.
il...@google.com <il...@google.com> #16
Do the latest changes (WorkParameters -> WorkerParameters, NonBlockingWorker -> ListenableWorker) in the ProGuard configuration apply to WorkManager 1.0.0-alpha09 or 1.0.0-alpha10 or both?
Description
The Navigation Component has this very useful function to sync up menu items from a NavigationView with the NavController. It makes sure that the selected item is checked, can close the navigation drawer on selection if a DrawerLayout is used, or set the title of an ActionBar/Toolbar according to the current destination.
With the addition of the bottom app bar in Material Design we've also begun using the bottom navigation drawer (
public class BottomDrawerFragment extends BottomSheetDialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_bottom_drawer, container, false);
NavigationView navigationView = view.findViewById(R.id.bottom_drawer_navigation);
NavigationUI.setupWithNavController(navigationView, Navigation.findNavController(getActivity(), R.id.nav_host_fragment));
return view;
}
}
This works well, but because NavigationUI currently doesn't dismiss the BottomSheetDialogFragment when a menu item has been selected like it closes the DrawerLayout, the bottom navigation drawer remains open and needs to be dismissed in another way (which comes with additional code overhead and issues).
Since AndroidX is now part of AOSP, I took a look at the implementation and I think that support for this could be added with two lines of code (see '+' characters at beginning of lines below) by doing for the DialogFragment what is already done for the DrawerLayout (excerpt from androidx-master-dev/navigation/ui/src/main/java/androidx/navigation/ui/NavigationUI.java).
public static void setupWithNavController(@NonNull final NavigationView navigationView,
@NonNull final NavController navController) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = onNavDestinationSelected(item, navController, true);
if (handled) {
ViewParent parent = navigationView.getParent();
if (parent instanceof DrawerLayout) {
((DrawerLayout) parent).closeDrawer(navigationView);
+ } else if (parent instanceof BottomSheetDialogFragment) {
+ ((DialogFragment) parent).dismiss();
}
}
return handled;
}
});
navController.addOnNavigatedListener(new NavController.OnNavigatedListener() {
@Override
public void onNavigated(@NonNull NavController controller,
@NonNull NavDestination destination) {
Menu menu = navigationView.getMenu();
for (int h = 0, size = menu.size(); h < size; h++) {
MenuItem item = menu.getItem(h);
item.setChecked(matchDestination(destination, item.getItemId()));
}
}
});
}
The most active owner of the Navigation Component is Ian Lake and it he's been adding support for more and more UI components to the NavigationUI class in the past months, so I think he's the person to talk to about this. Assuming this doesn't introduce any issues, he could probably get it done in a couple of minutes.
Alternatively, I could implement this and the accompanying test myself, contribute it and try to get it reviewed.