Nouvelle erreur d’agent Android Relic avec gradle

J’ai un projet qui utilise le système Gradle Build System et je suis prêt à y append une surveillance New Relic

Le projet (y compris New Relic) fonctionne correctement sous Linux (Fedora 20), mais ne repose pas sur mon système de développement Mac et génère une erreur indiquant que le Agent JAR loaded but agent failed to initialize .

Voici le journal complet de l’erreur:

 Dev-1:test 0x4d$ ./gradlew clean > Configuring > 1/2 projects > :appobjc[4437]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. [newrelic.error] Agent startup error java.lang.IllegalAccessException: Can not set static final java.lang.Object field java.util.logging.Logger.treeLock to com.newrelic.agent.comstack.RewriterAgent$InvocationDispatcher at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:73) at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:77) at sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl.set(UnsafeQualifiedStaticObjectFieldAccessorImpl.java:77) at java.lang.reflect.Field.set(Field.java:741) at com.newrelic.agent.comstack.RewriterAgent.createInvocationDispatcher(RewriterAgent.java:772) at com.newrelic.agent.comstack.RewriterAgent.premain(RewriterAgent.java:137) at com.newrelic.agent.comstack.RewriterAgent.agentmain(RewriterAgent.java:102) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382) at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:407) > Configuring > 1/2 projects > :appExcjava.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382) at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:407) Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: Can not set static final java.lang.Object field java.util.logging.Logger.treeLock to com.newrelic.agent.comstack.RewriterAgent$InvocationDispatcher at com.newrelic.agent.comstack.RewriterAgent.premain(RewriterAgent.java:168) at com.newrelic.agent.comstack.RewriterAgent.agentmain(RewriterAgent.java:102) ... 6 more Caused by: java.lang.IllegalAccessException: Can not set static final java.lang.Object field java.util.logging.Logger.treeLock to com.newrelic.agent.comstack.RewriterAgent$InvocationDispatcher at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:73) at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:77) at sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl.set(UnsafeQualifiedStaticObjectFieldAccessorImpl.java:77) at java.lang.reflect.Field.set(Field.java:741) at com.newrelic.agent.comstack.RewriterAgent.createInvocationDispatcher(RewriterAgent.java:772) at com.newrelic.agent.comstack.RewriterAgent.premain(RewriterAgent.java:137) ... 7 more > Configuring > 1/2 projects > :appAgent failed to start! [newrelic] Error encountered while loading the New Relic agent com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize at sun.tools.attach.HotSpotVirtualMachine.loadAgent(HotSpotVirtualMachine.java:121) at com.newrelic.agent.android.NewRelicGradlePlugin.apply(NewRelicGradlePlugin.java:47) at com.newrelic.agent.android.NewRelicGradlePlugin.apply(NewRelicGradlePlugin.java:15) at org.gradle.api.internal.plugins.DefaultPluginContainer.providePlugin(DefaultPluginContainer.java:104) at org.gradle.api.internal.plugins.DefaultPluginContainer.addPluginInternal(DefaultPluginContainer.java:68) at org.gradle.api.internal.plugins.DefaultPluginContainer.apply(DefaultPluginContainer.java:34) at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:101) at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:32) at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:72) at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:114) at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:39) at org.gradle.api.Project$apply.call(Unknown Source) at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34) at org.gradle.api.Script$apply.callCurrent(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) at build_hf6jnn002tc8mnuv025i0lb49.run(/Users/0x4d/Desktop/test/app/build.gradle:15) at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52) at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:156) at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38) at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25) at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34) at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55) at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:507) at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:82) at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:46) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.Main.main(Main.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48) FAILURE: Build failed with an exception. * Where: Build file '/Users/0x4d/Desktop/test/app/build.gradle' line: 15 * What went wrong: A problem occurred evaluating project ':app'. > com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 14.094 secs 

J’ai également testé avec un projet vierge, mais il échoue avec exactement la même erreur.

J’utilise la version JDK 1.7u55, si cela compte.

Merci

Malheureusement, u55 a introduit une modification qui casse l’agent New Relic. Pour l’instant, si possible, utilisez une ancienne version de Java pour résoudre ce problème lors de la création. Cela ne devrait pas affecter l’APK résultant. New Relic est conscient de ce problème et s’efforce de le résoudre le plus rapidement possible.

J’ai envoyé un courrier électronique au support de New Relic, et j’ai obtenu la réponse suivante:

Bonjour,

Merci d’avoir écrit sur le support de New Relic.

Une nouvelle version du SDK Android de New Relic for Mobile Apps est en version bêta et inclut un correctif pour la compatibilité avec JDK v7u55 et JDK v8.

Il est disponible ici: https://gist.github.com/asm/bed819fb32253e4cb072 .

Nous attendons de libérer cet agent jusqu’à ce que des utilisateurs comme vous nous informaient que le SDK fonctionne correctement et que l’instrumentation fonctionne correctement.

S’il vous plaît laissez-nous savoir si vous avez des problèmes pour installer ce SDK.

Je vais laisser ce billet ouvert pour que vous puissiez nous envoyer une mise à jour. Notre système automatique vous enverra une requête ping pour voir comment vous allez dans quelques jours, puis essaiera de fermer le ticket quelques jours plus tard. Si c’est le cas, ne vous inquiétez pas, écrivez-nous à tout moment et nous nous ferons un plaisir de vous aider.

Une nouvelle version du nouveau client Relic est disponible. Il résout les problèmes que la V3.361.0 avait avec les nouveaux JDK et proguard. Voici ce que vous devez utiliser pour résoudre le problème JDK.

 classpath 'com.newrelic.agent.android:agent-gradle-plugin:3.378.0' 

Collez-le dans votre build.gradle où vous avez répertorié vos dépendances. Faites-moi savoir si cela ne fonctionne pas.