以太坊常见问题和错误

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

在Android中使用web3j时的内存溢出错误的异常情况(OutOfMemoryError)。

我正在试着在Android应用程序中集成web3j。但是,在加载以太坊钱包文件时,库提供了一个内存不足的异常:

Credentials credentials = WalletUtils.loadCredentials("password", walletFile)

异常exception是这么说的:

java.lang.OutOfMemoryError: Failed to allocate a 268435468 byte allocation with 8050708 free bytes and 244MB until OOM

问题可能在这里:

//com.lambdaworks.crypto.SCrypt#scryptJ
byte[] V  = new byte[128 * r * N]; // r: 8, N: 262144, V = byte[268435456]

我知道可以加载credentials,因为另一个项目在Ether Wallet使用web3j,并能够加载相同的以太坊钱包文件。如何解决这个问题?

问题的解决

一个快速解决的方法。在/src/main中创建jniLibs文件夹,并将此加密文件夹中的所有Android文件添加到jniLibs文件夹中,然后编译运行。

注意:需要gradle 0.7.2+将jniLibs自动添加到构建中。