Google関連には一切アクセス不可!!な、CDMA2000端末。
しかもdalvikのlibcoreに仕掛けがあって、IPv6なhostnameのresolvができない。AF_INET固定になっとる。
これは確実に故意に修正されているので、kernelはv6喋れても、名前解決はv4しかできない。
まずSamsungのOpensourceサイトからi909のGPLコードを全部ダウンロードする。zipで1つにまとまって
いるので楽。
#生のエクレアのライブラリと入れ替えるので、おとさなくてもいいけど、kernelビルドしたいとか
#必ずそうなるw。
http://opensource.samsung.com/ SCH-I909_CN_OpenSource.zipダウンロード後、libjavacore構成要素である
./dalvik/libcore/luni/src/main/native/java_net_InetAddress.cpp
を見てみる。
static jobjectArray getAllByNameUsingDns(JNIEnv* env, const char* name, jboolean preferIPv4Stack) { struct addrinfo hints, *addressList = NULL, *addrInfo; jobjectArray addressArray = NULL; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_flags = AI_ADDRCONFIG;モロに、AF_INET指定しとります。Eclairの素のコードではちゃんとAF_UNSPECが指定されている。
これではlibjavacoreを利用するjavaのネットコードからはipv6にアクセスできない。
Eclairのソースをダウンロードして、普通にビルドしたlibjavacoreと入れ替えることにする。
#実際はlibnativehelper.soの入れ替えとなる。
Android 2.1 Eclair build with jdk1.5 build env Ubuntu 10.04 repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair sudo vi /etc/apt/sources.list 以下を追加する deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse sudo apt-get update sudo apt-get install sun-java5-jdk jdk1.6をつかっているのなら、下記のコマンドでjdk1.5へ変更しておく。 sudo update-alternatives --config java sudo update-alternatives --config javacほしいのは下記のスタティックライブラリだが
out/target/product/generic/obj/STATIC_LIBRARIES/libjavacore_intermediates/libjavacore.a
これをつかってビルドされている、shared-libをさがす。
find . -name Android.mk | xargs grep libjavacore find: `./lost+found': Permission denied ./dalvik/libcore/Android.mk:LOCAL_MODULE := libjavacore ./dalvik/libnativehelper/Android.mk:# Any shared/static libs required by libjavacore ./dalvik/libnativehelper/Android.mk: libjavacore \というわけで、libnativehelper.so があやしいw.これを単独でビルドできればして
入れ替えてみることにする。といってもjavaにちゃんとパスが通っていれば、Eclairの
ディレクトリでmakeするだけです。
入れ替え手順。
はじめにrootありき。/systemパーティションのなかを入れ替えるので、/systemパーティションを
Read/Writeでマウントしなおす。それからコピー、再起動という感じ。
adb shell su mount -o remount,rw /dev/block/stl9 /system exit exit adb push libnativehelper.so /sdcard/ adb shell su cd /system/lib cp /sdcard/libnativehelper.so . reboot再起動後にはブラウザでアクセスチェックを行う。pre-installのemaliアプリもサーバアドレスの部分
にIPv6を直接指定してアクセスが可能だった。単純な入れ替えでうまくいったようにみえるが、テストは
ほとんどやってないので、この方法をやって見る人は自己責任でよろしく。
ipv6の環境は、たとえば、feel6等で自宅でトンネル掘ってGlobl V6に接続している人じゃないと
なかなか他にいい方法がない。NTTの光NEXTのv6は外に出れないしね。
次回はkernelビルドと入れ替えまで。
0 コメント:
コメントを投稿