Status Update
Comments
xa...@google.com <xa...@google.com> #2
What are you trying to do? Can you include a sample project that reproduces your issue?
pa...@google.com <pa...@google.com> #3
hu...@google.com <hu...@google.com> #4
Crash on 2.3.2:
Caused by: java.lang.ClassCastException: com.navigation.sample.SingleDialogNavigator cannot be cast to androidx.navigation.fragment.DialogFragmentNavigator
at androidx.navigation.fragment.NavHostFragment.onAttachFragment(NavHostFragment.java:293)
Expected behavior: no crash as in 2.3.1
hu...@google.com <hu...@google.com> #5
[Deleted User] <[Deleted User]> #6
Branch: androidx-main
commit ffe68e0a3be1da83217fadd4e40c5abad4f72b82
Author: Ian Lake <ilake@google.com>
Date: Tue Apr 06 12:40:35 2021
Use FragmentOnAttachListener in DialogFragmentNavigator
Rather than having the NavHostFragment
explicitly look for the DialogFragmentNavigator
to forward the fragment attach callback,
have DialogFragmentNavigator use the
Fragment 1.3 FragmentOnAttachListener API
to fully contain that logic within the
DialogFragmentNavigator.
Relnote: "`NavHostFragment` now supports custom
Navigators that use the same `@Navigator.Name(\"dialog\")`
as the default `DialogFragmentNavigator`."
Test: existing tests still pass
BUG: 175979140
Change-Id: Ib1c2cc38e7a621d133be1f4c3692e62913450dda
M navigation/navigation-fragment/api/public_plus_experimental_current.txt
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/DialogFragmentNavigator.kt
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.kt
hu...@google.com <hu...@google.com> #7
In the upcoming Navigation 2.4.0-alpha01
, we've updated our Fragment dependency such that we can use the 1.3.0
FragmentOnAttachListener
to handle the case where previously the NavHostFragment
needed to be involved. Thus, NavHostFragment
no longer needs to cast the Navigator returned by the dialog
name to DialogNavigator
.
As a workaround, your custom Navigator can use any name other than dialog
(say, singleDialog
) and it'll work just fine if you use that instead of dialog
.
jt...@temp.thunderhead.com <jt...@temp.thunderhead.com> #8
Thank you for fixing this. Would singleDialog
have to be also used in the navigation resources files? I didn't know we could create custom navigation targets with different names outside of dialog
, fragment
and activity
ms...@gmail.com <ms...@gmail.com> #9
The default DialogFragmentNavigator
, FragmentNavigator
, and ActivityNavigator
use the exact same @Navigator.Name
API as is available to every custom Navigator (there's no special casing on the Navigation library side), so yes, it can also be used from XML.
hu...@google.com <hu...@google.com> #11
st...@gmail.com <st...@gmail.com> #12
im...@google.com <im...@google.com> #13
st...@gmail.com <st...@gmail.com> #14
jt...@temp.thunderhead.com <jt...@temp.thunderhead.com> #15
hu...@google.com <hu...@google.com> #16
We are working a on better solution that does not require developers to use the workaround. This bug is left open to keep track of that work.
ne...@gmail.com <ne...@gmail.com> #17
hu...@google.com <hu...@google.com> #18
ne...@gmail.com <ne...@gmail.com> #19
The problem is that Robolectric can't be used with 3.2.1 when Jetifier is enabled because it tries to re-write 'org.ow2.asm:asm' jar which has class files of version > 52.
So I would like to blacklist this jar from being processed.
hu...@google.com <hu...@google.com> #20
ri...@gmail.com <ri...@gmail.com> #21
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptGenerateStubsDebugKotlin'
...
Caused by: java.lang.RuntimeException: Failed to transform '/Users/user/.gradle/caches/modules-2/files-2.1/org.xerial/sqlite-jdbc/3.20.1/df3068e837e9490a9554212fcab40a2c55faf0a3/sqlite-jdbc-3.20.1.jar' using Jetifier. Reason: invalid entry size (expected 618164 but got 636977 bytes). (Run with --stacktrace for more details.) To disable Jetifier, set android.enableJetifier=false in your gradle.properties file.
at com.android.build.gradle.internal.dependency.JetifyTransform.transform(JetifyTransform.kt:204)
hu...@google.com <hu...@google.com> #22
ri...@gmail.com <ri...@gmail.com> #23
ri...@gmail.com <ri...@gmail.com> #24
hu...@google.com <hu...@google.com> #25
em...@gmail.com <em...@gmail.com> #26
I have this error but I cannot fix if with blacklist, is it the same issue ? Could `android.jetifier.blacklist` property fix it ?
09:08:56 > Could not resolve all files for configuration ':app:releaseUnitTestCompileClasspath'.
09:08:56 > Failed to transform artifact 'full.jar (project :api)' to match attributes {artifactType=processed-jar, com.android.build.api.attributes.BuildTypeAttr=release, com.android.build.api.attributes.VariantAttr=release, com.android.build.gradle.internal.dependency.AndroidTypeAttr=Aar, org.gradle.usage=java-api, org.jetbrains.kotlin.platform.type=androidJvm}
Thanks
hu...@google.com <hu...@google.com> #27
me...@thomaskeller.biz <me...@thomaskeller.biz> #29
cucumber.runtime.CucumberException: No backends were found. Please make sure you have a backend module on your CLASSPATH.
Cucumber reports that when an artifact like `cucumber-java` (or any other language backend) is not present. Cucumber tries to service-load this automatically when present in the classpath (see
Interestingly, the tests continued to run without issues in Android Studio, they were just failing when executed from command line. A test run with --debug showed me that the Gradle run however used jetified versions of the cucumber libraries in the application classpath. Adding `.*cucumber.*` to the jetifier blacklist solved the issue.
I'm completely unaware of the black magic that Jetifier involves, but I see that it has some very serious consequences when applied broadly on a project, things that are rather hard to track down because subtle things like service locators suddenly stop working.
hu...@google.com <hu...@google.com> #30
If possible, could you attach the original version of the cucumber library and the jetified version, so that we can investigate what was actually modified by Jetifier?
hu...@google.com <hu...@google.com> #31
After updating to AGP 4.0.0-alpha07+, please remove the android.jetifier.blacklist property if you have been using it. And if you still run into issues after doing that, please file a bug with us at
To close the loop on the 3 different approaches outlined at
> We need a way to determine whether a third-party library should be jetified or not. There are a couple of approaches:
> 1. The library adds some metadata stating that it is AndroidX-ready and therefore should not be jetified.
=> Infeasible
> 2. Jetifier automatically detects the presence of AndroidX (e.g., import statements and strings containing references to AndroidX), and if AndroidX is present, assumes that the library is AndroidX-ready and skips converting it.
=> Implemented
> 3. The users need to specify a blacklist of libraries that should not be jetified.
=> Used previously as a workaround (see
Description
Example failures:
(1)
Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.
> Could not resolve all files for configuration ':app:kapt'.
> Failed to transform file 'butterknife-compiler-9.0.0-SNAPSHOT.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
> Failed to transform '...\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife-compiler\9.0.0-SNAPSHOT\d5efd0795737d4523044335a7faa82b0e3d984c9\butterknife-compiler-9.0.0-SNAPSHOT.jar' using Jetifier.
Reason: The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.
(2)
Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.
> Could not resolve all files for configuration ':app:kapt'.
> Failed to transform file 'jetifier-core-1.0.0-alpha10.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
> Failed to transform '/Users/nkotula/.gradle/caches/modules-2/files-2.1/com.android.tools.build.jetifier/jetifier-core/1.0.0-alpha10/9eb7027c383061de12f93aae7a22cbeb97832d2a/jetifier-core-1.0.0-alpha10.jar' using Jetifier. Reason: The given artifact contains a string literal with a package reference 'android/support/v4' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.
(In this example, Jetifier even tries to jetify itself!)
(3)
Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.
> Could not resolve all files for configuration ':app:kapt'.
> Failed to transform file 'kotlin-compiler-embeddable-1.2.21.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
> Failed to transform '/root/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/1.2.21/39456b64a42dc359e385697e2e93b5cba52e197f/kotlin-compiler-embeddable-1.2.21.jar' using Jetifier.
Reason: Malformed input or input contains unmappable characters: javaslang/?.class.
(In this example, kotlin-compiler-embeddable-1.2.21.jar does not need to be jetified but was jetified and then failed.)
We need a way to determine whether a third-party library should be jetified or not. There are a couple of approaches:
1. The library adds some metadata stating that it is AndroidX-ready and therefore should not be jetified. (The Android Gradle plugin can also help to add this information automatically for libraries that are built using the AGP.)
2. Jetifier automatically detects the presence of AndroidX (e.g., import statements and strings containing references to AndroidX), and if AndroidX is present, assumes that the library is AndroidX-ready and skips converting it.
3. The users need to specify a blacklist of libraries that should not be jetified.
We'll need to weigh the pros and cons of these approaches and select the best one (or a combination of them).