我试图将第三方监控解决方案(New Relic)集成到我的Android应用程序中,该应用程序使用基于ant的构建。集成指令说在执行ant命令执行构建之前将ANT_OPTS
环境变量设置为-javaagent:{path to a jar file}
。
当我从命令行手动启动我的ant构建时,这很有效。
但是,我们还通过Jenkins启动了ant build。在Jenkins构建配置中,有一个用于配置ant构建的部分。在本节中有一个名为" Java Options"的条目。从其他地方搜索我已经收集了这个放置JVM参数的地方。通常人们希望增加最大堆大小等。
所以我把它放在Java Options部分:
-javaagent:{path to a jar file}
[dex] input: /Users/builduser/.jenkins/jobs/Android - Latest/workspace/android/bin/proguard/obfuscated.jar
[dex] [newrelic.info] Detected the New Relic Android agent in an Ant build (/Users/builduser/.jenkins/jobs/Android - Latest/workspace/android/bin/proguard/obfuscated.jar)
[dex] Converting compiled files and external libraries into /Users/builduser/.jenkins/jobs/Android - Latest/workspace/android/bin/classes.dex...
[dx] Unrecognized option: -
[dx] Could not create the Java virtual machine.
我怀疑这不是谷歌/ Android问题,因为当我设置ANT_OPTS并从命令行启动构建时,这些构建成功。 Jenkins处理JVM args的方式很棘手,让Android构建工具感到困惑。
有人有解决方法吗?
答案 0 :(得分:0)
当作业名称包含空格(“”)时,这似乎只是一个问题。然后只有当“-javaagent:{jar}”被指定为ant插件部分中的“Java选项”时。我克隆了我的工作,并使用了一个没有空格的名称,并且构建成功了。仍然不确定这是Jenkins ant插件或Google的“dx”可执行文件的问题,但现在我倾向于后者。
答案 1 :(得分:0)
这可能与Proguard发生冲突,虽然这个Proguard部分位于New Relic文档站点上,但它不在New Relic用户界面的安装说明中:/
1)将新Relic排除添加到您的应用中,方法是将其添加到您的proguard.cfg文件中:
-keep class com.newrelic.** { *; }
-dontwarn com.newrelic.**
-keepattributes Exceptions, Signature, InnerClasses
2)清理项目,然后在模拟器或设备中运行您的应用程序以开始查看数据。
Link to the doc in question.我正在努力修改New Relic的文档和帮助文本,因为最近出现了一些Proguard冲突。
如果它一直失败,请通过support.newrelic.com与支持部门联系,我们可以进行调查。