恵安 GF12 または Leader International Impression i7に関する雑記

この記事は少し前に手に入れた恵安 GF12(米国での販売名は Leader International社のImpression i7)に関する雑記です。
筆者は感圧式タッチパネルと液晶の表示(同時発色数の低さとコントラストの悪さ)に辟易としてしまって今は全く弄る気を喪失してしまっています。おまけに情報もあまりなくて…。ですので雑記とは言え誰かの役に立つかも知れない、ということで別ブログから転記編集しておきます。随時加筆中。

まえがき:新しいオモチャ

前から7インチタブレット欲しかったのだが、安かったのとauポイントがあったので買った。

恵安 GF12とあるが、しかしこれ中身は米国のメーカである、 Leader International社のImpression i7という製品。米国のメーカとはいえ、中身はれっきとした中華パッドである。それはいいとして、今更ながらいくら安いからと言ってもう2年近く前の、その時点でも大概古臭いと思われるタブレットをなんで買ったのか。

無謀と知りつつ遊び倒す以外に目的はありません。

GENOが最安値でしたが品切れ中。

概要

とりあえずスペックを貼る…
型番 GF12
無線LAN(WiFi) IEEE 802.11b/g/n
OS Android 2.2
ストレージ 4GB
ディスプレイ7.0インチ 感圧式タッチパネル
ポート miniUSB2.0、MicroSD、USB、3.5mmイヤホン
カメラ フロントカメラ 
備考 日本語マニュアル付属。
パッケージ内容 本体/本体ケース/ACアダプタ/USBケーブル/スタンド/簡易マニュアル
元製品のスペックを見ると、2 point resistor touch screen(2点タッチパネル)と読めるのだが残念ながらシングルタッチでしか動作しない。詐欺だよねコレ…あるいはパッケージングが違うのかもしれない。で、プロセサはinfoTMIC imapx200というプロセッサが使われているらしい(ベンダのページはここ)。
CPUコアはARM1136JF-S。シングルコアだけどVFP(Vector Floating Coprosessor)は積んでいるらしい。Bogomips 1055.12ってほんとかな?(笑)
他にも動画再生支援機能を内蔵している模様だけど詳細がわからない。マルチメディア再生に特化したアプリケーションプロセッサ、と銘打たれている。
Feature:
1) ARM-11 core at 1GHz
2) FULL-HD (1080P) video decoder with varied video formats 
3) H.263/H.264/MPEG4 encoder(up to SXGA) 
4) 2D/3D hardware engine
5) Memory Controller, supporting DDR/Mobile DDR/DDR2 
6) LCD/i80/TV controller 
7) USB OTG/USB2.0 HOST 
GPUは、調べるとVivante社のGC600 Graphics Engine ということらしいが、製造元のサイトはあるがもうこのチップの説明はない…。ここに少し特徴が書かれている。 プロセッサの詳細はおいおい調べるとして、割と多くの中華パッドに使われているらしい。筋はさほど悪くなさそうなのだが、このモッサリ感は一体何なんだろ。

問題いくつか

実際に使い始めてみるといくつか気になるところが出てきた。
  1. Googleの認証を取っていない上に通信事業者がChina Telecomとなって、Google Playマーケットその他に制限が生まれる。他のマーケットアプリは入っているにはいるのだが、Playマーケットに制限があるために、取得できないアプリがある
  2. (設定有効にしたにも関わらず)WiFi位置情報が取れない
  3. 文字フォントが美しくない。
  4. GPUを使い切っていないのか画面描画が遅い
  5. また色解像度は16bppしかない。ぼんやりとした色になっているのだがこれはTFTディスプレイ自体に問題があるかも。
  6. 総じて性能が低い。スマフォとして使っているIS06と比べるとbogomips値が参考とは言えども、こちらのほうが大きいのだ。これはどこかで足かせを食らっているとしか思えない。
    QuadrantStandardで性能を測ったら300程度。IS06だと1000程度。ヌルサク感は圧倒的にIS06(注意:チューニングはしてあるものの)が上。プロセッサがローエンドとはいえ、酷すぎる。ドライバの出来が悪いのか。
  7. CPUの周波数がモニタできないし設定できない。これはプロセッサのせいだと言われているが本当か確かめてない。
  8. タッチパネル反応がダルい
  9. スリープ状態からの復帰が遅い。てか電源切れてんじゃねかこれ…。
  10. リカバリブートがまともじゃない。おまけに「内蔵ストレージ初期化」のはずが、挿入した外部SDカードも消される。
  11. 起動時にmicroSDカードを読めなくてコケることがある。
  12. microSDカードマウント時に音が出る、その音の種類が選べない模様。他の音と比べてデカイ。あまりセンスの良くない効果音でミュートしてないと起動時に毎度出る。要らん…
まぁ、諦めの境地で…

ベンチマークをやってみた

AnTuTu Benchmark はもうAndroid 2.2では動かないみたいなので、Quadrant Benchmark Standardを使う。IS06と比べる。
ベンチマーク結果IS06: Total 1012 / CPU 2178 / Mem 1017 / I/O 669 / 2D 560 /3D 577 Impression 7: Total 267 / CPU 593 / Mem 125 / I/O 195 / 2D 99 / 3D 322
お、おそい、遅すぎる…。何とかならんのか…と思いつつ(多分無理)


まずはrootを取る

rootはUniversal Androot(英文 DLリンクあり)であっさり取れる。"Go Root"をクリックしてやればあとは楽勝(注:失敗すると文鎮化するかもしれないのであくまでも自己責任で)。失敗する場合は2−3回実行してみる。 何やら最近はこういうPDFも出回っているらしく。ってただの雑誌の内容ですが… さて、これで好き放題できる。

bashを入れる

こちらを参考に。ファイル名自動補完とかいろいろ。コレなしでは生きられない。 Androidのシェルをbashに変更: 電子ガジェットが好き

問題:リカバリーブートが動かない⇒使えない

無理矢理再起動すると、何やら内部ストレージを初期化して再起動する(英文)かのようなメッセージが出てなかなか再起動しない。諦めてリセットすると… microSDスロットに入れたmicroSDHCカードがフォーマットされていた 最悪です。
「内部ストレージを初期化します」
と、マニュアルには書かれているが是非表示をせめてこう訂正して欲しい
「内部ストレージ初期化します」
リカバリブートは通常のリカバリではないという事でした。やっちゃいけません。

問題:起動時の外部メモリカードのマウントに失敗する⇒解決策なし

SDカードの起動時マウントにしょっちゅう失敗する。これは古いデバイスにあたらしいmicroSDHC(16GB)を指しているからなのかもしれないが一応仕様の範囲なんだが。古い4GBのmicroSDだとこういうことはない。手元のmicroSDHC(Transcend製)が外れだったという事かもしれない。 なおマウントに失敗したことに気づかずに使い続けると変なところ(マウントポイント /sdcard1 とか /mnt/cdcard/sdcard1) にサブディレクトリファイルが作られてしまうので要注意。
何が注意なのかというと正常にマウントされた時に、それらのディレクトリやファイルが見えなくなってしまう上にストレージを消費してしまうから。ご注意。

HackするならWireless ADBで

せっかくRootがとれているのでADB Konnectを試す。USB経由のadb接続だと、/system配下にあるファイルなどをadb pull取得するときにエラーが出て中断されてしまうのだ。
無線LAN付きのノートパソコン、というか宅内に無線LAN環境があるならコレを使えばいい。デスクトップPCでも同じネットワークにGF12がつながれているなら使えるはず。

以下、USB接続もしているので2つデバイスが見えるが同じもの。IPアドレスはうちの自宅の場合。ADB Konnectの画面でIPアドレスが表示されているのでそれを接続先に指定する。

$ adb connect 192.168.0.4:5555
connected to 192.168.0.4:5555
$ adb devices
List of devices attached
InfoTMIC-MID    offline
192.168.0.4:5555        device

あとは上記デバイスを指定してadbなどすればいい。

対応:さよならChina Telecom

この作業はややこしくLinuxの操作経験がないとちょっとむずかしいので注意。間違うと文鎮ができます。
framework.jarをいじらなくても、後に述べるbuild.propのfingerprintを変えるだけでいけるような気がする(試してません)。
端末の通信事業者設定が、あろうことかChina Telecomになっている。まずはコレを直して、適当な端末に偽装しないといけない。まずはWiFi経由でadb pullしてframework.jarを取ってくる。

$ adb -s 192.168.0.4:5555  pull /system/framework/framework.jar

261 KB/s (2735878 bytes in 10.227s)
さて、framework.jarをばらしてみよう。
$java -jar baksmali-1.4.2.jar framework.jar -o classout

なんかできた!
$ cd classout/android/telephony
$ grep China *
TelephonyManager.smali:    const-string v0, "China Telecom"
TelephonyManager.smali:    const-string v2, "China Telecom"

適当な内容に偽装すればよさそうなのだけど、どうするのか。  似たようなinfoTMIC-MIDの中華パッドをいじっているフォーラムを見る。build.propも当然いじるのだが。

http://www.techknow.me/forum/index.php?topic=770.0 http://www.techknow.me/forum/index.php?topic=855.msg5723#msg5723
1) Download apktool from here  (http://code.google.com/p/android-apktool/): android-apktool - A tool  for reengineering Android apk files - Google Project Hosting I used the  Windows version, so there are two files that you need to download. Load  both of those into a directory.

2) Grab your framework.jar file from you tablet. This is located in /system/framework

3) Copy this file to the same folder that you put the apktool

4) Open a command prompt and run apktool with this command: apktool d framework.jar

5)  This creates a folder called framework.jar.out that contains the smali  files. Open this folder and go to smali/android/telephony

6) Open TelephonyManger.smali with a good text editor. On Windows, I use Notepad++.
7)  Look for the string of China Telecom. I just replaced this with China  Telecom (New). In my case, there are two instances of it.

8) Look for the string of zh. I just replaced this with us. In my case, there are two instances of it.

9) Look for the string of 46003. I just replaced this with 310260. In my case, there are two instances of it.

10) When you are done, save the file.

11) What I then did was renamed the framework.jar file to framework-old.jar

12)  Now from your command prompt run apktool b framework.jar.out This will  recompile a new jar file for you. The file will be placed in  framework.jar.out/dist.

13) Now open this file with a good zip editor (IZarc, 7zip, etc). There will be a classes.dex file.

14)  If you open your original one, you will see there is also a META-INF  folder and preloaded-classes file. I copied these out of the original  and into the new file.

15) Copy the new framework.jar file on your tablet and replace the existing one.

16) Restart!

上記フォーラムからNexus Sに見せかけるbuild.prop内容。
ro.build.id=GRJ22
ro.build.display.id=GRJ22
ro.product.model=Nexus S
ro.product.brand=samsung
ro.product.name=soju
ro.product.device=crespo
ro.build.description=soju-user 2.3.4 GRJ22 121341 release-keys
ro.build.fingerprint=google/soju/crespo:2.3.4/GRJ22/121341:user/release-keys
実際には ro.build.fingerprint だけを偽装すればOKらしい。Androidのバージョンが2.3.4になっているがまぁ、気にしない。 それから、TelephonyManager.smaliに対する変更。 まず、通信事業者のコードはここから。 KDDIだと CDMAは44054、LTEは44050になる。CDMAにしておく。日中合作。patchを載せときます。参考に。

$ diff -ur classout.orig/android/telephony/TelephonyManager.smali classout/android/telephony/TelephonyManager.smali

--- classout.orig/android/telephony/TelephonyManager.smali      2013-04-24 00:35:50.000000000 +0900
+++ classout/android/telephony/TelephonyManager.smali   2013-04-24 01:09:56.000000000 +0900
@@ -153,7 +153,7 @@
     invoke-direct {p0}, Ljava/lang/Object;-><init>()V

     .line 64
-    const-string v0, "46003"
+    const-string v0, "44054"

     iput-object v0, p0, Landroid/telephony/TelephonyManager;->mccmnc:Ljava/lang/String;

@@ -163,12 +163,12 @@
     iput-object v0, p0, Landroid/telephony/TelephonyManager;->simNumPrefix:Ljava/lang/String;

     .line 66
-    const-string v0, "zh"
+    const-string v0, "ja"

     iput-object v0, p0, Landroid/telephony/TelephonyManager;->country:Ljava/lang/String;

     .line 67
-    const-string v0, "China Telecom"
+    const-string v0, "KDDI"

     iput-object v0, p0, Landroid/telephony/TelephonyManager;->SPName:Ljava/lang/String;

@@ -185,7 +185,7 @@
     invoke-direct {p0}, Ljava/lang/Object;-><init>()V

     .line 64
-    const-string v2, "46003"
+    const-string v2, "44054"

     iput-object v2, p0, Landroid/telephony/TelephonyManager;->mccmnc:Ljava/lang/String;

@@ -195,12 +195,12 @@
     iput-object v2, p0, Landroid/telephony/TelephonyManager;->simNumPrefix:Ljava/lang/String;

     .line 66
-    const-string v2, "zh"
+    const-string v2, "ja"

     iput-object v2, p0, Landroid/telephony/TelephonyManager;->country:Ljava/lang/String;

     .line 67
-    const-string v2, "China Telecom"
+    const-string v2, "KDDI"

     iput-object v2, p0, Landroid/telephony/TelephonyManager;->SPName:Ljava/lang/String;

で、パッチあてたframework.jarを固め直す。
$ ./apktool d framework.jar
I: Baksmaling...
I: Copying assets and libs...

$cd ../../../../
$ cd framework.jar.out/smali/android/telephony/
$ ./apktool b framework.jar.out
I: Checking whether sources has changed...
I: Smaling...
W: Could not find resources
I: Building apk file...

framework.jar.out/dist に、新しい framework.jarができているのでそれからclasses.dexを取り出す。
オリジナルのframework.jarを複製。アーカイブマネージャで開いて、中のclasses.dexを新しいものと入れ替える。
adb push でframework.jarをGF-12のsdcardにおく。
$  adb -s 192.168.0.4:5555 push framework.jar /mnt/sdcard/sdcard1/temp/
448 KB/s (2856467 bytes in 6.221s)
$  adb -s 192.168.0.4:5555 shell

/system/frameworkに書き戻すので、remountしないといけない。徐々に危険領域に。
$ su
# mount
rootfs / rootfs rw 0 0
tmpfs /dev tmpfs rw,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
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock4 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock6 /mnt/emu yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/vold/7:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp936,iocharset=cp936,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/7:0 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp936,iocharset=cp936,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/block/vold/179:9 /mnt/sdcard/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp936,iocharset=cp936,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:9 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp936,iocharset=cp936,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/sdcard1/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0

/systemは
/dev/block/mtdblock3 /system yaffs2 ro,relatime 0 0

なので、
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
# cd system/framework
# cp framework.jar framework.jar.orig

# cp /mnt/sdcard/sdcard1/temp/framework.jar .

あー、やってしまったぞいいのかオレw

# ls -l framework.*
-rwxrwxr-x root root 2856467 2013-04-24 01:43 framework.jar
-rw-r--r-- root root 2735878 2013-04-24 01:43 framework.jar.orig

パーミション一応あわせておく。
# chmod 644 framework.jar
# ls -l framework.*
-rw-r--r-- root root 2856467 2013-04-24 01:43 framework.jar
-rw-r--r-- root root 2735878 2013-04-24 01:43 framework.jar.orig

再起動。
・・・・
・・・・・

・・・・・・・
ブートアニメーションから進まない…wwwww
・・・・・・・
電源切って再起動。
・・・・・
動いた…よかった。死ぬかと思った。

つづいて、build propを書き換える…念の為もとの…から少し変えたけどまだbuild情報関係を変えていないbuild.propをここに貼っておく。

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=FRF85B
ro.build.display.id=FRF85B
ro.build.version.incremental=eng.root.20111019.082100
ro.build.version.sdk=8
ro.build.version.codename=REL
ro.build.version.release=2.2
ro.build.date=Wed Oct 19 08:23:03 CST 2011
ro.build.date.utc=1318983783
ro.build.type=user
ro.build.user=root
ro.build.host=ubuntu
ro.build.tags=test-keys
ro.product.model=i7
ro.product.brand=generic
ro.product.name=i7
ro.product.device=i7
ro.product.board=
ro.product.cpu.abi=armeabi
ro.product.manufacturer=unknown
ro.product.locale.language=ja
ro.product.locale.region=
ro.wifi.channels=
ro.board.platform=imap210
# ro.build.product is obsolete; use ro.product.device
ro.build.product=i7
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=i7-user 2.2 FRF85B eng.root.20111019.082100 test-keys
ro.build.fingerprint=generic/i7/i7/:2.2/FRF85B/eng.root.20111019.082100:user/test-keys
# end build properties

#
# ADDITIONAL_BUILD_PROPERTIES
#
ro.versioncode=20
ro.debuggable=0
persist.service.adb.enable=0
ro.screenrotation.direction=0
persist.screenorientation=0
persist.app2sd.enabled=0
persist.keyguard.pattern.spec=1
persist.shutdown.pattern=0
persist.policy.autoOTG=0
persist.sys.language=en
persist.sys.country=US
ro.suspend.unloadWifiDriver=false
persist.launcher.def.desktop=1
persist.launcher.def.animate=3
persist.default.wallpapers=0
persist.default.keycharmap=qwerty
persist.hdmi.support.mode=1
ro.sensor.switch.enable=0
persist.sys.timezone=America/New_York
persist.phone.enabled=0
ro.board.isTablet=true
ro.board.isRScreen=true
persist.sys.gps.enable=1
ro.opengles.version=131972
ro.config.notification_sound=OnTheHunt.ogg
ro.config.alarm_alert=Alarm_Classic.ogg
media.stagefright.enable-player=true
media.stagefright.enable-meta=true
media.stagefright.enable-scan=true
media.stagefright.enable-http=true
ro.setupwizard.mode=DISABLED
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
ro.product.locale.region=JP

あとになって見つけたのだけど、ここにImpression i7らしきもののSpecが掲載されている。 Superpad i7と非常に似ているらしい。バックアップをなくしてしまい、オリジナルに戻したい時は参考にすればいいと思う。 さて、パッチを貼っておく。

$ diff -u 130415-2236/build.prop build.prop 
--- 130415-2236/build.prop 2013-04-15 22:36:49.000000000 +0900
+++ build.prop 2013-05-14 01:03:15.000000000 +0900
@@ -1,21 +1,21 @@
 # begin build properties
 # autogenerated by buildinfo.sh
-ro.build.id=FRF85B
-ro.build.display.id=FRF85B
+ro.build.id=GRJ22
+ro.build.display.id=GRJ22
 ro.build.version.incremental=eng.root.20111019.082100
 ro.build.version.sdk=8
 ro.build.version.codename=REL
-ro.build.version.release=2.2
+ro.build.version.release=2.3.4
 ro.build.date=Wed Oct 19 08:23:03 CST 2011
 ro.build.date.utc=1318983783
 ro.build.type=user
 ro.build.user=root
 ro.build.host=ubuntu
-ro.build.tags=test-keys
-ro.product.model=i7
-ro.product.brand=generic
-ro.product.name=i7
-ro.product.device=i7
+ro.build.tags=release-keys
+ro.product.model=Nexus S
+ro.product.brand=samsung
+ro.product.name=soju
+ro.product.device=crespo
 ro.product.board=
 ro.product.cpu.abi=armeabi
 ro.product.manufacturer=unknown
@@ -24,10 +24,10 @@
 ro.wifi.channels=
 ro.board.platform=imap210
 # ro.build.product is obsolete; use ro.product.device
-ro.build.product=i7
+ro.build.product=GRJ22
 # Do not try to parse ro.build.description or .fingerprint
-ro.build.description=i7-user 2.2 FRF85B eng.root.20111019.082100 test-keys
-ro.build.fingerprint=generic/i7/i7/:2.2/FRF85B/eng.root.20111019.082100:user/test-keys
+ro.build.description=soju-user 2.3.4 GRJ22 eng.root.20111019.082100 release-keys
+ro.build.fingerprint=generic/soju/crespo:2.3.4/GRJ22/eng.root.20111019.082100:user/release-keys
 # end build properties

結局後でauのSMT-i9100に書き換えた。これでいいのかどうかはわからない。

$ diff -u 130415-2236/build.prop SMT-i9100/build.prop 
--- 130415-2236/build.prop      2013-04-15 22:36:49.000000000 +0900
+++ SMT-i9100/build.prop        2013-05-14 01:11:09.000000000 +0900
@@ -11,23 +11,19 @@
 ro.build.type=user
 ro.build.user=root
 ro.build.host=ubuntu
-ro.build.tags=test-keys
-ro.product.model=i7
-ro.product.brand=generic
-ro.product.name=i7
-ro.product.device=i7
-ro.product.board=
+ro.product.model=SMT-I9100
+ro.product.brand=samsung
+ro.product.name=SMT-I9100
+ro.product.device=SMT-I9100
+ro.product.board=SMT-I9100
 ro.product.cpu.abi=armeabi
-ro.product.manufacturer=unknown
+ro.product.manufacturer=samsung
 ro.product.locale.language=ja
 ro.product.locale.region=
 ro.wifi.channels=
 ro.board.platform=imap210
 # ro.build.product is obsolete; use ro.product.device
-ro.build.product=i7
-# Do not try to parse ro.build.description or .fingerprint
-ro.build.description=i7-user 2.2 FRF85B eng.root.20111019.082100 test-keys
-ro.build.fingerprint=generic/i7/i7/:2.2/FRF85B/eng.root.20111019.082100:user/test-keys
+ro.build.product=SMT-I9100
 # end build properties

 #
@@ -40,7 +36,7 @@
 persist.screenorientation=0
 persist.app2sd.enabled=0
 persist.keyguard.pattern.spec=1
-persist.shutdown.pattern=0
+persist.shutdown.pattern=1
 persist.policy.autoOTG=0
 persist.sys.language=en
 persist.sys.country=US
@@ -66,5 +62,11 @@
 ro.setupwizard.mode=DISABLED
 net.bt.name=Android
 dalvik.vm.stack-trace-file=/data/anr/traces.txt
-ro.product.locale.region=JP
-ro.product.locale.region=JP
+ro.product.locale.region=
+ro.build.description=SMT-I9100:user 2.2 SMT-I9100 SMT-I9100 release-keys
+ro.build.fingerprint=google/SMT-I9100/SMT-I9100/:2.2/FRF85B/SMT-I9100:user/release-keys
+ro.build.tags=release-keys
+=
+ro.sf.lcd_density=144
+debug.sf.hw=1

最後の方は手探りで書き換えている。

あ、マーケットのAPKいれないと…(続く)

ところでまだ結構売られてますね…。

0 件のコメント:

コメントを投稿