20120120_iconiatab_libandroid の履歴(No.1)
- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 20120120_iconiatab_libandroid へ行く。
- 1 (2012-01-19 (木) 20:54:28)
- 2 (2012-01-20 (金) 07:10:31)
- 3 (2012-01-20 (金) 07:13:36)
ICONIA TAB A500で /system/lib/libandroid.so が読まれない不具合†
このページは、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 をロードする」方法については、以下のようになります。
- JavaからNDKライブラリを呼び出す場合は、System.load()で /system/lib/libandroid.so を読み込む。
- Native Activityの場合は、「dlopen()で/system/lib/libandroid.soを読み込んでから実体ライブラリを読み込む」処理をするローダーライブラリを先に実行する。
詳細な実装方法については、配布ファイルに含まれているソースファイルをご覧ください。
ライセンスなど†
配布ファイルのライセンスについては、APACHE-LICENSE-2.0.txtをご覧ください。
また、これらの不具合について、当方から発売元であるAcerに対して何らかの行動を起こす予定はありません。当方に代わり行動を起こされる場合や、この不具合の修正が行われたことを認識された場合、その他何らかの情報がある場合は、当方までお知らせいただければ幸いです。