From b5a38ca45a3874d0acffdf6567b3198ee56076ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Wr=C3=B3tniak?= Date: Tue, 26 May 2020 00:48:22 +0200 Subject: [PATCH] Dependency updates: (#33) AGP to 4.1.0-alpha09 Auto service to 1.0-rc7 Androidx Annotations to 1.2.0-alpha01 Code cleanup --- Gemfile.lock | 4 +- build.gradle | 9 +- detekt-config.yml | 172 ++++++++++-------- .../foqa/deviceinfo/FontScaleExtensions.kt | 2 +- .../foqa/deviceinfo/FontScaleInteractor.kt | 2 +- .../foqa/deviceinfo/FontScaleModule.kt | 2 +- .../foqa/HyperionDisableProvider.kt | 13 +- gradle/wrapper/gradle-wrapper.properties | 3 +- 8 files changed, 111 insertions(+), 96 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2cb27f1..7916d5d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,7 +13,7 @@ GEM colored2 (3.1.2) cork (0.3.0) colored2 (~> 3.1) - danger (7.0.1) + danger (8.0.0) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) @@ -53,7 +53,7 @@ GEM ast ruby-ll (~> 2.1) open4 (1.3.4) - public_suffix (4.0.4) + public_suffix (4.0.5) rchardet (1.8.0) rexml (3.2.4) ruby-ll (2.1.2) diff --git a/build.gradle b/build.gradle index 1209856..c51c244 100644 --- a/build.gradle +++ b/build.gradle @@ -4,17 +4,17 @@ buildscript { compileSdk : 29, targetSdk : 29, kotlin : '1.3.72', - androidGradlePlugin: '4.1.0-alpha08', + androidGradlePlugin: '4.1.0-alpha09', versionsPlugin : '0.27.0', hyperion : '0.9.27', debugDb : '1.0.6', chucker : '3.2.0', hyperionAppInfo : '1.1.0', deviceNames : '2.0.0', - autoService : '1.0-rc6', + autoService : '1.0-rc7', shipkit : '2.3.0', - detekt : '1.4.0', - androidxAnnotations: '1.1.0' + detekt : '1.7.1', + androidxAnnotations: '1.2.0-alpha01' ] repositories { @@ -22,7 +22,6 @@ buildscript { mavenCentral() jcenter() gradlePluginPortal() - maven { url 'https://jitpack.io' } } dependencies { diff --git a/detekt-config.yml b/detekt-config.yml index 94448a1..1324aa3 100644 --- a/detekt-config.yml +++ b/detekt-config.yml @@ -9,8 +9,8 @@ build: config: validation: true - # when writing own rules with new properties, exclude the property path e.g.: "my_rule_set,.*>.*>[my_property]" - excludes: "" + # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]' + excludes: '' processors: active: true @@ -34,14 +34,17 @@ console-reports: comments: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' + AbsentOrWrongFileLicense: + active: false + licenseTemplateFile: 'license.template' CommentOverPrivateFunction: active: false CommentOverPrivateProperty: active: false EndOfSentenceFormat: active: false - endOfSentenceFormat: ([.?!][ \t\n\r\f<])|([.?!:]$) + endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' UndocumentedPublicClass: active: false searchInNestedClass: true @@ -59,9 +62,10 @@ complexity: active: true threshold: 4 ComplexInterface: - active: false + active: true threshold: 10 includeStaticDeclarations: false + includePrivateDeclarations: false ComplexMethod: active: true threshold: 15 @@ -70,8 +74,8 @@ complexity: ignoreNestingFunctions: false nestingFunctions: run,let,apply,with,also,use,forEach,isNotNull,ifNull LabeledExpression: - active: false - ignoredLabels: "" + active: true + ignoredLabels: '' LargeClass: active: true threshold: 600 @@ -80,8 +84,10 @@ complexity: threshold: 60 LongParameterList: active: true - threshold: 6 + functionThreshold: 6 + constructorThreshold: 7 ignoreDefaultParameters: false + ignoreDataClasses: true MethodOverloading: active: false threshold: 6 @@ -90,14 +96,14 @@ complexity: threshold: 4 StringLiteralDuplication: active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' threshold: 3 ignoreAnnotation: true excludeStringsWithLessThan5Characters: true ignoreStringsRegex: '$^' TooManyFunctions: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' thresholdInFiles: 11 thresholdInClasses: 11 thresholdInInterfaces: 11 @@ -118,7 +124,7 @@ empty-blocks: active: true EmptyCatchBlock: active: true - allowedExceptionNameRegex: "^(_|(ignore|expected).*)" + allowedExceptionNameRegex: '^(_|(ignore|expected).*)' EmptyClassBlock: active: true EmptyDefaultConstructor: @@ -142,6 +148,8 @@ empty-blocks: active: true EmptySecondaryConstructor: active: true + EmptyTryBlock: + active: true EmptyWhenBlock: active: true EmptyWhileBlock: @@ -154,7 +162,7 @@ exceptions: methodNames: 'toString,hashCode,equals,finalize' InstanceOfCheckForException: active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' NotImplementedDeclaration: active: false PrintStackTrace: @@ -167,7 +175,7 @@ exceptions: SwallowedException: active: false ignoredExceptionTypes: 'InterruptedException,NumberFormatException,ParseException,MalformedURLException' - allowedExceptionNameRegex: "^(_|(ignore|expected).*)" + allowedExceptionNameRegex: '^(_|(ignore|expected).*)' ThrowingExceptionFromFinally: active: false ThrowingExceptionInMain: @@ -179,7 +187,7 @@ exceptions: active: false TooGenericExceptionCaught: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' exceptionNames: - ArrayIndexOutOfBoundsException - Error @@ -189,7 +197,7 @@ exceptions: - IndexOutOfBoundsException - RuntimeException - Throwable - allowedExceptionNameRegex: "^(_|(ignore|expected).*)" + allowedExceptionNameRegex: '^(_|(ignore|expected).*)' TooGenericExceptionThrown: active: true exceptionNames: @@ -212,13 +220,14 @@ formatting: active: true autoCorrect: true EnumEntryNameCase: - active: true + active: false autoCorrect: true Filename: active: true FinalNewline: active: true autoCorrect: true + insertFinalNewLine: true ImportOrdering: active: false autoCorrect: true @@ -310,78 +319,79 @@ naming: active: true ClassNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' classPattern: '[A-Z$][a-zA-Z0-9$]*' ConstructorParameterNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' parameterPattern: '[a-z][A-Za-z0-9]*' privateParameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' ignoreOverridden: true EnumNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*' ForbiddenClassName: - active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + active: true + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' forbiddenName: '' FunctionMaxLength: - active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + active: true + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' maximumFunctionNameLength: 30 FunctionMinLength: active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' minimumFunctionNameLength: 3 FunctionNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' functionPattern: '^([a-z$][a-zA-Z$0-9]*)|(`.*`)$' excludeClassPattern: '$^' ignoreOverridden: true FunctionParameterNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' parameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' ignoreOverridden: true InvalidPackageDeclaration: - active: false + active: true rootPackage: '' MatchingDeclarationName: active: true + mustBeFirst: true MemberNameEqualsClassName: active: true ignoreOverridden: true ObjectPropertyNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' constantPattern: '[A-Za-z][_A-Za-z0-9]*' propertyPattern: '[A-Za-z][_A-Za-z0-9]*' privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' PackageNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' packagePattern: '^[a-z]+(\.[a-z][A-Za-z0-9]*)*$' TopLevelPropertyNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' constantPattern: '[A-Z][_A-Z0-9]*' propertyPattern: '[A-Za-z][_A-Za-z0-9]*' privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' VariableMaxLength: - active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + active: true + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' maximumVariableNameLength: 64 VariableMinLength: active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' minimumVariableNameLength: 1 VariableNaming: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' variablePattern: '[a-z][A-Za-z0-9]*' privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' @@ -393,17 +403,17 @@ performance: active: true ForEachOnRange: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' SpreadOperator: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' UnnecessaryTemporaryInstantiation: active: true potential-bugs: active: true Deprecation: - active: false + active: true DuplicateCaseInWhenExpression: active: true EqualsAlwaysReturnsTrueOrFalse: @@ -413,7 +423,7 @@ potential-bugs: ExplicitGarbageCollectionCall: active: true HasPlatformType: - active: false + active: true ImplicitDefaultLocale: active: true InvalidRange: @@ -424,9 +434,9 @@ potential-bugs: active: true LateinitUsage: active: false - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" - excludeAnnotatedProperties: "" - ignoreOnClassesPattern: "" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' + excludeAnnotatedProperties: '' + ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: true MissingWhenCase: @@ -434,15 +444,15 @@ potential-bugs: RedundantElseInWhen: active: true UnconditionalJumpStatementInLoop: - active: false + active: true UnreachableCode: active: true UnsafeCallOnNullableType: active: true UnsafeCast: - active: false + active: true UselessPostfixExpression: - active: false + active: true WrongEqualsTypeParameter: active: true @@ -454,15 +464,17 @@ style: active: false conversionFunctionPrefix: 'to' DataClassShouldBeImmutable: - active: false + active: true EqualsNullCall: active: true EqualsOnSignatureLine: - active: false + active: true + ExplicitCollectionElementAccessMethod: + active: true ExplicitItLambdaParameter: - active: false + active: true ExpressionBodySyntax: - active: false + active: true includeLineWrapping: false ForbiddenComment: active: true @@ -473,20 +485,20 @@ style: imports: '' forbiddenPatterns: "" ForbiddenMethodCall: - active: false + active: true methods: '' ForbiddenPublicDataClass: active: true ignorePackages: '*.internal,*.internal.*' ForbiddenVoid: - active: false + active: true ignoreOverridden: false ignoreUsageInGenerics: false FunctionOnlyReturningConstant: active: true ignoreOverridableFunction: true excludedFunctions: 'describeContents' - excludeAnnotatedFunction: "dagger.Provides" + excludeAnnotatedFunction: 'dagger.Provides' LibraryCodeMustSpecifyReturnType: active: true LoopWithTooManyJumpStatements: @@ -494,7 +506,7 @@ style: maxJumpCount: 1 MagicNumber: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' ignoreNumbers: '-1,0,1,2' ignoreHashCodeFunction: true ignorePropertyDeclaration: false @@ -518,87 +530,87 @@ style: ModifierOrder: active: true NestedClassesVisibility: - active: false + active: true NewLineAtEndOfFile: active: true NoTabs: - active: false + active: true OptionalAbstractKeyword: active: true OptionalUnit: - active: false + active: true OptionalWhenBraces: - active: false + active: true PreferToOverPairSyntax: - active: false + active: true ProtectedMemberInFinalClass: active: true RedundantExplicitType: - active: false + active: true RedundantVisibilityModifierRule: - active: false + active: true ReturnCount: active: true max: 2 - excludedFunctions: "equals" + excludedFunctions: 'equals' excludeLabeled: false excludeReturnFromLambda: true excludeGuardClauses: false SafeCast: active: true SerialVersionUIDInSerializableClass: - active: false + active: true SpacingBetweenPackageAndImports: - active: false + active: true ThrowsCount: active: true max: 2 TrailingWhitespace: - active: false + active: true UnderscoresInNumericLiterals: - active: false + active: true acceptableDecimalLength: 5 UnnecessaryAbstractClass: active: true - excludeAnnotatedClasses: "dagger.Module" + excludeAnnotatedClasses: 'dagger.Module' UnnecessaryAnnotationUseSiteTarget: active: true UnnecessaryApply: - active: false + active: true UnnecessaryInheritance: active: true UnnecessaryLet: - active: false + active: true UnnecessaryParentheses: - active: false + active: true UntilInsteadOfRangeTo: - active: false + active: true UnusedImports: - active: false + active: true UnusedPrivateClass: active: true UnusedPrivateMember: - active: false - allowedNames: "(_|ignored|expected|serialVersionUID)" + active: true + allowedNames: '(_|ignored|expected|serialVersionUID)' UseArrayLiteralsInAnnotations: - active: false + active: true UseCheckOrError: - active: false + active: true UseDataClass: - active: false - excludeAnnotatedClasses: "" + active: true + excludeAnnotatedClasses: '' allowVars: false UseIfInsteadOfWhen: - active: false + active: true UseRequire: - active: false + active: true UselessCallOnNotNull: active: true UtilityClassWithPublicConstructor: active: true VarCouldBeVal: - active: false + active: true WildcardImport: active: true - excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt" + excludes: '**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt' excludeImports: 'java.util.*,kotlinx.android.synthetic.*' diff --git a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleExtensions.kt b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleExtensions.kt index 2c7d297..3764f6d 100644 --- a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleExtensions.kt +++ b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleExtensions.kt @@ -6,4 +6,4 @@ private const val FONT_SCALE_MAX = 1.6f private const val SEEK_BAR_SCALE = SEEK_BAR_MAX / (FONT_SCALE_MAX - FONT_SCALE_MIN) internal fun Float.toSeekBarValue() = ((this - FONT_SCALE_MIN) * SEEK_BAR_SCALE).toInt() -internal fun Int.toFontScale() = (this / SEEK_BAR_SCALE) + FONT_SCALE_MIN +internal fun Int.toFontScale() = this / SEEK_BAR_SCALE + FONT_SCALE_MIN diff --git a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleInteractor.kt b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleInteractor.kt index b1405d7..aa354ce 100644 --- a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleInteractor.kt +++ b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleInteractor.kt @@ -21,7 +21,7 @@ internal class FontScaleInteractor(private val context: Context) { val isSystemSettingsWritable get() = Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.System.canWrite(context) - fun ensureSystemSettingsWritability() { + fun ensureSystemSettingsWritable() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.System.canWrite(context)) { startSystemSettingsActivity() } diff --git a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleModule.kt b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleModule.kt index d19cacd..4641089 100644 --- a/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleModule.kt +++ b/font_scale_plugin/src/main/java/pl/droidsonroids/foqa/deviceinfo/FontScaleModule.kt @@ -37,7 +37,7 @@ internal class FontScaleModule : PluginModule() { } override fun onStartTrackingTouch(seekBar: SeekBar) { - fontScaleInteractor.ensureSystemSettingsWritability() + fontScaleInteractor.ensureSystemSettingsWritable() } override fun onStopTrackingTouch(seekBar: SeekBar) { diff --git a/foqa/src/main/java/pl/droidsonroids/foqa/HyperionDisableProvider.kt b/foqa/src/main/java/pl/droidsonroids/foqa/HyperionDisableProvider.kt index a1a6497..1c522a5 100644 --- a/foqa/src/main/java/pl/droidsonroids/foqa/HyperionDisableProvider.kt +++ b/foqa/src/main/java/pl/droidsonroids/foqa/HyperionDisableProvider.kt @@ -11,7 +11,7 @@ import android.net.Uri import android.provider.Settings import com.willowtreeapps.hyperion.core.internal.HyperionInitProvider -class HyperionDisableProvider : ContentProvider() { +internal class HyperionDisableProvider : ContentProvider() { override fun onCreate() = true @@ -22,13 +22,16 @@ class HyperionDisableProvider : ContentProvider() { } } - private fun isRunningOnFirebaseTestLab(context: Context): Boolean { - return Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true" - } + private fun isRunningOnFirebaseTestLab(context: Context) = + Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true" private fun disableHyperion(context: Context) { val hyperionInitProvider = ComponentName(context, HyperionInitProvider::class.java) - context.packageManager.setComponentEnabledSetting(hyperionInitProvider, COMPONENT_ENABLED_STATE_DISABLED, DONT_KILL_APP) + context.packageManager.setComponentEnabledSetting( + hyperionInitProvider, + COMPONENT_ENABLED_STATE_DISABLED, + DONT_KILL_APP + ) } override fun insert(uri: Uri, values: ContentValues?): Nothing? = null diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4b4429..d815c7f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon May 25 23:26:02 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip