2016-06-30 7 views
0

내 안드로이드 코드에 spongycastle을 사용하고 있습니다. 코드 로이드 5 로이드 6에 잘 작동하지만 로이드 4에서 그 오류를 나타내는 :안드로이드 : 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 :이 종속성은 이미 내 Gradle을 추가됩니다 1.47.0.2' –

+0

@IntelliJAmiya. 여전히 그것의 동일한 오류를 보여줍니다. – MHSN

답변

0

스폰지 캐슬은 여러 개의 패키지로 나뉩니다. 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); 
}