このページは、ICONIA TAB A500で「NDKを利用して作られたアプリ」が一部実行できない不具合について調べた結果をまとめたものです。
この文書が書かれている時点では、ICONIA TAB A500のOSバージョンは「2.6.36.3+, Acer_A500_7.009.03_AAP_CUS6JP」です。
上記の配布ファイルにおいて、特に不具合なく実行できるはずのアプリ「java_t01_ng.apk」「native_t01_ng.apk」が、ICONIA TAB A500では実行できません。
同梱されている「java_t02_ok.apk」「native_t02_oj.apk」は、この不具合に対する策を施しており、不具合なく実行することができます。
実行できない場合、LogCatには以下のような「NDKで使われる関数に対するjava.lang.UnsatisfiedLinkError」によるログが残ります。
01-19 20:50:51.090: E/AndroidRuntime(15776): java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1315]: 83 cannot locate 'AConfiguration_new'...
ICONIA TAB A500をADB接続し、以下のように入力します。
> adb shell $ echo $LD_LIBRARY_PATH /vendor/lib:/system/lib $ ls -l /vendor/lib/libandroid.so ls -l /vendor/lib/libandroid.so -rw-r--r-- root root 3670478 2011-10-06 08:25 libandroid.so $ ls -l /system/lib/libandroid.so ls -l /system/lib/libandroid.so -rw-r--r-- root root 62021 2011-12-30 23:26 libandroid.so
ICONIA TAB A500には、2つのフォルダに異なる libandroid.so が格納されています。
/vendor/lib/libandroid.so は、ICONIA TAB A500のベンダであるAcerが独自に作成したものが納められたライブラリと思われます。
/system/lib/libandroid.so は、Androidシステムで共通に使われているライブラリで、「NDKライブラリ作成時に"-landroid"オプションによりリンクされる」ものです。
ICONIA TAB A500で「NDKを利用して作られたアプリ」が一部実行できない原因は、「/system/lib/libandroid.so をリンクしなければならないアプリ」が、同名で先に見つかる /vendor/lib/libandroid.so をリンクしようとして失敗するためです。
アプリ側で、明示的にフルパス指定して「/system/lib/libandroid.so をロードする」ことで、この問題を回避することができます。この方法はすべてのAndroid機で有効なため、ICONIA TAB A500以外で実行したときにも副作用はありません。
「/system/lib/libandroid.so をロードする」方法については、以下のようになります。
詳細な実装方法については、配布ファイルに含まれているソースファイルをご覧ください。
配布ファイルのライセンスについては、APACHE-LICENSE-2.0.txtをご覧ください。
また、これらの不具合について、当方から発売元であるAcerに対して何らかの行動を起こす予定はありません。当方に代わり行動を起こされる場合や、この不具合の修正が行われたことを認識された場合、その他何らかの情報がある場合は、当方までお知らせいただければ幸いです。