Android
web3j WalletUtils.loadCredentials() 在 Java 中工作,在 Android 上拋出 java.lang.OutOfMemoryError
我正在嘗試使用 web3j + Infura 從 android 應用程序與 Rinkeby 鏈進行互動。我首先用 Java 編寫了一個簡單的測試,一切正常 - 交易、與合約互動等等。所以我搬到了Android,但在模擬器中從文件載入憑據需要永遠+顯示幾個垃圾收集警告,而我的Moto G5plus手機實際上由於OutOfMemoryError而崩潰。這就是我正在做的事情(在 AsyncTask 中):
Credentials credentials = WalletUtils.loadCredentials("notMyActualPassword", cacheFilePath);
文件路徑是正確的,我確實在我的日誌中列印了錢封包件,它顯示正確。崩潰日誌被複製到這個 gist中。
有誰知道為什麼會發生這種情況?
我知道了,我認為有一個 Scrypt lib 的 C 實現,您需要將 .so 文件添加到您的應用程序字典中,放入您的 apk 文件的 lib/armeabi 字典中,它會自動載入。這可能有幫助,我已經解決了通過使用 C 實現而不是預設的 java 實現的問題 https://github.com/wg/scrypt/tree/master/src/android/resources/lib/arm5 這是編譯後的 libscrypt.so 文件。
https://github.com/web3j/web3j/issues/511 這個 github 問題看起來與您的問題非常相似。如果您向下滾動到 weixuefeng 的回复,則提供了一些解決方案。(但連結是中文的)
還有,由於我新創建的賬號限制……我無法評論樊晉龍的回答。如果 .so 文件解決了你的問題,你能解釋一下嗎?