#エラー
Device supports x86, but APK only supports armeabi-v7a
#現象
とあるプロジェクトにて、アプリをエミュレータで起動しようとしたとき
に出てきた謎のエラー。
「実機ではちゃんと動いてんだけど」と思いながらエラー文を読んでみると、デバイスはx86をサポートしてるけど、APKはarmeabi-v7aしかサポートしてないよ
的なことが書かれてる。armeabi-v7aてなんぞ?
#解決
いろいろ調べたら、つないでるUSBの用途を充電からファイル転送に変更するとか、デバッグモードのオンオフを切り替えるとかで解決した人がいるっぽい。でも今回、実機じゃないのよね。
なんやかんやでbuild.gradleのabiFiltersにx86
を追加して解決。楽チン。
ndk {
// armeabi-v7aがサポートされてたのはここに記述されてたから
abiFilters "armeabi-v7a", "x86" // ついでにx86を追記
}
#どゆこと?
解釈通り、デバイスはx86をサポートしてるけど、APKはarmeabi-v7aしかサポートしてないよ
ってこと。
armeabi-v7aは、ARMのEABIのバージョン7(Embedded Application Binary Interface Version 7)。
abiについてはここ。
このエラーはx86プラットフォームのネイティブライブラリが生成されないことで起きるエラーらしい。
つまり、デバイスがサポートしてるx86用のコードを作ってやればよくて、abiフィルタにx86を設定するとうまいことやってくれる。