Android中使用web3j時出現記憶體溢位錯誤:OutOfMemoryError
阿新 • • 發佈:2019-01-07
在使用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自動新增到構建中。
另外推薦幾個很受歡迎全網稀缺的互動教程: