2012年9月16日日曜日

iPhone 4s Ultimate Edition 終極版 画像等。

とりあえずつかるようになったので画像など。

Leica M8 with Noctilux 50mm F1.0@F1.0
Launcher Proいれてみました。手前のがgoophoneモドキです。標準のiOSパクリのホームアプリはけっこうもっさりでしたが、Launcher Proだと使えるレスポンスになりますね。一応解像度はRetinaとおなじだけあって解像度が高いので、横5つアイコン並べても文字が潰れたりしません。

白いバンパーがころがってますが、微妙に大きさがあわなくて付けるのを諦めました。。電源ボタンがわずかにパチモンのほうがでっぱているので、常時おした状態になっちゃいます。それとも買うバンパーまちがえたかな?4S専用とかってありましたっけ。。

ま、ケースなんかいらねぇか。

こういう端末のわからないところは、いったいどこのだれがファームをつくってんの?ということなんですが、本家?のgoophoneとかはrootingキットとかあるみたいだから、こいつはgoophoneじゃないんでしょうね。でもハード構成はかなりgoophoneに似てるしもしかしたら名前が違うだけかもしれないですね。さずがにぜんぜんちがうROM焼いて文鎮にするのは嫌なので、これからROM入れるにしても調査してからですね。ちなみに、goophoneは最近の出荷では4.0.3が導入されてるらしく、そのあたりのROMがこれに当てられるか調査中です。

そういえばgoophoneの2.3.xのファームと4.0.xのファームのbuild.propを掲載しているサイトがあったと思ったけど、URL忘れました。そのうちみつけて比較してみます。とりあえず、こいつのbuild.propはこんな感じ。

# cat build.prop
cat build.prop
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=GRK39F
ro.build.display.id=ALPS.GB2.MP.V2.10
ro.build.version.incremental=eng.ser4.1344579181
ro.custom.build.version=1344579181
ro.build.version.sdk=10
ro.build.version.codename=REL
ro.build.version.release=2.3.6
ro.build.date=Fri Aug 10 14:17:54 CST 2012
ro.build.date.utc=1344579474
ro.build.type=user
ro.build.user=ser4
ro.build.host=ser4-System-Product-Name
ro.build.tags=test-keys
ro.product.model=4S
ro.product.brand=iPhone
ro.product.name=htt75_emmc_gb2
ro.product.device=htt75_emmc_gb2
ro.product.chivinproduct=4S
ro.product.chivinversion=0502E010_20120810
ro.product.customversion=0502E010_20120810
ro.product.board=htt75_emmc_gb2
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=alps
ro.product.locale.language=zh
ro.product.locale.region=CN
ro.wifi.channels=
ro.board.platform=
# ro.build.product is obsolete; use ro.product.device
ro.build.product=htt75_emmc_gb2
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=htt75_emmc_gb2-user 2.3.6 GRK39F eng.ser4.1344579181 test-keys
ro.build.fingerprint=iPhone/htt75_emmc_gb2/htt75_emmc_gb2:2.3.6/GRK39F/1344579181:user/test-keys
ro.build.flavor=
# end build properties

# begin mediatek build properties
ro.mediatek.version.release=ALPS.GB2.MP.V2.10
ro.mediatek.platform=MT6575
ro.mediatek.chip_ver=S01
ro.mediatek.version.branch=ALPS.GB2.MP
# end mediatek build properties
#
# system.prop for generic sdk
#

rild.libpath=/system/lib/mtk-ril.so
rild.libargs=-d /dev/ttyC0


# MTK, Infinity, 20090720 {
wifi.interface=wlan0
# MTK, Infinity, 20090720 }

# MTK, mtk03034, 20101210 {
ro.mediatek.wlan.wsc=1
# MTK, mtk03034 20101210}
# MTK, mtk03034, 20110318 {
ro.mediatek.wlan.p2p=1
# MTK, mtk03034 20110318}

# MTK, mtk03034, 20101213 {
mediatek.wlan.ctia=0
# MTK, mtk03034 20101213}


# MTK, TeChien {
ro.media.enc.hprof.file.format=3gp
ro.media.enc.hprof.codec.vid=m4v
ro.media.enc.hprof.vid.width=720
ro.media.enc.hprof.vid.height=480
ro.media.enc.hprof.vid.fps=30
ro.media.enc.hprof.vid.bps=3400000
ro.media.enc.hprof.codec.aud=amrnb
ro.media.enc.hprof.aud.bps=12200
ro.media.enc.hprof.aud.ch=1
ro.media.enc.hprof.aud.hz=8000

ro.media.enc.mprof.file.format=3gp
ro.media.enc.mprof.codec.vid=m4v
ro.media.enc.mprof.vid.width=352
ro.media.enc.mprof.vid.height=288
ro.media.enc.mprof.vid.fps=30
ro.media.enc.mprof.vid.bps=990000
ro.media.enc.mprof.codec.aud=amrnb
ro.media.enc.mprof.aud.bps=12200
ro.media.enc.mprof.aud.ch=1
ro.media.enc.mprof.aud.hz=8000

ro.media.enc.lprof.file.format=3gp
ro.media.enc.lprof.codec.vid=h263
ro.media.enc.lprof.vid.width=176
ro.media.enc.lprof.vid.height=144
ro.media.enc.lprof.vid.fps=30
ro.media.enc.lprof.vid.bps=384000
ro.media.enc.lprof.codec.aud=amrnb
ro.media.enc.lprof.aud.bps=12200
ro.media.enc.lprof.aud.ch=1
ro.media.enc.lprof.aud.hz=8000
# MTK, TeChien }

#
wifi.tethering.interface=ap0
#

ro.opengles.version=131072

#HTT liujihui {
ro.setupwizard.mode=DISABLED
ro.com.google.locationfeatures=1
ro.com.google.networklocation=1
persist.sys.timezone=Asia/Shanghai
#persist.sys.timezone=Europe/London
#HTT liujihui }

#
# ADDITIONAL_BUILD_PROPERTIES
#
ro.sf.hwrotation=0
ril.current.share_modem=1
launcher2.allappsgrid=3d_20
curlockscreen=1
ro.mediatek.gemini_support=false
ro.mediatek.drm_support=true
persist.radio.fd.counter=20
persist.radio.fd.off.counter=20
ro.config.notification_sound=notification15.ogg
ro.config.alarm_alert=alarm14.ogg
ro.config.ringtone=ringtone14.ogg
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
#


以上。

2012年9月14日金曜日

iPhone 4s Ultimate Edition 終極版をDTIのServersMan SIMで使えるようにする

中華系のスマホやPadはb-mobileやDTI ServersMan SIM等のMVNOのSIMを認識しないという問題が あるらしく、こいつもその例外ではなかったです。ServersMan SIMをカットしていれてみたのは いいのですが、No SIM状態→アンテナピクト立たず。この状態だと3G的にも通信ができません。 #アンテナピクトが立たない状態でも通信できるNexus S-JB(4.1)とは状況も違うようです。 Googleでいろいろ調べていると同様の現象を経験されている方が多く見られました。そういうわけで 解決法も確率されているようです。具体的にはframework.jarに含まれるクラスである

GsmServiceStateTracker.java
を改変します。改変するメソッドは

regCodeToServiceState

です。ソースがあれば、そこからビルドでもいいのでしょうけど、コイツはそんなのは期待できません。 bksmaliをつかってデコンパイルし、内容を改変して、コンパイルしなおして、置き換えるという感じで やるしかないようです。

1.frameworkディレクトリをバックアップしておく

adb pull /system/framework ./framework

2.以下の手順でframework.odexを解体する

※参考にさせていただいたサイト
http://domas-tadamemo.blogspot.jp/2012/03/htc-chacharootdeodexexecutebat.html

はじめにこちらのサイトでzipでかためられているパッチを落としておく。

http://bl.oov.ch/2012/01/android-sim.html?showComment=1330930943649

展開すると現れるexecute.batを参考にさせていただいて、execute.batから抽出したコマンドを 調整したものが下記。api-levelに注意しないとエラーでます。

mkdir temp
adb pull /system/framework/framework.jar temp\framework.jar
adb pull /system/framework/framework.odex temp\framework.odex
adb pull /system/framework temp\framework
java -Xmx512m -jar baksmali-1.3.2.jar --api-level 10 -c:core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:services.jar:core-junit.jar -d temp\framework -o temp\lv10 -x temp\framework.odex
cscript //Nologo data-only-sim-smali-fixer.wsf temp 10 0 1

#cscriptで変更しきれてない部分を追加で修正する。(あとで説明)
#修正したファイルをGsmServiceStateTracker.smaliと入れ替える
cd temp
cp data-only-sim-fix.smali ./lv10/com/android/internal/telephony/gsm/GsmServiceStateTracker.smali

java -Xmx512m -jar smali-1.3.2.jar --api-level 10 -o temp\classes.dex temp\lv10
cd temp
..\7za u -tzip framework.jar classes.dex
cd ..

bksmaliで展開して、cscriptのスクリプトを走らせて内容を変更した後に足りない部分をGsmServiceStateTracker.smaliを開いて 編集、method regCodeToServiceStateの中身を書き換える。
cscriptで置換している部分は下記のようにGsmServiceStateTracker.smaliを直接編集しても良い。
.method private regCodeToServiceState(I)I
    .registers 6
    .parameter "code"

    .prologue
    const/4 v3, 0x1

    .line 1729
    packed-switch p1, :pswitch_data_24

    .line 1746
    :pswitch_4
    const-string v0, "GSM"

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;->()V

    const-string/jumbo v2, "unexpected service state "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    move v0, v3

    .line 1747
    :goto_1e
    return v0

    :pswitch_1f
    move v0, v3

    .line 1738
    goto :goto_1e

    .line 1743
    :pswitch_21
    const/4 v0, 0x0

    goto :goto_1e

    .line 1729
    nop

    :pswitch_data_24
    .packed-switch 0x0
        :pswitch_21 ; case 0
        :pswitch_21 ; case 1
        :pswitch_21 ; case 2
        :pswitch_21 ; case 3
        :pswitch_1f
        :pswitch_21 ; case 5
        :pswitch_4
        :pswitch_4
        :pswitch_4
        :pswitch_4
        :pswitch_1f
        :pswitch_4
        :pswitch_21 ; case 12
        :pswitch_21 ; case 13
        :pswitch_1f
    .end packed-switch
.end method
dalvikのpacked-switchの戻り値を調整するだけです。javaのコードでいうところの
return ServiceState.STATE_IN_SERVICE;
を返す場所を調整します。
code = 0, 1, 2, 3, 5, 12, 13
の場合にSTATE_IN_SERVICEを返します。 全体として、やってることは、framework.jar/framework.odexを本体から抜き出して、あと、farmework全体も抜いておく。 baksmaliにそれを食わせて、解体。GsmServiceStateTracker.smaliを編集して、もう一度コンパイル。 できたclasses.dexを、もともとのframework.jarに入れる。 という感じ。ここまできたらあとは実機に配置していく。その際少し注意するところがある。
※dexopt-wrapperでつくったodexは認識されないぽい。 ので、実際にclasses.jarのはいったframework.jarを配置して実機でframework.dexを生成する方法をとる。

1.上記の作業でtempにできたframework.jarを実機に転送
cd temp
adb push framework.jar /data/local/tmp
2.framework.jarをいれかえて、framework.odexを消してリブート。framework.dexを生成させる systemをr/wでリマウントして、まず実機内部でバックアップしておく。
adb remount
adb shell
cd /system/framework
cp framework.jar framework.jar.orig
cp framework.odex framework.odex.orig
※本来はframework.jarをシステムが掴んでない状態で作業するのがいいと思う。clockworkで起動していじる領域だけマウントしてやるとか。
※自分は面倒なんで!直で書き換えます。みなさんはくれぐれも真似しないように。
※リスク高い作業なんで、やるひとは自己責任でよろしく。
busybox cp /data/local/tmp/framework.jar ./
rm framework.odex
reboot
3.起動したら、/data/dalvik-cacheにdexがあるのを確認し、/system/frameworkに「ムーブ」する 
※完全には起動しないです、アップルマークで止まるはず。しかしadb remountはできるし、コマンドも打てる状態。
※このあたり非常に危険w。
adb remount
adb shell
cd /data/dalvik-cache
busybox mv system@framework@framework.jar@classes.dex /system/framework/framework.odex
4.framework.odexに署名をコピーする。busyboxのddでやること。
cd /system/framework
busybox dd if=./framework.odex.orig of=./framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
ここまでやると勝手に起動する。一旦起動するまで待って。framework.jarをもとに戻す 5.framework.jarを戻す
busybox cp framework.jar.orig framework.jar
reboot
これで完了。アンテナピクトも立つはず。通知バーにGマークがでてデータ通信が開始されればOK。 ついでにフォントも入れとこう Linaroのフォントを拝借。 http://www.blogfromamerica.com/wp/?p=2897 こちらのページを参考にさせていただきました。 ダウンロードはこれ

http://dl.dropbox.com/u/64994762/wp_images/AndroidJapaneseFont/DroidSansJapanese.ttf
adb remount
adb push DroidSansJapanese.ttf /system/fonts/
adb reboot
以上

iPhoen 4s Ultimate Edition 終極版 買ってみた

DTIのServersMan SIMを挿して使う端末として、新たに一台買ってみた。 スペックとしては1GのCPUと512MBのメモリなんでたいしたことないうえに、iOSを模倣した OSのためウィジェットも置けそうにないし、微妙な端末なんですが、ネタとしては面白いかと。 この手の端末で有名なのはGoophone Gooapple Sophone 等がありますけど、こいつはどれにも 該当しないという素晴らしさ。goophone作る過程で余ったパーツ横流しして作ったとか? パチもんのパチもんという匂いがプンプンしてきますw。

このあたりのiPhone cloneだとgoophone Y5とかgooapple V5とかsophone v75とかが有名かと思われますが 今回手に入れたのはiPhone 4s Ultimate Edition 終極版wです。まじパッケージとかヤバイです、普通に iPhone 4sの取扱説明書とか入ってます。Samsungが特許侵害で争ってますけど、これに比べれば白ですw。 極めつけは、Androidのホームアプリを可能な限りiOS5に合わせたところでしょうかね。アプリ削除の ☓ボタンがでて、ゆらゆら揺れるアニメーションとかまで再現されてます。普通に人に見せてもほとんど 気が付かれません。つか、ここまでするのはけっこう開発コストも結構かかってんじゃないですかね? まぁ、それもどっかのパクリなのかもしれませんが。。。

cpuinfoとmeminfoはこんな感じ。
adb shell
# cat /proc/cpuinfo
cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)
BogoMIPS        : 1998.84
Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0xc09
CPU revision    : 10

Hardware        : MT6575
Revision        : 65fb8a00
Serial          : 0000000000000000
# cat /proc/meminfo
cat /proc/meminfo
MemTotal:         478384 kB
MemFree:           14452 kB
Buffers:            7888 kB
Cached:           142840 kB
SwapCached:            0 kB
Active:           166156 kB
Inactive:         195612 kB
Active(anon):     104612 kB
Inactive(anon):   133864 kB
Active(file):      61544 kB
Inactive(file):    61748 kB
Unevictable:        1016 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         478384 kB
LowFree:           14452 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        212068 kB
Mapped:            87484 kB
Shmem:             26420 kB
Slab:              14048 kB
SReclaimable:       4184 kB
SUnreclaim:         9864 kB
KernelStack:        4176 kB
PageTables:        14936 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      239192 kB
Committed_AS:    2196780 kB
VmallocTotal:     294912 kB
VmallocUsed:      142084 kB
VmallocChunk:     104452 kB
#
はじめに言っておくと、b-mobile / DTI 等のSIMはストックのままだと認識はするものの データ通信は行われない。これはいずれ手をいれるとして(先人たちが頑張ったのを参考に)、 GooglePlayあたりはいれておきたいところ。 おもむろにadb shellすると。。なんと!始めっからroot!。

cat default.prop
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=0
ro.allow.mock.location=0
persist.mtk.aee.aed=on
ro.debuggable=0
persist.service.adb.enable=1

secure=0っすねー。パチもんの王道ですなw。だったら話は早いんで。/systemをいじり放題ですね。 GooglePlayをインストールする
こっからファイルをダウンロード

http://nursing-now.blogspot.jp/2012/06/how-to-fix-or-add-google-play-to-your.html

インストラクションも書いてあるけど、iPhone 4s Ultimate Edition 終局版の場合は GooglePartnerSetup.apkとVending.apkが足りないだけみたいなので、それだけ追加 パーミションも変えておく。/systemはrwでマウントしなおしておく。

adb remount
adb push GooglePartnerSetup.apk /system/app
adb push Vending.apk /system/app

adb shell
cd /system/apk
chmod 644 GooglePartnerSetup.ak
chmod 644 Vending.pak

ここで、設定からリセットをかけて端末を再起動します。再起動したら中国語にもどってるので 言語を再設定して。GooglePlayがHOMEにあると思うので、起動してみます。Googleアカウントを設定しろ のダイアログにしたがって設定をおわれば使えるようになってるはずです。 MoreLocale 2あたりをインストールして日本語にしておくと後が楽かも。で、一応GooglePlayも一応 新しくしておきましょう。下記のURLからverの新しいのをおとしてきて/sdcardにpushしてinstall すればOKです。

http://www.androidpolice.com/2012/03/16/download-google-play-store-formerly-android-market-v3-5-15-apk-with-a-brand-new-my-apps-interface/

好きなアプリ入れて見ましょう。あと、もとからrootなんですけど、suとかsuperuser.apkは入ってないので 入れる場合はマーケットからでOKです