I have been using Android Studio 3.0 since since the alpha versions, and it is good to see it finally released.
This is just some initial comments on using some common and new Android tools and libraries with the 3.0 version of Android Studio and the associated Android Gradle plugin.
Hopefully this will be useful for anyone thinking of upgrading from Android Studio 2.x.
Java 8 Finally, Maybe
Java 8 was released back in 2014, and with Android Studio 3.0 it is finally supported in Android. Finally I can say goodbye to RetroLambda (although many thanks to the authors for this very useful library).
Just be aware that many of the Java 8 language features will only be available if the minSkdVersion is 24.
Since devices running Nougat or Oreo are still in the minority, supporting older versions will continue to be an issue for a while if you want to use Java 8. Some ideas floated around to support older API version, are to have min API version flavors or do Build.VERSION checks for the API version in the code to provide alternative code paths.
The Jack tool chain has been replaced with the desugar tranformation process to support Java 8. Some older libraries and code may have some problems with this build stage.
However if you use JUnit 4 Rules in your tests, there is limited support in JUnit 5 as they are meant to be replaced with extensions. Some Rules may be supported with the JUnit 5 migration support, but if not you will have to wait until the Rules are rewritten as extensions or not use the Rules at all.
Update (7 Dec 2017)
The authors of the JUnit5 plugin have stated that they now have support for JUnit 5 in instrumentation tests. I won’t be using it for a while since it requires the minSkdVersion to be 26. If anyone has tried this, please let me know how well it works.
Architecture Components, RxJava
If you use RxJava, then this will of course continue to work as it is compatible with Java 6. You may consider replacing RxJava with the more light weight LiveData for activities and fragments, and they can be adapted to each other.
Dependency Injection with Dagger
I have had no problems with Google’s Dagger, but be aware of the API changes for the Android Gradle plugin 3.0 in the gradle build file (e.g. implemention instead of compile, annotationProcessor instead of apt, etc).
JRebel for Android
During the Android Studio alpha and beta process, JRebel for Android was always playing catch up with the latest version. I still have issues with the current version (2.4.14) of their free edition, so I am using instant run instead at the moment.
AOP with AspectJ
There are various AspectJ plugins for Android, and the one I have been using in Android Studio 2.x was this one.
Unfortunately it doesn’t support the Android plugin for Gradle 3.0 yet, but the author seem to be working on it so hopefully the support will be there soon.
Update (15 Nov 2017)
Things will get better
Of course since Android Studio 3.0 has only recently got general release, we should expect tool and library support to improve going forward.
I have only scratched the surface with some common Android tools and libraries, and there are many more around. Please let me know of your experiences with others.