2016-06-30 47 views
0

我在我的android代碼中使用spongycastle。代碼在機器人5和機器人6工作正常,但在機器人4其示出了錯誤:Android:無法找到org.spongycastle.util.io.pem.PemReader

java.lang.NoClassDefFoundError: org.spongycastle.util.io.pem.PemReader 

及其在PemReader的初始化在下面的代碼的時間出現故障:

private PublicKey getPublicKey(AssetManager manager, String keyPath) { 
    PublicKey key = null; 
    try { 
     final KeyFactory keyFactory = KeyFactory.getInstance(TicketVerifier.ENCRYPTION_ALGORITHM); 
     InputStream stream = manager.open(keyPath); 
     final PemReader reader = new PemReader(new InputStreamReader(stream)); 
     final byte[] pubKey = reader.readPemObject().getContent(); 
     reader.close(); 
     final X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(pubKey); 
     key = keyFactory.generatePublic(publicKeySpec); 
    } catch (IOException e) { 
     Log.e(TAG, "error verifying ticket", e); 
    } catch (NoSuchAlgorithmException e) { 
     Log.e(TAG, "error verifying ticket", e); 
    } catch (InvalidKeySpecException e) { 
     Log.e(TAG, "error verifying ticket", e); 
    } 
    return key; 
} 

構建。 gradle這個

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 
useLibrary 'org.apache.http.legacy' 
defaultConfig { 
    applicationId "com.xx.xx.android" 
    minSdkVersion 17 
    targetSdkVersion 23 
    versionCode 22 
    versionName "5.0.0.22" 
    multiDexEnabled true 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
testCompile 'org.robolectric:robolectric:3.0' 
compile 'com.android.support:appcompat-v7:23.3.0' 
compile ('com.viewpagerindicator:library:2.4.1'){ 
    exclude group: 'com.android.support', module: 'support-v4' 
    exclude group: 'com.google.guava' 
} 
compile 'com.google.zxing:android-integration:2.2' 
compile 'com.google.zxing:core:2.3.0' 
compile ('com.google.android.gms:play-services:[email protected]'){ 
    exclude group: 'com.android.support', module: 'support-v4' 
    exclude group: 'com.google.guava' 
} 
compile 'com.google.guava:guava:17.0' 
compile 'org.altbeacon:android-beacon-library:2.1.3' 
compile 'com.fasterxml.jackson.core:jackson-core:2.2.3' 
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.3' 
compile 'com.fasterxml.jackson.core:jackson-databind:2.2.3' 
compile 'com.madgag:scprov-jdk15on:1.47.0.3' 
compile 'net.oauth.core:oauth:20100527' 
compile 'org.jsoup:jsoup:1.8.3' 
compile 'com.android.support:support-v4:23.3.0' 
} 

誰能告訴我如何處理它。

+0

調用'編譯「com.madgag:scprov-jdk15on:1.47.0.2' –

+0

@IntelliJAmiya這種關係在我已經gradle產出增加。仍然顯示相同的錯誤。 – MHSN

回答

0

Spongycastle分成幾個軟件包。 PemReader不是基本包的一部分。所以請確保添加所有依賴項:

dependencies { 
    .... 
    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' 

    } 

不要忘記將它作爲安全提供程序插入到您的應用程序中。

static { 
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); 
}