"Could not initialize class" error running lint target from gradle - android

I'm working on an Android project with two projects inside it. When trying to run a build with gradlew (./gradlew build), I see the following error:
Execution failed for task ':example:lint'.
Could not initialize class
com.android.build.gradle.tasks.Lint$LintGradleIssueRegistry
With stacktrace enabled, this is listed as a java.lang.NoClassDefFoundError.
Oddly, the first time I ran this (which downloaded dependencies), the build failed with a different error:
Execution failed for task ':example:lint'.
lombok/ast/Node
The gradle wrapper that Android SDK created for the project is using Gradle 2.8.
Could this be a configuration issue with the project or my dev machine? I'm trying to avoid using the Android SDK lint tool as this complains about the projects using Gradle (and I hear it may miss some parts of these projects).

Turned out this was a configuration issue in our build.gradle. The following line had been added for testing and never removed:
configurations.classpath.exclude group: 'com.android.tools.external.lombok'
As such, the classes needed for linting were missing.
The following discussion pointed us in the right direction, in case it's useful to anyone else:
https://github.com/evant/gradle-retrolambda/issues/96

Related

Trouble getting gradle project building in Intellij: Task 'compileJava' is ambiguous

I am attempting to get
https://github.com/KodeinKoders/Playground-Demo-Crypto (commit 2a9b2b9)
Repository to build.
After doing some updates of tooling MacOS & XCode. And addition of the following override to gradle build file:
tasks.getByName<org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest>("iosX64Test") {
deviceId = "iPhone 14"
}
I am able to build within command line use
gradle build
On
MacOS: 13.2
XCode: 14.2
However, when I run build within IntelliJ. I get the following error:
Task 'compileJava' is ambiguous in root project 'DemoCrypto'. Candidates are: 'compileDebugAndroidTestJavaWithJavac', 'compileDebugJavaWithJavac', 'compileDebugUnitTestJavaWithJavac', 'compileReleaseJavaWithJavac', 'compileReleaseUnitTestJavaWithJavac'.
The IntelliJ notifications show:
Executing tasks: [:compileDebugSources, :compileDebugUnitTestSources, :compileDebugAndroidTestSources, :compileJava, :testClasses] in project /usr/local/workplace/sandbox-kotlin-thorg/Playground-Demo-Crypto
Prior to build failure.
I am new to gradle. I don't know where this list of tasks that intellij chooses to use for build is coming from? I am also confused by fact that running:
grep -r "compileDebugSources" .
From within the project root leads to 0 matches.
So the questions are:
How does IntelliJ choose to use that particular list of tasks to for its build. Given that compileDebugSources doesnt even exist in the project.
Advice on getting the build to work in IntelliJ?

If checkJetifier doesn't throw warning, does that mean I can remove it from my project?

I ran build -> Make Project, and then used the Build Analyzer.
Inside the reports, I select the Warning tab and no jetifier warnings are found. (The project is build with Android Gradle Plugin 4.1)
Does that mean that I can be confident that jetifier does not need to be used for any lib and I may disable the jetifier from the gradle.properties file?
In short, no.
Probabably it will only check direct dependencies or known dependencies. We use a vendor artifact that didn't throw any errors when compiling, running profiler, etc. But after running the app it threw exception because it was still requiring the android.support.v4.content.ContextCompat class

Gradle plugin 3.5.0: "Failed to transform artifact", "Execution failed for JetifyTransform"

We updated Android Gradle plugin from 3.4.2 to 3.5.0 (and Gradle from 5.1.1 to 5.4.1).
After that, the build started failing in a few submodules. Trying to assemble any build variant yields this (same error on the command line and in Android Studio):
> Failed to transform artifact 'bottom-navigation.aar (project :bottom-navigation)' to match attributes {artifactType=jar}.
> Execution failed for JetifyTransform: <project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar.
> Failed to transform '<project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar' using Jetifier.
Reason: Cannot open a library at 'FileMapping(from=<project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar, to=<project_root>/bottom-navigation/build/.transforms/9b2af95a5f0e0055110660c22ff05ab5/jetified-bottom-navigation-release.aar)'. (Run with --stacktrace for more details.)
Any ideas how to fix this?
What I've tried
"Invalidate caches" in AS and also clearing all Gradle caches in ~/.gradle/caches as suggested in this answer
All the advice in this somewhat similar question
I checked that the problematic modules use apply plugin:
'com.android.library' (instead of com.android.application)
I tried updating appcompat dependency to androidx.appcompat:appcompat:1.1.0 in affected modules and also removing that dependency
Update
It starts to look like something is wrong in Gradle plugin 3.5.0; builds behave erratically for me locally and on our CI machine.
For example, clean builds are failing: ./gradlew clean assembleBetaRelease fails while ./gradlew assembleBetaRelease works!
Also, sometimes I get AAPT: error: attribute ... not found instead of the above Failed to transform artifact error.
Reverting to Gradle plugin 3.4.2, all these problems disappear.
Edit Oct 2019: Still seeing this weird behaviour with Gradle plugin 3.5.1. Edit Nov 2019 And 3.5.2. Upgrading to Gradle 5.6 didn't help either.
A bit weird, but I got it working again. Apparently just a temporary glitch in Android Gradle plugin related to caching.
This answer helped me:
The simple way to solve this is to switch between your build variants. This refreshes the cached copies and resolves the issue.
I couldn't do that in Android Studio since the project sync was failing, but on the command line I tried another variant (in my case ./gradlew assembleBetaDebug having used ./gradlew assembleBetaRelease earlier). The build passed, and after that it worked for all all other variants too, and Gradle sync in Android Studio started working as well!
Edit: actually this is not completely solved; see updated question.
Update 12/2019: bundle* commands work fine, it's only assemble* that fails—still failing with Android Gradle plugin 3.5.3. Building in Android Studio works fine. Obviously this is not a common issue, and I don't know what exactly in the particular project I'm working on is causing this.
Update 04/2020: now with Android Gradle plugin 3.6.2 (and Gradle 5.6.4) builds work for me locally and I was able to update the project. On CircleCI, the build still occasionally fails with "Failed to transform artifact" but re-running fixes it. Go figure 🤔

NoClassDefFoundError when running unit test with Gradle task

I have a project using dynamic feature module, and I want to run my unit test in feature module via gradle task (for my CI purpose):
./gradlew :feature_product:test
But it always gives me NoClassDefFoundError for tests that have dependencies on classes from the base module:
com.example.android.feature.product.ProductViewTest > on vote change to negative FAILED
java.lang.NoClassDefFoundError: app.BaseView
ProductView class from the feature module extends BaseView from the base module.
Oddly, it succeeds when run in Android Studio, it works fine.
Then I notice something different in the logs, when I run via command line and when I run Android Studio. The first line in the Android Studio is generateDebugSources, something which absent when I run ./gradlew test
Executing tasks: [:lib_ui:generateDebugSources, ...]
How do I fix this? Does Android Studio has different command with the provided command ./gradlew test when I press Ctrl+Shift+R ?
After searching further about this issue, I found it also being reported in the android-test and app-bundle-samples projects and there is also an issue in the issue tracker.
It turns out this issue fixed in the Android Gradle Plugin 4.1.0 as per comment in the issue tracker.
If you don't want to update AGP to 4.1.0 which is still in alpha, adding this to the feature module's build.gradle fixed the issue for me, as per this comment:
testRuntimeOnly(files("$projectDir/../b_app/build/intermediates/app_classes/debug/classes.jar"))
If it is a missing task that you believe is necessary then calling it first like below should do the trick:
./gradlew :lib_ui:generateDebugSources :feature_product:test
I would even go full on and assemble the dependencies if necessary though that might take more time:
./gradlew :lib_ui:assemble :feature_product:assemble :feature_product:test

Gradle error in Android Studio: AndroidSdk.SendPing failed, Firebase client lib not compiling

When inserting a new activity (more specifically, navigation drawer activity) my gradle sync breaks and throws the following error:
Failed to find: com.firebase:firebase-client-android:1.1.0.0
I could undo the changes, but I would like to understand why gradle breaks while adding new activities.
Looking over the IDEA LOG, I came by the following Warning:
2014-11-20 15:53:26,547 [ 788010] WARN - ea.stats.LegacySdkStatsService - AndroidSdk.SendPing failed
java.net.UnknownHostException: tools.google.com
I figure it has something to do with the Gradle build file, but I'm not entirely sure why it would compile the Firebase library before adding an activity and after, not.
I'm running on a MacBook Air, OS X Yosemite.
build.gradle: https://gist.github.com/markbratanov/82fe78f7bc2c9064986b
Idea log: https://gist.github.com/markbratanov/d38949010198ec950acd
Any help or suggestions would be appreciated, thanks.
This was solved by deleting the library from gradle dependencies, and searching for the library in Maven Central (in this case, Firebase) and adding the latest version.

Categories

Resources