2014年3月10日月曜日

けっこうハードルが高かった今回のアプリ制作

ふと思い立って制作したアプリ「ガヤざわニュースランキング」なんですが、
けっこうハードルが高い状態だった以下の3点です。
特にAndroidは知識がほぼないに等しい状態だったので、
苦労しました。

①cocos2dxのプロジェクトにlibiconvをコンパイル対象に入れる
iOSは余裕です、しかしAndroidはコードも記入する必要があり苦労しました。
そもそもAndroid.mkの書き方もわかってない私が悪いんですが。

②greeさんのwebview pluginの導入
これもiOSは余裕です。
Androidはpatchを当てる作業があるんですが、そもそも提供されてるpatch
を手動であてる必要もあり、そもそもよーわからんでソースを読む必要あり。
※意外に冷静になると簡単でしたが。

③途中で落ちる(libc.so)で

以下のログが出て落ちる
03-03 15:34:33.361: I/dalvikvm(743): threadid=3: reacting to signal 3
03-03 15:34:33.511: I/dalvikvm(743): Wrote stack traces to '/data/anr/traces.txt'
03-03 15:34:33.681: D/dalvikvm(743): Trying to load lib /data/data/com.zawazawa.hotspring/lib/libcocos2dcpp.so 0x41020d10
03-03 15:34:33.691: W/dalvikvm(743): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/zawazawa/hotspring/zawaNews;
03-03 15:34:33.691: W/dalvikvm(743): Class init failed in newInstance call (Lcom/zawazawa/hotspring/zawaNews;)
03-03 15:34:33.701: D/AndroidRuntime(743): Shutting down VM
03-03 15:34:33.721: W/dalvikvm(743): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-03 15:34:33.741: E/AndroidRuntime(743): FATAL EXCEPTION: main
03-03 15:34:33.741: E/AndroidRuntime(743): java.lang.ExceptionInInitializerError
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.Class.newInstanceImpl(Native Method)
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.Class.newInstance(Class.java:1319)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.os.Looper.loop(Looper.java:137)
03-03 15:34:33.741: E/AndroidRuntime(743): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.reflect.Method.invokeNative(Native Method)
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.reflect.Method.invoke(Method.java:511)
03-03 15:34:33.741: E/AndroidRuntime(743): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-03 15:34:33.741: E/AndroidRuntime(743): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-03 15:34:33.741: E/AndroidRuntime(743): at dalvik.system.NativeStart.main(Native Method)
03-03 15:34:33.741: E/AndroidRuntime(743): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]:    36 could not load needed library 'libiconv.so' for 'libcocos2dcpp.so' (load_library[1091]: Library 'libiconv.so' not found)
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.Runtime.loadLibrary(Runtime.java:370)
03-03 15:34:33.741: E/AndroidRuntime(743): at java.lang.System.loadLibrary(System.java:535)
03-03 15:34:33.741: E/AndroidRuntime(743): at com.zawazawa.hotspring.zawaNews.<clinit>(zawaNews.java:46)
03-03 15:34:33.741: E/AndroidRuntime(743): ... 15 more
03-03 15:34:33.921: I/dalvikvm(743): threadid=3: reacting to signal 3
03-03 15:34:33.952: I/dalvikvm(743): Wrote stack traces to '/data/anr/traces.txt'
03-03 15:34:34.401: I/dalvikvm(743): threadid=3: reacting to signal 3
03-03 15:34:34.441: I/dalvikvm(743): Wrote stack traces to '/data/anr/traces.txt'

しかもcrashdump見てもlibc.soで落ちていることしかログに残らない

これは非常に苦戦しました。
しらみ潰しにやっているとどうやらlibcurlとlibiconv関連で発生しているようです。

今回のプログラムは、簡単にいうとlibcurlでとあるhtmlソースを取得してそれをテキストファイル化し、euc-jpからutf-8の形式にlibiconvで変換するということをやったんですが、どーにもこーにもエラー内容が不明(表示部分とは別にclass化していました)

とりあえず、別クラスにしていたものを
「ええいままよ。」と結果を表示するクラス内にメンバ変数、メンバ関数ともに明記したらなぜかandroidもエラー発生せず、、、

いや本当にわけがわかりませんが治りましたよ。
詳細はまた後日にまとめてブログにアップします。

0 件のコメント:

コメントを投稿