在 Jenkins 上编译 Android 项目时如何修复此 ZipException?

2024-04-27

我最近将 Jenkins 机器上的 Android SDK 从 rev13 更新到 rev15,并且必须重做一些自定义构建内容build.xml以适应 rev14 中所做的更改。我在我的工作站上解决了这个问题,并检查了它,期望一切顺利。相反,构建失败并出现以下错误:

-obfuscate:

-dex:
      [dex] Converting compiled files and external libraries into /export/home/hudson/jobs/path/to/the/file/classes.dex...
       [dx] 
       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] java.util.zip.ZipException: error in opening zip file
       [dx]     at java.util.zip.ZipFile.open(Native Method)    
       [dx]     at java.util.zip.ZipFile.<init>(ZipFile.java:127)
       [dx]     at java.util.zip.ZipFile.<init>(ZipFile.java:143)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:206)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
       [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
       [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
       [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
       [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
       [dx]     at com.android.dx.command.Main.main(Main.java:95)
       [dx] 1 error; aborting

BUILD FAILED
/opt/android-sdk-linux/tools/ant/build.xml:729: The following error occurred while executing this line:
/opt/android-sdk-linux/tools/ant/build.xml:731: The following error occurred while executing this line:
/opt/android-sdk-linux/tools/ant/build.xml:743: The following error occurred while executing this line:
/opt/android-sdk-linux/tools/ant/build.xml:249: null returned: 1

我可以通过运行成功构建项目ant作为 Jenkins 用户,直接在 Jenkins 工作区目录中使用 Jenkins 使用的相同 Android SDK、Ant 和 JDK。我什至从 Jenkins 日志中剪切并粘贴执行行,以确保所有旋钮和开关设置相同。所以问题在于 Jenkins 如何运行构建。

我让 Jenkins 将环境转储为构建的“shell exec”步骤,我发现LD_LIBRARY_PATH变量已设置。

LD_LIBRARY_PATH=/u0/jdk1.6.0_29/jre/lib/i386/server:/u0/jdk1.6.0_29/jre/lib/i386:/u0/jdk1.6.0_29/jre/../lib/i386

我在从 shell 运行构建时在终端中设置了这个值,它以与 Jenkins 运行时相同的方式失败。啊哈!

问题是我不知道如何保持LD_LIBRARY_PATH变量被设置,或者指向不会导致此问题的东西。它没有在 Jenkins 用户环境中设置,并且我在 Jenkins 配置中找不到任何可能引用它的内容。当我安装更新的 JDK 并更新JAVA值在/etc/defaults/jenkins所以这显然是相关的,但不幸的是,这种行为没有任何改善。

我没主意了。有什么帮助吗?


问题是,由于使用 Jenkins 矩阵构建功能(顺便说一句,这是一个非常好的功能)所涉及的一些配置欺骗,库没有将其classes.jar文件位于父项目期望找到的位置,导致报告的错误。这基本上是一个“找不到文件”,但并没有这么说。我们仍然不确定(如果有的话?)LD_LIBRARY_PATH与此有关。

我的同事调整了build.xml主项目和库的文件,以便更强有力地就输出文件的最终位置达成一致,现在一切都恢复正常了,这让我们松了一口气。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jenkins 上编译 Android 项目时如何修复此 ZipException? 的相关文章

  • GCM 通知的自定义 UI

    In GCM Docs http developer android com google gcm gcm html其给定 它不提供任何内置用户界面或其他处理 消息数据 GCM 只是将收到的原始消息数据直接传递给 Android 应用程序
  • Android 的 GCM 推送通知[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近 我尝试学习 GCM 并制作一个测试应用程序 该应用程序将通过 androids 官方网站获取 an
  • 关于android Sqlite在多进程情况下的安全性

    在我的应用程序中 存在多个进程 并且在每个进程中 我需要访问同一个SQLite数据库 当然 这意味着超过2个线程 所以我不仅担心SQLite的线程安全性 还担心SQLite的线程安全性 还有过程安全 这种情况的一种解决方案是使用内容提供者
  • 应用程序启动时立即隐藏导航栏

    基于以下代码片段 我能够隐藏状态栏当应用程序启动时 但不是导航栏 由后退 主页和任务管理器按钮组成的栏 因为它隐藏了稍后在 MainActivity 的线程完成加载后 这是清单
  • 如何在发布版本中使用 Zebra EMDK?

    所以我有一台 Zebra MC330M 设备 我之前创建了一个应用程序 我想使用 PDA 内置的条形码扫描仪 如果在调试模式下运行我的应用程序 一切正常 我可以读取条形码 但是如果我创建暂存或释放版本 apk 则条形码读取器不活动 因此如果
  • 可以混淆/加密 SharedPreferences 文件吗?

    因此 我对混淆应用程序的 SharedPreferences xml 文件很感兴趣 就像 Android LVL 混淆其许可证 cahce 数据一样 这是可以想象的吗 大量的谷歌挖掘几乎没有产生任何可能解决我的问题的结果 我当然不是密码学家
  • Android 中的 XmlPullParser 陷入困境

    经过多个小时的搜索和调试后 我仍然停留在同一个地方 并且 Eclipse 没有帮助我 我试图解析这个 RSS 提要 http fr espnf1 com rss motorsport story feeds 0 xml type 2 这很简
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件。问题

    我的 android studio 遇到了下一个问题 导致 org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveEx
  • 访问先前 Jenkins 构建中失败的阶段

    我编写了一个 Jenkinsfile 脚本 它获取当前 Github 提交中的文档是否已更新或代码是否已更新 并相应地启动所有阶段 如果仅更新文档 我不会再次运行代码测试阶段 所以现在如果之前的构建失败并且现在在当前的 Git 提交中仅更新
  • GCM(Google 云消息传递)是否需要 Google 帐户?

    我需要编写一个简单的应用程序来获取推送通知 我使用 GCM 它使用 Google Play 服务来获取信息 我的问题是 要访问 GCM 是否需要 Google 帐户 我可以使用其他电子邮件帐户来识别设备吗 有没有其他方法可以获取另一个电子邮
  • 为什么设置 MediaRecorder 时显示错误 IllegalStateException?

    我的代码设置 MediaRecorder 它显示行集质量错误 mMediaRecorder new MediaRecorder Step 1 Unlock and set camera to MediaRecorder mCamera st
  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • 如何阻止 Jenkins 中的 CI 构建意外发布到发布存储库?

    有时 开发人员会不小心签入 POM 中没有 SNAPSHOT 的版本 这将构建 Maven 项目并将工件发布到发布存储库 我怎样才能避免这种情况呢 我只想发布构建工件以发布存储库 而不是 CI 构建 我考虑了以下问题 但它们都不是一个简单的
  • 当创建 Android Jetpack Compose AndroidView 的参数发生变化时,如何替换它?

    我有一个应用程序 显示封装在其中的几个不同视图AndroidView 在下面重现的简单示例中 这些只是TextView实例 问题是更改文本 在本例中循环显示三个不同的值 似乎不会更新应用程序显示的内容 sealed class AppVie
  • 如何为工具栏上的溢出菜单中的菜单项设置字体

    我想更改项目的默认字体溢出菜单并设置自定义字体 我尝试添加一个工厂LayoutInflater并在onCreateView 方法我改变了TextView的字体 但这没有用 这是代码 在 onCreateOptionsMenu 内 getLa
  • Webview 中的 Java 空指针异常

    我试图搜索这个问题 但这个错误看起来与这个错误 https stackoverflow com questions 21866459 android nullpointerexception on webview 我的 google pla
  • Android 图标与徽标

    The
  • 随着速度变化,速度表针规绕其中心旋转

    Hi all 我编写了一个应用程序 其中有一个速度计 其指针垂直设置为 90 度 我试图以每秒变化的速度绕其中心旋转指针 我在文本视图中显示变化的速度 从 0 到 120 随机 我正在从远程服务获取速度并显示在文本视图中 因此 当速度发生变
  • Hudson 和电子邮件通知

    我可以覆盖每个作业的 Hudson 设置 系统管理员电子邮件地址 吗 阅读了一些源代码http sorcerer jenkins ci org http sorcerer jenkins ci org and hudson tasks Ma
  • 如何在对话框中配置自定义按钮?

    这里我有一个自定义对话框 里面有背景 2 ImageButton 问题是 当我尝试为该按钮设置 onclick 侦听器时 程序将返回 NullPointerException 我不知道为什么会发生这种情况 无论如何如何将操作分配给对话框内的

随机推荐