Mozcをビルドした。
ビルドしたら、インストールして動かしたくなるではないか。
ビルドしたapkはunsignedなので、符号無し・・・ではなく署名されてない。
jarsignerはどうやって使うんだったっけ、とAndroid Developerを参照した。
$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
こんなに長かったっけ?
と思いつつも、昔作ったkeystoreファイルを指定すると怒られた。
signature algorithmが違う、と。
keytoolで確認できるようなので、見てみた。
すると「SHA1withDSA」というやつになっていた。
うーん、あまり記憶は無いが、確か当時はサイトを見ながらkeystoreファイルを作ったはず。。。
ということは、時代が新しくなったので、アルゴリズムも新しくなったということか。
keystoreファイルを作り直すのはやめて、SHA1withDSAにするとうまくいった。
Nexus7へも、adb installでうまくいった。
設定アプリの「言語と入力」にも「Mozc for Android」が出てくるし、選択できる。
が・・・設定ができない・・・。
logcatで見ると、SIGBUSってなってるから、Bus Errorが起きているようだ。
libmozc.soらしい。
「RUN EMOJI PROVIDER DETECTION: null」というところかね。
これはandroid/inputmethod/japanese/emoji/EmojiProviderType.javaが出しているようだ。
では、Google Playにある方もだめなのかと思ってインストールしてみたが、こっちは問題ないようだ。
EMOJIのログもINFOだから致命的ではないのだろう。
ならば「Ignoring setInputMethod of uid 10111 token: null」の方が問題なのかもしれん。
バスエラーだからNULL参照とかそんなとこだと思うが、Javaだったらthrowするだろうから、原因はNDKの部分か。
む、BUS_ADRALNとある。
アラインメント不正か。アドレスが奇数になってるな・・・。
Thumb命令のベクタアドレスは奇数にするとかいう決まりがあったような気がするが、そういうのじゃないんだろうな。
addr2lineとかで追うしかないのか。。。
backtraceに出てくる最後は、これだった。
#00 pc 000cbab6 /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
では、これをaddr2lineしてみる。
[android/obj/local/armeabi]$ addr2line -e libmozc.so 0x000cbab6
/mnt/android/mozc/mozc/src/./storage/louds/simple_succinct_bit_vector_index.cc:47
ふむ。
ソースを見ておこう。
// TODO(hidehiko): Support XMM and 64-bits popcount for 64bits architectures.
inline int BitCount1(uint32 x) {return __builtin_popcount(x);
}
__builtin_popcount()はgccの組み込み関数で、ビットが立ってる数を求めてくれるらしい。
組み込み関数だからまずいのか?と思って、そうじゃない方の関数を呼ばせるようにしてみた。
が、これはこれでやはりだめだった。
報告は、こういう状況。
signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 69bcd243
バックトレースは、こう。
backtrace:
#00 pc 000cbaf6 /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
#01 pc 000cb4cb /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
#02 pc 000b504d /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
#03 pc 000b528d /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
スタックトレースは、こう。
stack:
69915940 00000000
69915944 63097b64
69915948 00000000
6991594c 6a90ba43 /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
69915950 00000d88
69915954 0000ead8
69915958 59ae3b20
6991595c 63097b64
69915960 0003ab44
69915964 63117818
69915968 69bcd243 /data/app/org.mozc.android.inputmethod.japanese-1.apk
6991596c 00075688
69915970 0003ab44
69915974 63117818
69915978 df0027ad
6991597c 00000000
#00 69915980 699159b4
69915984 6a91a053 /data/app-lib/org.mozc.android.inputmethod.japanese-1/libmozc.so
もっとログは出ているのだが、紙面の都合で省略した。
不正アドレスになっているのはわかるけど、それはapkが元になっていることになってる。
soファイルならaddr2lineすればいいけど、apkはどうしたらいいんだろうね?
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。