【问题标题】:Fail to add Spongycastle as provider in android无法在 android 中添加 Spongycastle 作为提供者
【发布时间】:2013-04-10 06:54:55
【问题描述】:

我正在尝试使用 spongycastle 并遵循所有 help 我可以包含它但是当应用程序执行时它在我将其添加为提供者的代码处崩溃:

static {
    Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
}

我将 scprov-jdk15-1.46.99.3-UNOFFICIAL-ROBERTO-RELEASE.jar 作为外部 JAR 添加到我的项目中,eclipse 不报告任何错误。

有什么想法吗?

堆栈跟踪:

08-11 12:41:56.653: W/ActivityThread(683): Application com.ljbrits.test4 is waiting for the debugger on port 8100...
08-11 12:41:56.723: I/System.out(683): Sending WAIT chunk
08-11 12:41:56.723: I/dalvikvm(683): Debugger is active
08-11 12:41:56.914: I/System.out(683): Debugger has connected
08-11 12:41:56.914: I/System.out(683): waiting for debugger to settle...
08-11 12:41:57.113: I/System.out(683): waiting for debugger to settle...
08-11 12:41:57.153: I/dalvikvm(683): threadid=3: reacting to signal 3
08-11 12:41:57.203: I/dalvikvm(683): Wrote stack traces to '/data/anr/traces.txt'
:
08-11 12:41:59.344: I/System.out(683): waiting for debugger to settle...
08-11 12:41:59.546: I/System.out(683): debugger has settled (1437)
08-11 12:41:59.693: I/dalvikvm(683): threadid=3: reacting to signal 3
08-11 12:41:59.824: I/dalvikvm(683): Wrote stack traces to '/data/anr/traces.txt'
08-11 12:42:00.173: I/dalvikvm(683): threadid=3: reacting to signal 3
08-11 12:42:00.183: I/dalvikvm(683): Wrote stack traces to '/data/anr/traces.txt'
08-11 12:42:00.193: D/dalvikvm(683): threadid=1: still suspended after undo (sc=1 dc=1)
08-11 12:42:00.283: E/dalvikvm(683): Could not find class 'org.spongycastle.jce.provider.BouncyCastleProvider', referenced from method com.ljbrits.test4.Test4Activity.<clinit>
08-11 12:42:00.283: W/dalvikvm(683): VFY: unable to resolve new-instance 417 (Lorg/spongycastle/jce/provider/BouncyCastleProvider;) in Lcom/ljbrits/test4/Test4Activity;
08-11 12:42:00.283: D/dalvikvm(683): VFY: replacing opcode 0x22 at 0x0000
08-11 12:42:00.363: D/dalvikvm(683): DexOpt: unable to opt direct call 0x07d8 at 0x02 in Lcom/ljbrits/test4/Test4Activity;.<clinit>
08-11 12:42:00.683: I/dalvikvm(683): threadid=3: reacting to signal 3
08-11 12:42:00.714: D/dalvikvm(683): threadid=1: still suspended after undo (sc=1 dc=1)
08-11 12:42:00.714: I/dalvikvm(683): Wrote stack traces to '/data/anr/traces.txt'
:
08-11 12:42:06.233: I/dalvikvm(683): Wrote stack traces to '/data/anr/traces.txt'
08-11 12:42:08.719: W/dalvikvm(683): Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lcom/ljbrits/test4/Test4Activity;
08-11 12:42:08.719: W/dalvikvm(683): Class init failed in newInstance call (Lcom/ljbrits/test4/Test4Activity;)

【问题讨论】:

  • 我也尝试过使用最新的 Bouncycastle JAR,但同样的崩溃失败了。
  • 我的目标是 Android 4.0 及更高版本
  • 你能包含错误的堆栈跟踪吗?你应该能够使用'adb logcat'找到它
  • 添加了堆栈跟踪。我正在使用模拟器并通过 eclipse 中的 logcat-tab 复制了这个 logcat 输出。如果我错了,请纠正我,但我认为这与 adb logcat 的输出相同。

标签: android security spongycastle


【解决方案1】:

此处抛出的 NoClassDefFoundError 表明 SpongyCastle 类未包含在您部署的 apk 文件中 - 尝试解压缩 apk 以检查这一点)。这可能是由一些原因引起的,请确保您进行了干净的构建(您是使用 ant 还是 eclipse 构建?),如果问题仍然存在,则可能是 proguard 问题 - ProGuard 可能会删除它认为未使用的类 - 可以你发布你的 proguard.cfg 吗?

【讨论】:

  • 我使用的是 Eclipse,所以我从项目菜单中清理了项目并再次构建它。查看在我的项目目录的 bin 目录中创建的 apk 文件,我可以看到 res、assets 和 META-INF 目录以及 resources.arsc、classes.dex 和 AndroidManifest.xml 文件。 proguard 的东西仍然在 project.properties 文件中被注释掉。这是验证它被禁用的正确位置吗?
  • 现在看起来很有效:我找到了一些关于 eclipse 的帮助,其中指出必须将必须是 APK 一部分的库标记为已导出(eclipse 中属性对话框的最后一个选项卡)。我这样做了,现在崩溃消失了。感谢您的回复让我走上正确的思路。
  • 我发现了同样的问题。但是,在我的情况下,当 jar 文件与 apk 一起导出时,它会遇到 GC Overhead Limit fail...知道我可能做错了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多