Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[flutter_local_notifications] Upgraded Android Gradle Plugin to fix Android build #1781

Merged
merged 7 commits into from Nov 24, 2022

Conversation

Rexios80
Copy link
Contributor

Fixes:

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/rexios/.pub-cache/hosted/pub.dartlang.org/flutter_local_notifications-12.0.3/android/build.gradle'

* What went wrong:
Could not compile build file '/Users/rexios/.pub-cache/hosted/pub.dartlang.org/flutter_local_notifications-12.0.3/android/build.gradle'.
> startup failed:
  General error during conversion: Unsupported class file major version 63

  java.lang.IllegalArgumentException: Unsupported class file major version 63
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:199)
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:180)
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
  	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:287)
  	at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
  	at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:251)

  	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
  	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
  	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
  	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
  	at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
  	at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:110)
  	at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
  	at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
  	at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
  	at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:185)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.isUsingGenerics(DecompiledClassNode.java:86)
  	at org.codehaus.groovy.ast.tools.GenericsUtils.nonGeneric(GenericsUtils.java:275)
  	at org.codehaus.groovy.ast.decompiled.MemberSignatureParser.createMethodNode(MemberSignatureParser.java:101)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lambda$createMethodNode$1(DecompiledClassNode.java:230)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.createMethodNode(DecompiledClassNode.java:236)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitMembers(DecompiledClassNode.java:203)
  	at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getDeclaredMethods(DecompiledClassNode.java:122)
  	at org.codehaus.groovy.ast.ClassNode.tryFindPossibleMethod(ClassNode.java:1283)
  	at org.codehaus.groovy.control.StaticImportVisitor.transformMethodCallExpression(StaticImportVisitor.java:251)
  	at org.codehaus.groovy.control.StaticImportVisitor.transform(StaticImportVisitor.java:133)
  	at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:108)
  	at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
  	at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:66)
  	at org.codehaus.groovy.control.StaticImportVisitor.visitConstructorOrMethod(StaticImportVisitor.java:108)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructor(ClassCodeVisitorSupport.java:101)
  	at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1089)
  	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
  	at org.codehaus.groovy.control.CompilationUnit.lambda$addPhaseOperations$3(CompilationUnit.java:209)
  	at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
  	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
  	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
  	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389)
  	at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332)
  	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
  	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
  	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330)
  	at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.compileScript(DefaultScriptCompilationHandler.java:139)
...

@Rexios80
Copy link
Contributor Author

I had to remove the dependency on flutter_native_timezone from the example app since it's even more out of date than this plugin was. We could pull request that plugin too and then fix this, but since it's just the example app it's probably not worth the effort.

@MaikuB
Copy link
Owner

MaikuB commented Nov 16, 2022

Thanks for the PR but can you provide more details on how to reproduce this issue? I know the example app has an issue compiling but found that updating the Kotlin allows it to build and run fine.

Is the issue you're trying to fix the same as #1771? If so, did you add the following to one of the Gradle scripts in your app as it is one of the solutions using AGP 4.x

lintOptions {
   checkReleaseBuilds false
}

This should only be needed in your app and not the plugin. Trying to see if it's absolutely necessary to bump AGP as my understanding is the Flutter SDK has tooling to check if an app is using a supported version of Gradle and bumping Gradle and/or AGP would then require bumping the minimum Flutter SDK version supported by the plugin

Edit: FYI getting in a fix for Kotlin version in separately myself so I can get an update out

@Rexios80
Copy link
Contributor Author

Android Studio started shipping with Java 17 which requires higher AGP versions, which in turn require higher Kotlin versions. If you want a really easy way to reproduce the issue, download Android Studio Canary and try to build the example app with it.

I don't think this issue is related to that other one.

Many popular plugins are on Kotlin 1.7+ and AGP 7+:

@MaikuB
Copy link
Owner

MaikuB commented Nov 19, 2022

Thanks for the reply. Needed more details as the original post only contained a trace. I'm aware of how plugins have moved to AGP 7+ but I had seen some remain on 3.x. An example of this is https://github.com/firebase/flutterfire/blob/master/packages/firebase_core/firebase_core/android/build.gradle. This PR was also missing a bump in Flutter SDK requirement as someone using Flutter SDK 2.8 will run into an unsupported Android plugin version error.

I don't have a problem with having AGP bumped as I was planning to do this too but would like to see the following done in the PR prior to it being merged in

  • a bump in min Flutter SDK requirement. I believe this should be 3.0. See https://github.com/flutter/flutter/blob/3.0.0/packages/flutter_tools/lib/src/android/gradle_utils.dart#L197
  • restore usage of the flutter_native_timezone plugin. I'm aware this may cause issues for you, however removing it breaks functionality for the example app. Admittedly even after installing Android Studio Canary, I'm having trouble reproducing the build issue you're experiencing as I believe it's still pointing to JDK 11. Even so, I believe there's still time to get this rectified by the time it becomes a stable release given there are still significant plugins in the ecosystem on older Gradle versions. There are also discussions to get the flutter_native_timezone plugin forked/transferred. In fact a fork already exists so can look at having the plugin use the fork outside of this PR once it is updated to AGP 7.x

Let me know your thoughts

@Rexios80
Copy link
Contributor Author

Wait does it make sense to update the timezone package in a separate PR?

@MaikuB
Copy link
Owner

MaikuB commented Nov 22, 2022

Yep so what I meant was to leave the example app to continue to https://pub.dev/packages/flutter_native_timezone and make it point to the fork later on. Even the fork is on AGP 4.2.2

@Rexios80
Copy link
Contributor Author

Well the android build fails because of that timezone plugin, but is this good enough now?

@MaikuB
Copy link
Owner

MaikuB commented Nov 23, 2022

That's a shame, in that case could you revert the revert then so it goes back to using the fork? Better that it runs than fails

@MaikuB MaikuB merged commit 06d7906 into MaikuB:master Nov 24, 2022
mgonzalezc pushed a commit to developmentMindapps/flutter_local_notifications that referenced this pull request Apr 12, 2023
…_flutter_local_notifications

* commit '4b723e750d1371206520b10a122a444c4bba7475': (76 commits)
  [flutter_local_notifications] update docs on initialize method to describe callbacks more (MaikuB#1841)
  enable usePubspecOverrides with melos (MaikuB#1822)
  replaced placeholder.com with dummyimage.com in example app due to Cloudflare blocking requests (MaikuB#1821)
  Google Java Format
  [flutter_local_notifications] Fixes MaikuB#1486 :Adds ability to count down chronometer with chronometerCountDown (MaikuB#1778)
  Implement options to hide or crop attachments in the thumbnail on iOS (MaikuB#1785)
  bump linux plugin's Flutter version requirement to 3.0.0 and add explicit ffi dependency (MaikuB#1812)
  [flutter_local_notifications] re-add imports needed for Flutter 3.0 and add build tasks that use Flutter 3.0 (MaikuB#1811)
  updated example app to not request the ability to display critical alerts (MaikuB#1809)
  Add note about keeping `@mipmap/ic_launcher` resource (MaikuB#1804)
  Recommend WindowManager to fix Android 12L+ bugs (MaikuB#1803)
  [flutter_local_notifications] Upgraded Android Gradle Plugin to fix Android build (MaikuB#1781)
  [flutter_local_notifications] fixes parsing of callback handles for notification actions on Android (MaikuB#1798)
  [flutter_local_notifications] fix Kotlin version used in example app (MaikuB#1791)
  Updates readme for iOS Setup (MaikuB#1776)
  added missing kudos for contributions relating to flutter_local_notifications 12.0.3 release
  release flutter_local_notifications 12.0.3
  updated code snippet  in readme on requesting permissions on Android (MaikuB#1754)
  Google Java Format
  Drop registerWith in Android plugin (MaikuB#1745)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants