Fixes
- Corrects an issue where the agent may crash under certain concurrent access of instrumented InputStream implementations.
- Corrects an issue where a thread pool was not properly getting destroyed upon application background-to-foreground transitions.
Improvements
- Crash Reporting
- This release introduces crash reporting for mobile apps. Crash reporting supports capture and reporting of unhandled Java runtime exceptions.
- Crashes include interaction trails: a history of automatically instrumented actions that occurred during the app session leading up to the crashing event. No breadcrumbs needed.
- The SDK includes a
NewRelic.crashNow()
method to trigger a test crash quickly and easily. - You can also disable crash reporting via the runtime API.
- When building an app with Proguard enabled, the Proguard mapping file is sent to New Relic to automatically provide human readable crash reports in the UI.
- Session improvements
- The SDK now more consistently records MobileSession events in Insights when users use various app switchers on Android 4.x.
Fixes
- Improve reported traffic accuracy
- Corrects an issue where the SDK could continue to report an app as active when it had entered the background. This fix will reduce the traffic reported for an app to more accurately reflect actual usage.
- Improve thread naming accuracy
- Corrects an issue where the SDK reported some metrics with an incorrect display name. This fix will more accurately reflect thread breakdown data in interactions.
Improvements
New Gradle Plugin
We've rewritten the New Relic Gradle plugin from the ground up to impose a smaller footprint on your build and improve compatibility with the new Gradle Daemon.
Improvements
Naming changes to Interaction Traces
We've changed the naming scheme for Interaction Traces to be more clear. Instead of "ActivityClass#onCreate", you'll see "Display ActivityClass". If you want to change the name of a running Interaction, just call
setInteractionName()
.New API methods for starting and stopping Interaction Traces
We've added two new methods to the NewRelic class API to give you greater control over starting and stopping Interaction Traces. The
startInteraction()
method now just takes a string, no context needed. UseendInteraction()
to stop a running interaction.New
@SkipTrace
annotation to exclude methods from default instrumentationWhile automatic instrumentation is one of the more convenient features of the agent, there are a few cases where it can get in the way. Should you encounter one of these cases, simply add this annotation to the method in question, and the agent will skip it during compile time instrumentation.
Notes
Improvements
API methods now check for bad values and throw IllegalArgumentException
Previously, our API methods would silently discard bad data without recording errors or metrics. We've changed this behavior to be more informative by throwing an exception when bad arguments are passed.
Fixes
Android Gradle plugin 0.10 compatibility
Version 0.10.0 of the plugin introduced a subtle change that caused errors during build time that would produce ClassCastException errors at runtime. We’ve fixed this issue and verified we're also compatible with 0.11.
- Improved thread safety in the API
Some API methods exhibited race conditions under heavy utilization. These race conditions are now solved.
- Summary metrics occasionally exhibited bad values
You may have noticed strange numbers in your application overview chart. We've isolated the cause of these numbers and fixed the underlying issue in the agent.
Improvements
CPU vitals in Interaction traces.
We've added CPU vitals in interaction traces. You'll now be able to see your application's usage of the device's CPU(s) as a percentage of the total CPU time.
Fixes
Restore compatibility for building with Java 7u55 and support Java 8.
Java 7u55 introduced a slight change that broke our build process. We've corrected this issue and added support for Java 8.
Applications without version numbers crashed the agent.
Strangely, it's possible to build an Android application without a version number defined in the manifest. We now detect this case and shut down the agent cleanly with an error message indicating we require a version number.
Encode custom Http(s) error response bodies.
Http(s) error response bodies are normally encoded to ease escaping. However, errors reported via the API were not encoded. We've fixed this so all errors should appear properly in the UI.
Improvements
Better auto-naming support for Fragments.
Previously, separating fragments from the calling Activity required renaming the running interaction. Now, Fragments have first class treatment and will show up alongside Activities.
OkHttp instrumentation.
If you're using Square’s OkHttp library, you'll now see your HTTP transactions automatically appear on RPM. There’s no longer any need to use the agent API to track these transactions.
Fixes
Clear all metric caches after a failed harvest cycle.
In rare cases where the agent is unable to connect to New Relic's servers, some metric caches persisted and caused unusually large metric numbers. Now, all these caches are cleared at the end of the cycle to prevent compounding aggregation.
Improved inflight interaction naming.
There are some cases in which renaming a running interaction did not fully rename the metric scope. This fix ensures all aspects of the interaction bear the new name.
Fixed an issue in Proguard bytecode handling.
While compiling Android apps with Proguard's optimizations turned on is discouraged, the agent does its best to support such optimizations. However, we mishandled one such case and have fixed it in this release.
Fixes
Ensure interactions complete when an app leaves the foreground.
Previously, it was possible for an interaction to persist across application foreground/background lifecycles if a trace segment was still in flight. This resulted in interaction traces extending past the default 60-second limit. Now, interactions are stopped when the app leaves the foreground regardless of segment states.
Machine metrics continue generation upon app restore.
Machine metrics now continue to generate after an app has been in the background and enters the foreground. Previously, they were only generated from launch until the app entered the background.
Improve BitmapFactory instrumentation scoping.
BitmapFactory’s static method instrumentation is now scoped to more tightly to its package and class to prevent instrumentation of similar but unrelated method signatures.
Added more instrumentation to summary metrics.
Now all instrumented methods are included in summarized category metrics including those only present in background threads.
Added missing methods to HttpsUrlConnection instrumentation.
Several missing proxy methods have been added to our HttpsUrlConnection shim. This restores the ability to override default HTTPS behavior.
Improvements
New API methods for adding cross application tracing headers to noticeHttpTransaction().
In case the New Relic agent doesn't support the HTTP API you're using, you can manually submit a transaction via the noticeHttpTransaction() method. With this release, this method now allows you to set the NR cross application tracing header for tracking purposes.
Fixes
- Fixed a rare build crash where newly constructed objects go unused and are later optimized down by ProGuard.
Improvements
New API method for configuring logging verbosity.
You can now choose how verbose the agent will be at boot by chaining withLogLevel() before your NewRelic start() call. The default level is INFO.
New API method for renaming inflight interactions.
Call NewRelic.setInteractionName() at the beginning of your onCreate() method to set a custom name for your interaction. This usually defaults to the name of the Activity subclass.
Method tracing optimizations.
We’ve carefully reviewed the code involved in tracing instrumented methods and reduced its CPU and memory overhead substantially.