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

Can't count methods in AAR (Java 8) #222

Closed
DeKaN opened this issue Oct 4, 2017 · 19 comments
Closed

Can't count methods in AAR (Java 8) #222

DeKaN opened this issue Oct 4, 2017 · 19 comments
Labels

Comments

@DeKaN
Copy link

DeKaN commented Oct 4, 2017

Build process was changed from gradle android plugin 2.4.0. If you use some features from Java 8 and minSdk < 26, then it run "desugar" before transforming classes to dex (https://developer.android.com/studio/write/java8-support.html).

Gradle: 4.1
Gradle Android plugin: 3.0.0-beta7

library build.gradle:

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Stacktrace:

Dexcount name:    dexcount-gradle-plugin
Dexcount version: 0.8.1
Dexcount input:   /home/dmitry/IdeaProjects/TestLibrary/library/build/outputs/aar/library-release.aar
Error counting dex methods. Please contact the developer at https://github.com/KeepSafe/dexcount-gradle-plugin/issues
com.getkeepsafe.dexcount.DexCountException: dx exited with exit code 1
stderr=Uncaught translation error: com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)
1 error; aborting

        at com.getkeepsafe.dexcount.DexFile$Companion.extractDexFromAar(DexFile.kt:167)
        at com.getkeepsafe.dexcount.DexFile$Companion.extractDexData(DexFile.kt:101)
        at com.getkeepsafe.dexcount.DexMethodCountTaskBase.generatePackageTree(Tasks.kt:165)
        at com.getkeepsafe.dexcount.DexMethodCountTaskBase.countMethods(Tasks.kt:127)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:731)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:745)
@benjamin-bader
Copy link
Collaborator

Thanks for the report - guess we'll need to add desugar to the AAR counting process.

@spleenjack
Copy link

I reported an issue for gradle-plugin that intersecting with this probably:
https://issuetracker.google.com/issues/67452341

@DeKaN
Copy link
Author

DeKaN commented Oct 9, 2017

@benjamin-bader
Copy link
Collaborator

Actual builds have a pretty involved mechanism to invoke Desugar. If we decide that it's even feasible, we need to take care to use the same input parameters to the desugar process as actual builds, otherwise the counts will be meaningless.

Another avenue we might take is to coax the build tools into creating a desugar task for the AAR, and count its output. I don't understand the tools well enough to say if that's a reasonable approach.

If anyone has a good notion of how to proceed, I'd really welcome help here.

@DeKaN
Copy link
Author

DeKaN commented Dec 21, 2017

Some new info:
We may use prebuilt desugar_deploy.jar from dotnet/android#991 and run command as java -jar desugar_deploy.jar --bootclasspath_entry path/to/android.jar --classpath_entry first_library.jar --classpath_entry second_library.jar --input classes.jar --output classes-desugared.jar --min_sdk_version APP_MIN_SDK

Important notes: we should list all dependencies in classpath_entry (it should be desugared), APP_MIN_SDK - minSdkVersion from application build.gradle

@atsushieno
Copy link

You don't have to check out xamarin-android for that binary. desugar_deploy.jar is part of Android Studio binary distribution, in (android-studio)/gradle/m2repository/com/android/tools/build/builder/3.0.0/builder-3.0.0.jar (yes, jar in the jar).

@benjamin-bader
Copy link
Collaborator

Thanks, folks, for the info! You're correct, we could use desugar_deploy.jar. I didn't consider doing so for a few reasons:

  • not everybody will be using Android Studio, so we can't rely on the jar being present; we'd have to bundle it ourselves.
  • desugar changes with minor Android Studio releases, so we'd layer on yet another moving target for compatibility, which I'd prefer to avoid.
  • It's not guaranteed that our inputs to desugar_deploy.jar would match up with those used by the Android Gradle Plugin, so it would be difficult to trust the resulting method counts.

I'd accept a PR using desugar_deploy.jar as an interim solution, but I believe it will be better for us to find a way to use Android Gradle Plugin here.

@jaredsburrows
Copy link
Collaborator

Something to look into, @JakeWharton just updated his repo for dex method counting: https://github.com/JakeWharton/dex-method-list. I wonder if it supports de-surgaring.

@benjamin-bader
Copy link
Collaborator

Interesting, I don't remember seeing that project before! I can't tell without running the code myself (which I haven't done), but it seems as if it wouldn't work with Java 8 code - it's invoking dx processing directly, with no hint of (de)sugar. It's worth verifying, for sure!

@markhu
Copy link

markhu commented Mar 28, 2018

Does this relate to the question of whether dexcount-gradle-plugin can work on Java modules alone? (In other words not a full APK.)

@benjamin-bader
Copy link
Collaborator

benjamin-bader commented Mar 28, 2018

Not really; it's more that dx doesn't understand some Java 8 bytecodes, and Desugar is needed to translate such classes into a Java 6-compatible form. The issue you refer to is different in that dexcount-gradle-plugin just doesn't count jars at all, as we haven't implemented it. There's some similarity though - any jar using Java 8 would probably hit this problem, too.

This issue is still open because Android Build Tools have become incredibly complex since the 3.0 release, and I haven't had the time or inclination to untangle exactly how to incorporate desugar. I'd still be happy to take a PR here 👼

Also, build-tools 3.1 just dropped, and d8 is now the default .class->.dex compiler. In 3.2, d8 does desugaring, too. At this rate, it's entirely likely that we'll just wait for 3.2 to release (6 months, maybe?), and just deprecate dx support entirely.

@jaredsburrows
Copy link
Collaborator

jaredsburrows commented Jan 29, 2019

I am not able to reproduce this with this test project: https://github.com/jaredsburrows/android-gradle-java-library-template

Using the following:

  • Java 8
  • Target API 28
  • Using dexcount-gradle-plugin version 0.20.0
  • Using com.android.tools.build:gradle version 3.3.0
$ gradlew assembleDebug
Configuration on demand is an incubating feature.

> Configure project :
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
WARNING: Configuration 'testCompile' is obsolete and has been replaced with 'testImplementation'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

> Task :countDebugDexMethods
Total methods in android-gradle-java-library-template-1.0.aar: 59 (0.09% used)
Total fields in android-gradle-java-library-template-1.0.aar:  8 (0.01% used)
Total classes in android-gradle-java-library-template-1.0.aar:  14 (0.02% used)
Methods remaining in android-gradle-java-library-template-1.0.aar: 65476
Fields remaining in android-gradle-java-library-template-1.0.aar:  65527
Classes remaining in android-gradle-java-library-template-1.0.aar:  65521

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 2s
22 actionable tasks: 22 executed

Please let me know if you are able to reproduce this.

@DeKaN
Copy link
Author

DeKaN commented Jan 29, 2019

com.getkeepsafe.dexcount.DexCountException: dx exited with exit code 1
stderr=Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in burrows.apps.example.template.util.PlayServicesUtils.hasGooglePlayServices:(Landroid/app/Activity;Lcom/google/android/gms/common/GoogleApiAvailability;)Z: invalid opcode ba - invokedynamic requires --min-sdk-version >= 26 (currently 13)
1 error; aborting

        at com.getkeepsafe.dexcount.DexFile$Companion.extractDexFromAar(DexFile.kt:167)
        at com.getkeepsafe.dexcount.DexFile$Companion.extractDexData(DexFile.kt:101)
        at com.getkeepsafe.dexcount.DexMethodCountTaskBase.generatePackageTree(Tasks.kt:172)
        at com.getkeepsafe.dexcount.DexMethodCountTaskBase.countMethods(Tasks.kt:134)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:704)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:671)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:284)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:273)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:258)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:67)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:145)
        at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:49)
        at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
        at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
        at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
        at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:33)
        at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
        at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:43)
        at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:29)
        at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:134)
        at org.gradle.internal.execution.impl.steps.CacheStep.lambda$execute$3(CacheStep.java:83)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:82)
        at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:36)
        at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
        at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
        at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
        at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
        at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
        at java.util.Optional.map(Optional.java:215)
        at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
        at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:79)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
        at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:745)

You should use java 8 features for enabling desugar

@jaredsburrows jaredsburrows reopened this Jan 30, 2019
@jaredsburrows
Copy link
Collaborator

Thanks for clarifying!

@jaredsburrows
Copy link
Collaborator

Odd. You notice that @DeKaN's PR passed here: jaredsburrows/android-gradle-java-library-template#1.

@mannodermaus
Copy link

We experience the same problem. Doesn't seem like countDexMethods tasks will fail the build when an error happens while counting dex methods, which is why that linked PR still passed.

@benjamin-bader
Copy link
Collaborator

I've honestly never been a fan of this feature, and (barring some generous soul coming up with a PR) it looks to continue rotting at a steady pace as the Android Gradle tools assume more responsibility for compiler details.

I've complained enough about the AGP; suffice it to say, I don't expect to have time to fix this. If someone would like to contribute a fix that isn't bundling deploy_desugar.jar, I'd be overwhelmingly grateful. If not, I expect that I'll end up deprecating AAR counts because (IMO) it's not worth the effort to maintain this inherently-inaccurate feature.

@benjamin-bader
Copy link
Collaborator

Looks like the ever-industrious Jake Wharton has implemented desugaring support in https://github.com/JakeWharton/dex-method-list, by repackaging the D8 sources (or a portion thereof) and publishing them to Maven, somewhere.

It's now officially simple to incorporate some kind of desugaring, should anyone care to take the effort. We'd end up with counts that differed from "reality", but that's status quo so not a huge deal.

@benjamin-bader
Copy link
Collaborator

There's never going to be an accurate way to do this, I'm not interested in implemented it, and in three years nobody else has expressed an interest in doing the work, so I'll close this issue out.

anuchandy added a commit to anuchandy/azure-sdk-for-android-1 that referenced this issue Feb 22, 2021
anuchandy added a commit to Azure/azure-sdk-for-android that referenced this issue Feb 22, 2021
…o ApiLevel-15 (#594)

* Removing the azure-core-http module's dependency on azure-core-test module (avoiding cyclic dependency).

* Removing the azure-core-rest module's dependency on azure-core-test module (avoiding cyclic dependency).

* Updating azure-core-logging and azure-core module's build.gradle be to explict about minSdkVersion:15.

* azure-core-credentials minApi-15: baselining azure-core-credentails to Api Level 15.

* azure-core-http minApi-15: baselining azure-core-http to Api Level 15.

* build.gradle minor readability improvement for azure-core-test

* The dexsafe is not compactible with android tool-chain java8 'syntax desugaring', disabling it KeepSafe/dexcount-gradle-plugin#222
anuchandy added a commit to anuchandy/azure-sdk-for-android-1 that referenced this issue Mar 26, 2021
…o ApiLevel-15 (Azure#594)

* Removing the azure-core-http module's dependency on azure-core-test module (avoiding cyclic dependency).

* Removing the azure-core-rest module's dependency on azure-core-test module (avoiding cyclic dependency).

* Updating azure-core-logging and azure-core module's build.gradle be to explict about minSdkVersion:15.

* azure-core-credentials minApi-15: baselining azure-core-credentails to Api Level 15.

* azure-core-http minApi-15: baselining azure-core-http to Api Level 15.

* build.gradle minor readability improvement for azure-core-test

* The dexsafe is not compactible with android tool-chain java8 'syntax desugaring', disabling it KeepSafe/dexcount-gradle-plugin#222
weshaggard added a commit to Azure/azure-sdk-for-android that referenced this issue Mar 30, 2021
* init modularized core and search-module based on core

* making all existing tests across modules working

* Adding .run configuraion (included Android JUnit test config for all modules)

* setting up checkstyle plugin (no useful rules yet)

* Adding javadooc to [RestProxy|HttpClient]TestWireMockServer, InterceptorManager

* enable fully functional checkstyle, run it - 'gradle checkstyle'

* enable fully functional spotbug, run it - 'gradle check'

* Updating DefaultLogger to use android.util.Log

* Adding mock android.util.Log to http test module and adding policy tests

* Adding SerdeXmlProperty, SerdeXmlRootElement for xml support and extending from xml introspector

* Adding more http tests and setting UrlToken and UrlTokenizer back to pkg-private

* Adding rest tests and setting PercentEscaper and HttpResponseBodyDecoder back to pkg-private

* Updating additionalProperties serder to look for Serde annotations, Fixing missing return stmt in introceptor

* Adding tests for jackson-serder

* Addressing few TODOs and adding tests for azure-core

* Cleaning up the build.gradle::dependencies section

* moving version string to common place, removed unnecessary dependencies

* Initial impl of  callback based Http client abstractions

* introducing android namespace to azure-core-test module

* Initial OkHttp client impl for Http abstractions

* Initial HttpUrlConnectiion client impl for Http abstractions

* introducing android namespace to azure-core-credential module

* settings.gradle update: adding httlurlconnection module

* code quality supressions for new http abstractions, okhttp and urlconnection impls

* javadoc update for chain.proceed rename to chain.processNextPolicy and .completed to .finishedProcessing, bringing back assertions

* BufferedHttpResponse: proper caching of response content

* Updating test NoOpHttpClient to use MockHttpResponse

* HttpPipelinePolicyChainImpl: Adding a missing log

* Enabling callback based HttpLoggingPolicy and tests

* Adding CancellationToken type that allows sending a request to cancel an operation and registering hooks to run on cancel (and introducing android namespace to azure-core-micro module)

* Representing the root and nested dispatchable call as classes

* Enabling CancellationToken in HttpRequest and honoring it in Dispatcher and RetryPolicy

* Wiring the request cancellation in OkHttp

* Stabilizing httpUrlCon HttpClient and wiring cancellation token

* Adding Option type to represent tri-state

* Adding Context type (mainly will be used to manage state across pipeline policies)

* Enabling Context in HttpRequest

* Enabling tag-store for HttpRequest

* Enabling immutable Context for pipeline-run

* Moving CancellationToken to chain;attempting to make it clear that token is not just associated with the HTTP-request flowing through the pipeline-run but is applicable for any other SDK APIs that policy invokes.

* Moving Context to chain and removing processNextPolicy() overload with Context: We have two well-defined use cases for Context. The first use-case of Context is for passing any pipeline settings via pipeline.send(), which can be inspected by targetted policies. The second use-case
is to use it as the context arg for the Azure SDK API calls that any policy makes. We will not use Context for passing data between policies (use HttpRequest.tag for that). The Context is immutable. Its purpose is to pass key-values down the call-stack, not in the backward direction. Attempt to hack for unintended forward-backward support means
making chain mutable, i.e., context ref in the chain became mutable, thus making immutability of Context pointless.

* Introducing NextPolicyCallback, to make need for signaling policy completion explicit

* Update README.md

* Replacing NotifyCompletion with PolicyCompleter, and defining return type for response interception methods, return-type enforces response interception methods impl to notify the completer.

* Adding Http exception package in common http mdule.

* Adding paging package with ContinuablePage (the base page type) to core module

* Introducing android subpackage in rest module and adding proxy annootations

* init rest and rest.impl package directories.

* Adding escapers to escape data in form data and path/query in url.

* Adding type util for reflective operations.

* Adding rest Response types

* Exporting ArrayMap|Log|Pair type in android utils to test android.utils (required when unit tests (i.e. non-instrumentation tests) to run)

* Adding the Callback type parameter used by proxy methods (though this callback receives the response, in the convenience layer it is wrapped and exposed via retrofuture CompletableFuture)

* Adding the mapper to map proxy method arguments (the one user provided to) to HttpRequest instance

* Adding the mapper to map HttpResponse (from wire) to a Response instance in the rest module.

* Adding SwaggerMethodParser to compose HttpRequestMapper and HttpResponseMapper. Both mappers needs to be cached, the composed type SwaggerMethodParser simplifies the caching story.

* Adding SwaggerInterfaceParser to parse rest interface and to cache the SwaggerMethodParser for each methods in the rest interface.

* Adding RestProxy, the implementation of InvocationHandler to process rest interface

* RestProxy: user error from rest callback onSuccess should not be reported to onError (as they are mutally exclusive).

* Setting up the test artifacts to enable validation of RestProxy from each HttpClient impls and adding validation based on mock http client

* Empty string is a valid HTTP request body, doon't filter it out.

* if no HTTP body present, represent it as byte[0] for OkHttp (in consistent with behavior of using ByteString.EMPTY).

* Adding TestsWireMockServer to respond to HTTP client request coming through Rest Proxy.

* Validating RestProxy when OkHttp client is used.

* DELETE request can be accompanied with a body, hence enable it for http URL connection client.

* alidating RestProxy when HttpUrlConnection client is used.

* Enabling CancellationToken for service interface methods

* improve code redability

* improve code readability

* Introducing android namespace to azure-core-logging module and adjusting references from other modules

* JavaDoc cleanup, minor readability improvment

* Correcting TypeUtilTests to refer the TypeUtil in android sub-package

* Improved logic to resolve the content and header type and enabling the streaming tests which was blocked due to bug in type resolution

* cleaning up azure-core-serde-jackson module

* Simplify the control flow around response instantiations

* Introducing android namespace to azure-core-serde module

* Introducing android namespace to azure-core-serde-jackson module

* adjusting serde references in azure-core-rest module to use serde types in azure-core-serde android package

* adjusting serde references in azure-core-test module to use serde types in azure-core-serde android package

* Rename the module azure-core-micro to azure-core (the micro package is yet to be removed)

* Removing micro subpackage from azure-core and move it's subpackages to core package, adjusting references from other modules.

* Getting Base64Url|Base64Util|DateTimeRfc1123|UnixTime|Header to azure-core android package, updating references to them from android packages in other modules. Some minor javadoc fixes as well.

* Getting exception subpackage to azure-core android package, updating references from azure-core-http

* Removing Util type from azure-core-http impl package

* Getting AzureKeyCredential to azure-core-credentials android subpackage, adjusting reference to it and some cleanup

* Updating BuildTool version to 30.0.3 (Tools->SDKManager->Appearance&Behavior->SystemSettings->AndroidSDK->SDKTools). This tool version can understand Java Class version 53 (java9), that the non-instrumentation jupiter unit test uses

* Getting record-playback for android (that uses azure-core Android HttpPipeline|HttpClient)

* Adding BOM header tests to azure-core-test and enabling same tests for OkHttp and HttpUrlConnection HttpClient impls

* Adding missing 'core' sub-package-name to httpurlconnection test package.

* Remove unused throws from unit tests.

* Polishing UserAgent policy and adding unit tests.

* Adding unit tests for HttpHeader|UrlBuilder|UrlTokenizer in azure-core-http.

* Adding XML based RestProxy unit tests and HttpHeaders unit tests.

* Adding unit tests for types in azure-core-test.

* Removing no more used modules and sub packages (#565)

* removing async serialize|deserialize methods from customserde

* Removing search module used to validate the core modules splitting

* Removing all core subpackage rooted at com.azure, now that we've core subpackage under com.azure.android

* now that core subpackage removed from com.azure (in favor of com.azure.android.core), remove related supressions from checkstyle and spotbugs

* adding design doc table

* Adding reference to HttpPipeline Chain Design

* adding RestProxy API and dependency graph doc

* removing unused dependencies (#568)

* updating logging module to use min level as 14 (#570)

* updaing serde contract module to use min api as 14 (#572)

* Removing java.time, replace it with 310bp. (#591)

* Adding readme table to list any presentations

* Fixing rendering of readme-table for presentations.

* Making azure-core module baselined to ApiLevel-15 (#593)

* Removing Base64 unit-tests, these unit-tests will be converted to instrumentation-tests.

* azure-core minApi-15: Using base64 types from android.util.Base64 instead of java.util.Base64; java.util.Base64 is available only from L26.

* azure-core minApi-15: adding instrumentation-tests for Base64Util and Base64Url, given android.util.Base64 in unit-test execution scope.

* azure-core minApi-15: replacing Objects.requireNonNull, Objects.hashCode, Objects.equals and RuntimeException Ctr with stacktrace param to enable azure-core to work on api-level 15

* In azure-core-rest 'test-scope', adding Base64 type to get the test using base64 to work on non-android host.

* Making azure-core-http and  azure-core-credentials modules baselined to ApiLevel-15 (#594)

* Removing the azure-core-http module's dependency on azure-core-test module (avoiding cyclic dependency).

* Removing the azure-core-rest module's dependency on azure-core-test module (avoiding cyclic dependency).

* Updating azure-core-logging and azure-core module's build.gradle be to explict about minSdkVersion:15.

* azure-core-credentials minApi-15: baselining azure-core-credentails to Api Level 15.

* azure-core-http minApi-15: baselining azure-core-http to Api Level 15.

* build.gradle minor readability improvement for azure-core-test

* The dexsafe is not compactible with android tool-chain java8 'syntax desugaring', disabling it KeepSafe/dexcount-gradle-plugin#222

* Making azure-core-http-httpurlconnection baselined to apiLevel-15 and azure-core-http-okhttp to apiLevel-21 (#595)

* Updating azure-core-serde module's build.gradle be to explict about minSdkVersion:15

* azure-core--http-[httpclient]* minApi: baselining azure-core-http-httpurlconnection to Api Level 15 and azure-core-http-okhttp to api Level 21 (21 is enforced by okhttp).

* Making azure-core-serde-jackson, azure-core-custom-serde-json-jackson and azure-core-custom-serde baselined to apiLevel-15 (#596)

* Making azure-core-rest module baselined to apiLevel-15 (#598)

* azure-core-rest minApi-15: baselining azure-core-rest to Api Level 15.

* Given rest and serde-jackson modules are L15 now, removing the temporary overrideLibrary for them from HttpClient impls

* Adding modules diagram to readme

* Configuring the minSdkVersion in the project level build.gradle (#599)

* Calling out minSdkVersion ini readme.

* Removing azure-core-serde contract (#600)

* [Remove serde cntract]: Replacing serde types with jackson types.

* [Remove serde cntract]: Deleting azure-core-serde moodule with serde contracts.

* [Remove serde cntract]: Renaming the module azure-core-serde-jackson to azure-core-jackson

* Updating readme to reflect the removal of azure-core-serde

* Updating readme to have module diagram on the top.

* Code cleanup in azure-core-jackson module (#601)

* Code cleanup in azure-core-jackson

* code cleanup; rename variables/params with name serdeAdapter to jacksonSerder

* Enable SPI for Http modules (#602)

* custom serde has no usecase in android yet, hence removing the module. (#603)

* Copying azure-communication-common from the commit: 845592d

* adding ExpaandableEnum to azure-core utils

* baselining azure-communication-common to L15

* Getting CI ready for v2-sdk branch (#613)

* Deleting unused files and dir from eng dir

* Copying eng content from master commit: 101fcb3

* Adding ci.yml for core modules

* Applying junit5 plugin to enable running tests from terminal

* Updating build.gradle to produce jacco report

* Updating gradle to v6.4.1

* Excluding jdk internal classes from jacoco

* jacoco: attempting to exclude jdk internal class by path

* Fixing NPE in jacoco config

* Attempting to use java8 image

* Using ubuntu 18

* Adding test package for credential and logging module

* azure-communication-common: Addressing checkstyle and spotbug warnings

* azure-communication-common: Getting tests working on JUnit5

* azure-core: Addressing checkstyle in ExpandableStringEnum

* Copying azure-communication-chat from azure-sdk-for-java:master baseline commit: Azure/azure-sdk-for-java@a317d24

* azure-communication-chat: adding buiild.gradle and importing to settings.gradle

* azure-communication-chat: src:moving communication subpackage to android subpackage

* azure-communication-chat: test:moving communication subpackage to android subpackage

* azure-communication-chat: update sample to use android subpackage, updating references in swagger/README and pom.xml

* azure-communication-chat: Setting APILevel29 and getting module compiled

* azure-communication-chat: move all convenience code to a package handwritten, this is to ease the migration of autogen code to new android module system

* azure-communication-chat: excluding 'handwriitten' package from build and checkstyle to ease migration of autogenerated code to new android module system.

* azure-communication-chat: step_1: onboarding to new module system, as first step using callback for async

* azure-communication-chat: step_2: onboarding to new module system, transform callback to CompletableFuture

* azure-communication-chat: Set min API to 15 and removing commented code

* azure-communication-chat: Refactoring inline Callback instantiation to static inner class. Getting clean build ready.

* azure-core-http-*: Correcting META-INF HttpClientProvider file names to have android namespace.

* azure-communication-chat: using 310bp time types in model and client types

* azure-communication-chat: adding dependency to android azure-communication-common

* eng: whitelist 310bp as a allowed dependency

* azure-core-test: Defaulting to OkHttp for test.

* azure-communication-chat: Adding ChatClient Pprotocol-Layer tests. The native HttpUrlConnection is sending extra headers that service rejected, hence using L21-OkHttp.

* azure-communication-chat: Adding recordings for ChatClient Protocol-Layer tests

* eng: add the rule to check service method producing single result uses CompletableFuture as the return-type.

* azure-communication-chat: Getting the first version of Convenience-Layer on the top of Protocol-Layer

* eng: update the rule to allow service-methd with single annoation to return PagedResponse and Completable<PagedResponse>.

* azure-communication-chat: the second pass on Convenience-Layer on the top of Protocol-Layer - Added First|Next Page APIs, improved Java Doc

* eng: adding the rule to ensure service-method 'WithResponse' has Context parameter

* azure-communication-chat: the third pass on Convenience-Layer on the top of Protocol-Layer - Added Context param for WithResponse service methods

* azure-communication-chat: Renaming protocol-layer test-class to have Impl suffix.

* azure-communication-chat: Re-recording with new test class name and deleting old recordings files

* azure-cmmunication-chat: Removing the temporary supression NoImplInPublicAPI that was added for development.

* Enable CI build for communication modules. Adding credential policy, tests and recordings for AsyncChatClient (#652)

* azure-communication-chat: Correcting prefix for method to get next page of threads, adding a setter in builder to take credential policy

* azure-communication-chat: adding test for AsyncChatClient convenience-Layer

* azure-communication-chat: adding test-recordings for AsyncChatClient convenience-Layer

* azure-communication: adding ci.yml for communication modules

* Adding JasonValue to type derived from ExpandableEnum, adding tests for async ChatThreadClient & Identifer-converter (#655)

* azure-communication-chat: Adding 'JsonValue' annotated 'toString()' method to ChatMessageType; required for serializing the values of this type.

* azure-communication-chat: adding tests for async ChatThreadClient.

* azure-communication-chat: adding test-recordings for async ChatThreadClient.

* azure-communication-chat: adding tests for identifier conversions.

* Removing the temporary "handwritten" package given convenience-layer and tests are integrated  (#656)

* azure-communication-chat: deleting the temporary 'handwritten' package used for dev wip.

* azure-communication-chat: removing the temporary supressions added for 'handwritten', removing commented dependencies from chat build.gradle

* Updating protocol layer to preview-5 (api-version 2021-03-01-preview5) (#659)

* azure-communication-chat: updating protocol-layer to use api-version preview_5 swagger.

* azure-communication-chat: re-recording tests based on api-version preview-5

* azure-android: Bintray and JCenter are shutting down; removing these repositories

* azure-android: Bintray and JCenter are shutting down; removing these repositories and updating junit plugin version

* azure-android: Bintray and JCenter are shutting down; removing these repositories

* azure-android: Bintray and JCenter are shutting down; adding gradle repo for org.jetbrains.trove4j

* azure-android: Bintray and JCenter are shutting down; removing jcenter added by mistake

* azure-communiication-chat: returning Page from simple paged methods (#661)

* Added Chat sample app that uses new Azure Core (#660)

* Added Sample Chat App that uses the new Azure Core.

* Refactored Chat sample app

* Removed test ACS account name

* Updated buildToolsVersion in Chat sample app build.gradle

* Added paging operations.

* Fixed typo.

* Updated azure-core versions in Gradle files, README and CHANGELOG in preparation for the 1.0.0-beta.4 release. (#676)

* Added azure-core-http to ci.yml (#677)

* Regenerate from Java swagger and Readme.md with expected manual changes (#675)

* Regenerate from Java swagger and Readme.md with expected manual changes

* Move AddChatParticipantsResult to public models folder

* Delete local copy of Chat swagger

* Update CreateChatThreadResultConverter; Add ChatError and ChatErrorConverter

* Add AddChatParticipantsResult back to implementation/models

* Suppress indentation style check on Chat generated code

* Add AddChatParticipantsResultConverter

* Fix null pointer error in unit test

* Remove jacksonSerder from builder

* Fix error in unit test by checking HttpResponseException instead of models.CommunicationErrorResponseException

* Remove obsolete generated files

Co-authored-by: JP Chen <jiach@microsoft.com>
Co-authored-by: CHILIU-MSFT <44037195+CHILIU-MSFT@users.noreply.github.com>

* azure-communication-common: Using CompletableFuture as return type for UserToken::getToken(). (#685)

* Regenerate implementation layer from 03-07 swagger (#683)

* regenerate from 03-07swagger

* Reenable ChatMessageType JSON serialization

* Update session records

* Update recorded session with tests ignored

* Ignore some test and try to delete one test session record

* Disable rather than ignore unreliable tests

Co-authored-by: JP Chen <jiach@microsoft.com>

* eng: updating lint section to cover checkstyle and spotbugs (#689)

* eng: updating lint section to cover checkstyle and spotbugs

* eng: addressing typo (qualiity to quality).

Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>

Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>

* Updated Azure Core version in CHANGELOGs and build.gradle files (#696)

* Updating azure-communication-common module to be in sync with beta.7 (released from master) and additional improvements (#691)

* updating azure-communication-common module to be in sync with latest changes from android-master

* azure-communication-common|chat: using CompletableFuture explicitly

* azure-communication-common: bumping up the version and updating README to refer new version, and calling out CompletableFuture change in README and CHANGELOG

* azure-communication-common: adding missing final keyword, updating version in build.gradle and updating changelog to have unreleased version as beta-9

* azure-communication-common: taking dependency on new lightweight azure-core and making CommunicationCloudEnvironment extensible enum

* Removed unused properties files from Core and Communication libraries. (#697)

* Removed unused properties files from Core and Communication libraries.

* Changed single quotes to double for the Sample App's build.gradle file.

* Integrating Chat preview-5 features, adding ChatThread builder and addressing arch review (#681)

* update to chat preview 5 version based on SDK review feedback

* Changed buildClient and buildAsyncClient in ChatThreadClientBuilder so they don't take any arguments.

* fix bug in addParticipant

* add exception mapping

* update CHANGELOG.md & README.md

* Add CommunicationErrorResponseExceptionConverter, add unit tests for exception mapping

* rebase and fix build error

* fix build error

Co-authored-by: Victor Colin Amador <vicolina@microsoft.com>

* Add trouter convenience layer to SDK (#680)

* Add trouter convenience layer to SDK

* changes according to feedback and checkstyle

* eng: whitelist android.content.Context as a allowed platform type

* [temporary] remove unused classes, we may add them back when doing signaling schema changes same as JS

* Fix test failures and styles

Co-authored-by: Marc Ma <marcma@microsoft.com>

* Updated ACS dependencies, versions and CHANGELOGs. (#699)

* Updated ACS libraries to depend on the latest released version of Azure Core.

* Updated external dependency versions for all libraries and removed unnecessary POM from ACS Chat.

* Updated Gradle plugin distribution URL.

* Updated ACS versions and CHANGELOGs.

* Updated 1.0.0-beta.9 release date in Chat CHANGELOG

Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>

* Updated 1.0.0-beta.9 release date in Common CHANGELOG

Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>

* Changed Gradle wrapper version back to `6.4.1-bin` from `6.4.1-all` for our Android libraries. Updated the Gradle wrapper version for code-quality-reports.

* Updated the alias for the Nimbus Jose JWT dependency from "nimbusJoseJwtVersion" to "nimbusJoseJwtTestVersion".

* Updated ACS versions to `1.0.0-beta.8`.

Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>

* Updated Azure Core versions to `1.0.0-beta.5` in preparation for release. Updated CHANGELOGs and READMEs. (#705)

* Update trouter schema,  use trouter from maven central (#706)

* Update trouter schema

* Use trouter from maven central
Add access methods

* Fix styles

* Fix trouter prod url and json parse

Co-authored-by: Marc Ma <marcma@microsoft.com>

* Improve build.gradle readability and Update Azure Core versions after 1.0.0-beta.5 release. (#707)

* Updated Azure Core versions to `1.0.0-beta.6` after release.

* Cleaned up build.gradle files.

* fix signaling recipient format, shared history time, and communicationIdentifier (#708)

* fix signaling recipient mri format, fix shared history time parsing, fix communicationIdentifier parsing

* fix PR comments

* [Communication]: Bump up version number in build.gradle and changelog for chat and common (#710)

* bump up version number in build.gradle and changelog for chat and common

* Update ReadMe with correct beta version

Co-authored-by: JP Chen <jiach@microsoft.com>

* Update naming, add unit test for identifier parsing (#711)

* update naming, add unit test for identifier parsing

* fix pr comments

* Removing legacy code from master in favor of upcoming v2

Co-authored-by: vcolin7 <vicolina@microsoft.com>
Co-authored-by: Jianping Chen <jp.chen.jianping@gmail.com>
Co-authored-by: JP Chen <jiach@microsoft.com>
Co-authored-by: CHILIU-MSFT <44037195+CHILIU-MSFT@users.noreply.github.com>
Co-authored-by: marche0133 <73860273+marche0133@users.noreply.github.com>
Co-authored-by: Marc Ma <marcma@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants