IllegalArgumentException в StatFs в внутренней ветке WebViewCore

Google Play сообщает об исключении на некоторых устройствах (все они "другие" и один "LG-E400", поэтому это может быть какая-то специальная сборка Android)

Исключение:

java.lang.IllegalArgumentException
at android.os.StatFs.native_setup(Native Method)
at android.os.StatFs.<init>(StatFs.java:32)
at android.webkit.CacheManager.init(CacheManager.java:199)
at android.webkit.BrowserFrame.<init>(BrowserFrame.java:210)
at android.webkit.WebViewCore.initialize(WebViewCore.java:201)
at android.webkit.WebViewCore.access$500(WebViewCore.java:54)
at android.webkit.WebViewCore$WebCoreThread$1.handleMessage(WebViewCore.java:631)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:653)
at java.lang.Thread.run(Thread.java:1019)

Проблема заключается в том, что я не могу игнорировать это острие, потому что оно находится в отдельном потоке. Есть ли решение этой проблемы?  Или что я могу с этим сделать?

Ответ 1

Скорее всего, это ошибка устройства. У меня много проблем с библиотекой AudioRecord - она ​​также терпит неудачу в native init по числу таких устройств, как Yusu, Micromax, Alcatel и другие устройства с низким диапазоном. Все они отображаются как "другие" в отчетах GooglePlay. Также я столкнулся с тем, что некоторые Cyanogenmod у ПЗУ есть ошибка в AudioRecord - на моем HTC One V он работал нормально, пока я не промахнулся CM10. Один хороший способ узнать точную модель устройства, logcats, mem и другую информацию о том, что происходит на этих устройствах, - использовать некоторый расширенный инструмент отчета о сбоях, поскольку ACRA После того, как я получаю отчет о том, что что-то определенно неправильно на устройстве с его прошивкой производителя, я занесен в черный список на GooglePlay.

Ответ 2

Путь, который вы предоставляете в конструкторе Statfs, не существует

  String path = "path to some directory";
StatFs statFs = null;
statFs = new StatFs(path);

и вы должны иметь разрешение на внешнее хранилище в файле манифеста

Ответ 3

Похоже, что у прошивки возникла проблема с StatFs

У меня была аналогичная проблема с Samsung Galaxy Stratosphere ™ II (Verizon) SCH-I415, Android: 4.1.2 Когда я звоню:

 StatFs statFs = null;
 statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());

У меня есть исключение:

 java.lang.IllegalArgumentException
 at android.os.StatFs.native_setup(Native Method)
 at android.os.StatFs.<init>(StatFs.java:32)

Ответ 4

У меня есть аналогичная проблема, и мой журнал выглядел как

03-14 13:41:55.715: E/PayPalService(14037): Risk component failed to initialize, threw null
03-14 13:41:56.295: E/(14037): statfs /storage/sdcard0 failed, errno: 13
03-14 13:41:56.365: E/AndroidRuntime(14037): FATAL EXCEPTION: Thread-1219
03-14 13:41:56.365: E/AndroidRuntime(14037): java.lang.IllegalArgumentException
03-14 13:41:56.365: E/AndroidRuntime(14037): at android.os.StatFs.native_setup(Native Method)
03-14 13:41:56.365: E/AndroidRuntime(14037): at android.os.StatFs.<init>(StatFs.java:32)

Я нашел эту проблему связанной с SD-картой, посмотрев первые две строки. Затем я проверил настройки устройства и обнаружил, что я проверил их вариант приложения должны иметь разрешение на чтение SD-карты, а приложение я установка не имела разрешения READ SD CARD в манифесте. Поэтому возможно, что эти вещи связаны, и возможные решения для меня были либо разрешены в манифесте, либо для снятия этой опции. Надеюсь, что это поможет в дальнейших исследованиях.

Ответ 5

Начиная с Lollipop, Android установил весьма экстремальные ограничения на доступ к внешним SD-картам. Вы можете использовать:

    StatFs stat;
    try {
        stat = new StatFs(path);
    } catch (IllegalArgumentException e) {
        // Handle the failure gracefully or just throw(e)
    }

для обхода ошибки.

Для моего приложения я просто пропускаю недоступные каталоги, существенно ограничивая пользователя внутренним хранилищем. Не идеальное решение, но ограниченное приложение, которое не падает, лучше, чем тот, который делает.