【问题标题】:Fatal Exception: java.lang.VerifyError: Coming from imported jar file致命异常:java.lang.VerifyError:来自导入的 jar 文件
【发布时间】:2015-02-26 15:50:39
【问题描述】:

我正在构建一个库项目,其中我正在使用 3rd 方 jar 文件。

通常,当我将库用作对 TestApp 的依赖项时,所有东西都可以正常工作。附上截图:

但是,当我从 TestSDK 库项目中导出 jar 并将其添加到 TestApp 的构建路径中时,如下所示:

在设备上部署应用程序时,我收到VerifyError。以下是它的日志:

12-30 18:10:55.778: W/dalvikvm(7316): VFY: unable to find class referenced in signature (Lcom/aerserv/sdk/ASAdView;)
12-30 18:10:55.788: W/dalvikvm(7316): VFY: Ljava/lang/Object; is not instance of Landroid/view/View;
12-30 18:10:55.788: W/dalvikvm(7316): VFY: bad arg 1 (into Landroid/view/View;)
12-30 18:10:55.788: W/dalvikvm(7316): VFY:  rejecting call to Landroid/view/ViewGroup;.removeView (Landroid/view/View;)V
12-30 18:10:55.788: W/dalvikvm(7316): VFY:  rejecting opcode 0x6e at 0x0011
12-30 18:10:55.788: W/dalvikvm(7316): VFY:  rejected Lcom/anupam/sdk/activities/AdsActivity;.initAerservAd ()V
12-30 18:10:55.788: W/dalvikvm(7316): Verifier rejected class Lcom/anupam/sdk/activities/AdsActivity;
12-30 18:10:55.788: W/dalvikvm(7316): Class init failed in newInstance call (Lcom/anupam/sdk/activities/AdsActivity;)
12-30 18:10:55.788: D/AndroidRuntime(7316): Shutting down VM
12-30 18:10:55.788: W/dalvikvm(7316): threadid=1: thread exiting with uncaught exception (group=0x41596ba8)
12-30 18:10:55.788: E/AndroidRuntime(7316): FATAL EXCEPTION: main
12-30 18:10:55.788: E/AndroidRuntime(7316): Process: com.anupam.testsdk, PID: 7316
12-30 18:10:55.788: E/AndroidRuntime(7316): java.lang.VerifyError: com/anupam/sdk/activities/AdsActivity

这样做的正确方法应该是什么?我在这里错过了什么吗?任何形式的帮助或指导将不胜感激。

【问题讨论】:

标签: java android eclipse jar verifyerror


【解决方案1】:

我认为您的 JAR 依赖于 Aerserv SDK 但不包含它。而且我也没有看到它包含在应用程序中。

请注意,您的 JAR 库的构建依赖项不会自动包含在内。构建库时,依赖关系是一个问题。您有两个选择:在 jar 本身中包含依赖项(您必须强制构建系统执行此操作)或指示库用户执行此操作(类似于 Aerserv 的操作方式)。包含依赖项时,如果库用户也广告它们,则可能会发生冲突。

【讨论】:

  • 那么,我必须手动在TestApp中生成aerserv jar,它不能包含在库项目本身中吗?
  • 感谢 atok 的快速回答。如果我错了,请纠正我。为了让它工作,我必须在库项目中手动添加 aerserv 源代码而不是 jar?或者其次,我必须在我的 TestApp 中手动添加 aerserv jar 才能工作?除此之外没有什么可以解决这个问题?
  • 复制代码是个坏主意,因为您无法跟踪依赖项中的更改。您可以使用 Gradle 或 Maven 构建一个包含所有依赖项的“胖 jar”。
  • 你能指导我怎么做吗?我从未为此目的使用过 Gradle 或 Maven。我听说过 oneJar 的概念,但我怀疑这对我有用。您是否为此推荐了其他东西?
  • @Anupam 你在用 eclipse 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2017-02-16
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多