2016-06-30 2 views
0

Я использую spongycastle в своем коде Android. код работает отлично в Android 5 и Android 6, но в Android 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); 
} 
Смежные вопросы