今日、奇妙なクラッシュが発生しました。最初のインストール時に、アプリは openh264 をアプリの内部ディレクトリにダウンロードして解凍します。これは、rxAndroid からの Schedulers.io() スレッドで行われます。これは、この種の最初のクラッシュ (>5k インストール)であり、一致するエラー メッセージを含むこのリンク(非常に興味深いブログ) を見つけました。本当に誰かが openH264 ライブラリを置き換えようとしたのか、それとも x86 デバイスに apk ファイルをインストールしようとしたのかはわかりません。私はまだ openH264 の 1.4 を使用しており、1.5 のリリース ノートを読みました。セキュリティ修正のヒントはありません。
デバイスに関する詳細:
アンドロイド: 4.3
メーカー: サムスン
モデル: GT-I9300
最後に、クラッシュ ログを次に示します。
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/path/files/libopenh264.so" has bad ELF magic
at java.lang.Runtime.load(Runtime.java:330)
at java.lang.System.load(System.java:511)
at path.BeatMarker.init(BeatMarker.java:33)
at path.fragments.main.MainFragment.onOpenH264Done(MainFragment.java:475)
at path.fragments.main.MainPresenterImpl.onOpenH264Done(MainPresenterImpl.java:25)
at path.fragments.main.MainLoaderImpl$1.onCompleted(MainLoaderImpl.java:61)
at rx.observers.SafeSubscriber.onCompleted(SafeSubscriber.java:81)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:201)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:170)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
... 9 more
私はかなり確信しています、クラッシュはここで起こります:
at path.BeatMarker.init(BeatMarker.java:33)
これらは行です:
File libOpenH264File = new File(context.getFilesDir(), "libopenh264.so");
System.load(libOpenH264File.getAbsolutePath()); //line 33
ダウンロードと解凍が完了すると呼び出されます。
ライブラリのダウンロード中にネットワーク接続が失われたときにエラーが発生する可能性はありますか?
ヘルプやヒントは大歓迎です。事前に感謝します! :)