我com.nimbusds.jose.crypto在我的android客户端中使用库来做一些jwt的东西.
这是我在gradle文件中声明的内容:
compile 'com.nimbusds:nimbus-jose-jwt:4.23'
Run Code Online (Sandbox Code Playgroud)
在api> = 19时一切正常,但是当我在api 16上运行代码时,我得到了这个异常:
java.lang.NoClassDefFoundError: org.bouncycastle.crypto.engines.AESEngine.
这是什么问题?为什么AESENGINEapi 16上没有课程?
如果你查看dependecy列表,nimbus-jose-jwt那就没有bouncycastle库.但是,如果您查看源代码,更准确地说是com.nimbusds.jose.crypto.bc查看包,那么您可以看到它使用bouncycastle而不将其声明为依赖项.所以图书馆只是假设bouncycastle存在.
解决方案是手动添加依赖项.首先,按照链接实现bouncycastle在Android 上使用的标准方式.
但是,这并没有解决问题,因为org.bouncycastle.crypto.engines.AESEngine不在其中一个库中.解决方案是添加一个依赖项:
依赖{compile'org.bouncycastle:bcprov-jdk15on:1.54'}
一切都应该工作正常.
摘要:
gradle 依赖关系应该像:
dependencies {
compile 'com.nimbusds:nimbus-jose-jwt:4.23'
compile 'com.madgag.spongycastle:core:1.54.0.0'
compile 'com.madgag.spongycastle:prov:1.54.0.0'
compile 'com.madgag.spongycastle:pkix:1.54.0.0'
compile 'com.madgag.spongycastle:pg:1.54.0.0'
compile 'org.bouncycastle:bcprov-jdk15on:1.54'
}
Run Code Online (Sandbox Code Playgroud)
你应该注册java.security.Provider:
static {
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3375 次 |
| 最近记录: |