Android中使用web3j時出現記憶體溢位錯誤:OutOfMemoryError

馬拉喀什發表於2018-07-18

在使用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自動新增到構建中。

原文《以太坊常見問題和錯誤》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/2/6/

另外推薦幾個很受歡迎全網稀缺的互動教程:

  • web3j,主要是針對java和android程式設計師圍繞web3j庫進行區塊鏈以太坊開發的講解。
  • python以太坊,主要是針對python圍繞web3.py進行區塊鏈以太坊應用開發的講解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和事件等內容。
  • 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • 以太坊教程,主要介紹智慧合約與dapp應用開發,適合入門。


相關文章