如何在使用web3j创建新的钱包文件时修复'对于提供者bc而言没有这样的算法ecdsa'

时间:2019-04-04 09:05:16

标签: android web3-java

我正在android studio的最新版本上执行此操作,并且最低SDK版本是15个依赖项:

> implementation fileTree(dir: 'libs', include: ['*.jar'])
> implementation 'com.android.support:appcompat-v7:28.0.0'
> implementation 'com.android.support.constraint:constraintlayout:1.1.3'
> testImplementation 'junit:junit:4.12' androidTestImplementation
> 'com.android.support.test:runner:1.0.2' androidTestImplementation
> 'com.android.support.test.espresso:espresso-core:3.0.2' implementation
> 'org.web3j:core:4.2.0-android' implementation
> 'com.android.support:multidex:1.0.3' implementation
> 'com.squareup.okhttp3:okhttp:3.14.0' implementation
> "io.reactivex.rxjava2:rxjava:2.2.2"

我的代码是:

public String createWallet() throws Exception {
        String path = Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS).getPath().toString();
        String fileName = WalletUtils.generateNewWalletFile("password", new File(path));
        return path + fileName;
}

2 个答案:

答案 0 :(得分:1)

如果您准备发布版本时 minifyEnabled 为 true 并面临此异常:

 java.security.NoSuchAlgorithmException: no such algorithm: ECDSA for provider BC

将这些行添加到 pro-gurd

-dontwarn java8.util.**
-dontwarn jnr.posix.**
-dontwarn com.kenai.**

#-keep class org.bouncycastle.**
-dontwarn org.bouncycastle.jce.provider.X509LDAPCertStoreSpi
-dontwarn org.bouncycastle.x509.util.LDAPStoreHelper

-keepclassmembers class org.web3j.protocol.** { *; }
-keepclassmembers class org.web3j.crypto.* { *; }

-keep class * extends org.web3j.abi.TypeReference
-keep class * extends org.web3j.abi.datatypes.Type

#-dontwarn java.lang.SafeVarargs
-dontwarn org.slf4j.**

谢谢Mimo Saha

答案 1 :(得分:0)

you can check here!

@serso提供了一个函数“ setupBouncyCastle()”,您必须将其放入您的类中并在onCreat中调用它。这用发货的Android版本替换了Bouncy Castle!就像他说的那样。 ^^