読者です 読者をやめる 読者になる 読者になる

htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

中華版Galaxy Tab 7.7から中華製サービスを追い出す

android hack

忌まわしいことに中華版はBaidu検索をはじめ、KaixinやRenrenといった中華製サービス向けアプリがてんこ盛りです。

さらに酷いことにGoogleアカウント認証機能が備わっていません。*1
なので当然のごとくAndroid Marketなんて使えませんし(そもそも入ってない)
Google MapsやGalleryのPicasa連携機能も利用不可能です。

始めのうちはそれでもapkファイルをPCでググって拾ってきては入れたりなど穏便にやってたのですが、
どうにも我慢ならなくなりやってしまいました。


というわけで簡単に書いていこうと思います。もちろんAndroid SDK導入済みが前提。
最初に申しあげておきますが、はっきり言ってUNIX系は完全に素人です。
所詮は付け焼刃の知識でゴリゴリ書いているだけなので間違い等多々あるかと思いますが、生暖かく読んでくだされば幸いです。
それから、お決まりの文句になりますが、以下の作業はすべて自己責任で行ってください

まず、あらかじめどうにかして必要なapkファイルのパッケージを用意しておきます。*2
今回は下準備として

adb push Gmail.apk /data/local/tmp
adb push GoogleContactsSyncAdapter.apk /data/local/tmp
adb push GoogleServicesFramework.apk /data/local/tmp
adb push Maps.apk /data/local/tmp
adb push Talk.apk /data/local/tmp
adb push Vending.apk /data/local/tmp

としておきます。

root取得に関しては初代Galaxy Tabと同じく root.zip をリカバリモードで読み込ませる方法です。*3
その後、/system を書き込み権限でマウントします。

まずはマウントポイントを把握します。

E:\bin\android-sdk-windows\platform-tools>adb shell mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mmcblk0p9 /system ext4 ro,noatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p10 /data ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc 0 0
/dev/block/mmcblk0p7 /cache ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p1 /efs ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p4 /mnt/.lfs j4fs rw,relatime 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
tmpfs /mnt/sdcard/extStorages tmpfs ro,relatime,mode=755,gid=1000 0 0
/dev/block/vold/179:17 /mnt/sdcard/extStorages/SdCard vfatrw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

結果をざっと見て、

/dev/block/mmcblk0p9 /system ext4 ro,noatime,barrier=1,data=ordered 0 0

というのが目的の行です。

ではこれを書き込み可能にします。

E:\bin\android-sdk-windows\platform-tools>adb shell
$ su
# mount -o rw,remount /dev/block/mmcblk0p9 /system

そしてデータの書き込みを行います、が、 mvコマンドだと Cross-device linkエラーが起こるので、ddコマンドで複製する手段をとります。

# cd /data/local/tmp
# dd if=Gmail.apk of=/system/app/Gmail.apk
# dd if=GoogleContactsSyncAdapter.apk of=/system/app/GoogleContactsSyncAdapter.apk
# dd if=GoogleServicesFramework.apk of=/system/app/GoogleServicesFramework.apk
# dd if=Maps.apk of=/system/app/Maps.apk
# dd if=Talk.apk of=/system/app/Talk.apk
# dd if=Vending.apk of=/system/app/Vending.apk
# rm *.apk

そしてパーミッションを変えます。

# cd /system/app
# chmod 6755 Gmail.apk
# chmod 6755 GoogleContactsSyncAdapter.apk
# chmod 6755 GoogleServicesFramework.apk
# chmod 6755 Maps.apk
# chmod 6755 Talk.apk
# chmod 6755 Vending.apk

Tab補完ができないので苦行です…。Typoにも気をつけねばいけません。
と、さて、これで一通りインストールは終わったはずです。
今度は中華製アプリを消していきます。
Samsungが追加した中華アプリの大半は "P8" ないし "p8" というキーワードがファイル名についているので ls で検索して一つ一つ慎重に消していきます。
その作業が終わったら再起動しましょう。

# reboot

ここまで上手く行っていれば、Android MarketやMaps等が使えるようになっているはずです。


ですがここで終わりではありません。
ホームのクイックサーチバーやブラウザの検索エンジンがBaiduです。これはいただけません。

Android Marketで「Google検索」をダウンロード・インストールします。
そしてAppMonsterなどでapkをぶち抜いてどこかに仮置きしておきます。
その後一旦「Google検索」はアンインストールして、上と同じような手法で /system/app に書き込んでしまいます。
元から入っていた QuickSearch.apk(QuickSearchBox.apk だったかも?)は邪魔なので消してくれていいです。
これも上手くインストールできてしまえば、もう後は再起動して終了です。

お疲れ様でした。


俺の場合は中華アプリを調子に乗って消しすぎたせいか、BrowserのSettingsを開くと例外終了するようになってしまいました(・ω・)
それ以外は特に実害もなく、むしろメリットの方が多いのでよしとしています。
特にブートが高速になったのは大きいです。GalaxyTabのロゴ表示から25秒後には普通に使えます。
それまでは1分くらいかかっていたような?

ちなみに、これらを俺は無謀にもバックアップなしでやらかしてしまいました。なので上記のブラウザの不具合は修復不可能と思われます。
次からは気を付けようと思います…。

*1:[f:id:htsign:20120122070551j:image:medium]

*2:[http://forum.xda-developers.com/showthread.php?t=937752:title]でも入手可能です。素直に付属のcmdファイルを利用しないのは、マウントに失敗するからです。

*3:[http://forum.xda-developers.com/showthread.php?t=1367249:title]