中国のebookフォーマット umd


ronzi A3にプレインストールされているiReaderではどういうフォーマットがサポートされているか調べてみた。

iReader公式にはちょっとバージョンが古いものに関しての情報はある。
それによると・・・
textと、HTML集合体であるCHM、そして中国製フォーマットUMDに対応しているとのこと。

じゃあ、UMDってのは、どうやって作るのか?
umd-builder
ebookPK
手机Umd文件格式浅析 (たぶん、書式についての解説)

なお、UMDは、どうやら、中国携帯で結構サポートしているらしいフォーマットの模様。
おそらくはxmdf的な感じの位置づけっぽい

ronzi A3 その5 CPUアーキテクチャの違いでIMEが動かない


マーケットで「ATOK」とか「OpenWnn」とかで検索しても、本体は出てこない。
build.propとか書き換えても出てこない。

じゃぁ、別途持ってきてと思って、OpenWnn plusをダウンロードしてきてインストールしてみが、「インストールされていません」とエラーになる。

logcatしてみる・・・

D/PackageParser(  104): Scanning package: /data/app/vmdl57440.tmp
I/dalvikvm-heap(  104): Grow heap (frag case) to 5.740MB for 27488-byte allocation
D/dalvikvm(  104): GC_FOR_MALLOC freed 9482 objects / 540680 bytes in 160ms
D/PackageManager(  104): Scanning package com.owplus.ime.openwnnplus
I/PackageManager(  104): /data/app/com.owplus.ime.openwnnplus-1.apk changed; unpacking
E/PackageManager(  104): Package com.owplus.ime.openwnnplus has mismatched uid: 10055 on disk, 10051 in settings
I/dalvikvm(  104): Total arena pages for JIT: 11
W/PackageManager(  104): Native ABI mismatch from package file
W/PackageManager(  104): Package couldn't be installed in /data/app/com.owplus.ime.openwnnplus-1.apk
D/dalvikvm(  104): GC_EXPLICIT freed 10748 objects / 480504 bytes in 187ms

「Native ABI mismatch from package file」
そう、CPUアーキテクチャが違うことにより、問題が生じているらしい。
ronzi A3は「ro.product.cpu.abi=mips」
一般的には「ro.product.cpu.abi=arm」系というわけで、NDKを使って開発されたアプリは動かないらしい・・・

NicoWnnGも同じエラー発生。
docomo端末から引っ張ってきたATOKも同じく

いやぁ・・・困った。
NDK問題を回避できるIMEはあるんだろうか??

— 追記 その1 —
とりあえず、単独でソース公開されていたnicoWnnGを使って簡易対応してみた。
しかし・・・画面レイアウトの問題が・・・

— 追記 その2 —
JZ4760(MIPS)用nicoWnnG 独自ビルド版を配布してます。

ronzi A3 その4 firmwareアップデート


ronzi A3(溶叡 A3)はIngenic Semiconductor(北京君正集成電路有限公司)製のCPU JZ4760を使ってます。
アップデートの際は、そこのツールを使って行います。

手順は中国語pdfで送られてきたのですが、とりあえずフィーリングで読んでやってみたところ、うまくいったので、ご紹介

(0)firmwareを入手(注:ebayのsellerからもらったものをアップしました.2013/01/15にdropboxに再アップロード)
(1) ronzi A3をUSBブートモードで起動
(2) WindowsPCにつなげ、Ingenic USB Boot Device Driverをインストール
(3) とりあえず1回ronzi A3を取り外す
(4) USBbootToolを起動
(5) アップデートに必要なファイルを全て指定
(6) USBブートモードのronzi A3を接続
(7) 勝手にアップデートが開始される
(8) 終わるのを待つ
(9) 再起動かかったら、そこそこ時間がかかるので注意
(10) ronziのロゴの後、一回、黒画面になって10秒ぐらい経ってから、ANDROIDロゴが出てくる

注意点:USBbootTool.exeはUSBブートモードのデバイスがあると問答無用でアップデートを開始して中止できません。

さて、ここから詳細解説
(1) ronzi A3をUSBブートモードで起動

ホームボタンを押しながら電源ONするとUSBブートモードになります。
なお、USBブートモードに入っている場合、画面が何も映りません。

(2) WindowsPCにつなげ、Ingenic USB Boot Device Driverをインストール

こんな感じで「JZ4760 USB Boot Device」として認識されるので、A3 Driverディレクトリの中のドライバを適用してください。

(3) とりあえず1回ronzi A3を取り外す
ronziA3をつなげたままでは、この後のUSBbootToolがうまく使えません。
なので、USBbootTool側の準備が完了するまでつなげてはいけません。

(4) USBbootToolを起動

(5) アップデートに必要なファイルを全て指定

赤枠で囲んだ「打井…」というのが「ファイルを指定する」の意味です。
各ファイルに相当するものを指定しえください。
緑枠の「清除」の横の欄は、どうやらUSBbootToolを実行した回数を表すようです。実行するたびに数が増えていきますが、中国語の説明書によれば毎回「1」としろ、とか書いてあるようです。
全部を指定し終わったら、次に進みます

(6) USBブートモードのronzi A3を接続
USBブートモードになっているronzi A3をつなぎます。
Windows PCにつないで認識されると、USBbootToolは勝手に認識して、アップデートを開始します。

(7) 勝手にアップデートが開始される

アップデート中はファイルの選択などの部分がブロックされます。
また、下の進捗は1~とありますが、使われるのはver3.0.6時点では「1」だけのようです。

(8) 終わるのを待つ

こんな風に、ブロックが解除され、下の進捗欄に「ウノケヲ」と表示されたら完了です。

(9) 再起動かかったら、そこそこ時間がかかるので注意
(10) ronziのロゴの後、一回、黒画面になって10秒ぐらい経ってから、ANDROIDロゴが出てくる

1分ぐらい表示されるronziロゴ


10秒ぐらいしか表示されないAndroidロゴ

— 2011/07/06 追記 —
なお、6月中頃に公式の技術ページで「A3 升级工具及固件」という名前で、おそらくfirmwareの中身的には同等であろうものがアップロードされています。
しかし、ファイルの形式が全然違うので、詳しくはわかりません。

ronzi A3 その3 Android Market 撃沈編


ronzi A3は、標準状態で「Android Market」と「Hiapk」と2つのソフトウェアマーケットが入ってる。
ちなみに、Hiapkはver2.0.4時代で2.2にアップデートすると「安卓市場」に名前が変わった。

安卓市場は会員登録しないといけないっぽいけど、中国語なので、とりあえず使わないで、Android marketを起動・・・・不可
adb logcatをしてみると

/CheckinTask(  279): Checkin failed: https://android.clients.google.com/checkin (request #0)
/CheckinTask(  279): java.io.IOException: Rejected response from server: HTTP/1.1 400 invalid hardware identifier: "00.e0.4c.72.ce.1d" is not a valid MAC addre
s (expect 12 hex digits)
/CheckinTask(  279):   at com.google.android.gsf.checkin.CheckinTask.parseResponse(CheckinTask.java:298)
/CheckinTask(  279):   at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:246)
/CheckinTask(  279):   at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:146)
/CheckinTask(  279):   at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221)
/CheckinTask(  279):   at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:228)
/CheckinTask(  279):   at android.os.AsyncTask$2.call(AsyncTask.java:185)
/CheckinTask(  279):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
/CheckinTask(  279):   at java.util.concurrent.FutureTask.run(FutureTask.java:137)
/CheckinTask(  279):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
/CheckinTask(  279):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
/CheckinTask(  279):   at java.lang.Thread.run(Thread.java:1096)

こんな感じでエラー。

ebayの出品者ページを見ると使えるって書いてあるよなぁ~と画像をいろいろ見てみると
Firmwareのバージョンが違っていた。

うちに来たのは「Build number RK43_WFRT_20110401_1」で、画像のやつは「RK43_WFRT_20110504_1」。
そんなわけで出品者に新しいfirmwareくれ、と伝えたところ、新しいfirmwareが送られてきました

「RK43_60WFRT_RZA3_20110504_1」と、またちょっと違うバージョンでした。

アップデート手法についてはその4で・・・

ronzi A3が来た その2 adb接続編


とりあえず、いろいろいじるにあたってはadb接続できないといろいろ支障を来すので、つなげてみた

認識しないのはいいんだけど、なんというか、「<NULL><NULL>USB Device」という認識はどーなんだろうか・・・

まぁ、Google標準のADB device driverのinfを書き換えて認識させれば治るでしょ、と修正してみた

;ronzi A3
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_DDDD
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_DDDD&MI_01

さぁ、どうだ!

あ、「<NULL><NULL>USB Device」はそのままですか・・・

それではさっそく

C:\android\platform-tools>adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
INGENIC108A     device


C:\android\platform-tools>adb shell
# ls -l /system/fonts
ls -l /system/fonts
-rw-r--r-- root     root       177176 2011-02-28 15:26 DroidSerif-Italic.ttf
-rw-r--r-- root     root       184836 2011-02-28 15:26 DroidSerif-Bold.ttf
-rw-r--r-- root     root         6880 2011-02-28 15:26 Clockopia.ttf
-rw-r--r-- root     root        36028 2011-02-28 15:26 DroidSansThai.ttf
-rw-r--r-- root     root       117072 2011-02-28 15:26 DroidSansMono.ttf
-rw-r--r-- root     root        35908 2011-02-28 15:26 DroidSansArabic.ttf
-rw-r--r-- root     root       189916 2011-02-28 15:26 DroidSerif-BoldItalic.ttf
-rw-r--r-- root     root      3640264 2011-02-28 15:26 DroidSansFallback.ttf
-rw-r--r-- root     root        23076 2011-02-28 15:26 DroidSansHebrew.ttf
-rw-r--r-- root     root       190044 2011-02-28 15:26 DroidSans.ttf
-rw-r--r-- root     root       191032 2011-02-28 15:26 DroidSans-Bold.ttf
-rw-r--r-- root     root       172532 2011-02-28 15:26 DroidSerif-Regular.ttf
# cat /system/build.prop
cat /system/build.prop
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=FRG83
ro.build.display.id=lynx-eng 2.2.1 FRG83 eng.leo_lee.20110402.181410 test-keys
ro.build.version.incremental=eng.leo_lee.20110402.181410
ro.build.version.sdk=8
ro.build.version.codename=REL
ro.build.version.release=2.2.1
ro.build.date=2011年 04月 02日 星期六 18:26:26 CST
ro.build.date.utc=1301739986
ro.build.type=eng
ro.build.user=leo_lee
ro.build.host=jetserver-desktop
ro.build.tags=test-keys
ro.product.model=lynx
ro.product.brand=lynx
ro.product.name=lynx
ro.product.device=lynx
ro.product.board=
ro.product.cpu.abi=mips
ro.product.manufacturer=ingenic
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=lynx
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=lynx-eng 2.2.1 FRG83 eng.leo_lee.20110402.181410 test-keys
ro.build.fingerprint=lynx/lynx/lynx/:2.2.1/FRG83/eng.leo_lee.20110402.181410:eng/test-keys
# end build properties
#
# system.prop for lynx
#

rild.libpath=/system/lib/libreference-ril.so
rild.libargs=-d /dev/ttyS2

#ro.sf.lcd_density=240

#
# ADDITIONAL_BUILD_PROPERTIES
#
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.kernel.android.checkjni=1
ro.setupwizard.mode=OPTIONAL
dalvik.vm.dexopt-flags=m=y,v=n
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
dalvik.vm.heapsize=24m
#

なるほどねぇ・・・lynxですか

# df
df
/dev: 92396K total, 12K used, 92384K available (block size 4096)
/mnt/asec: 92396K total, 0K used, 92396K available (block size 4096)
/system: 217816K total, 198339K used, 19477K available (block size 1024)
/data: 511089K total, 96089K used, 415000K available (block size 1024)
/cache: 30079K total, 1032K used, 29047K available (block size 1024)
/mnt/sdcard: 2745084K total, 39468K used, 2705616K available (block size 4096)
/mnt/secure/asec: 7839744K total, 337024K used, 7502720K available (block size 32768)
/mnt/sdcard1: 7839744K total, 337024K used, 7502720K available (block size 32768)
/mnt/secure/asec: 7839744K total, 337024K used, 7502720K available (block size 32768)
#

あれ?
外に出てるmicroSDカードスロットは「/mnt/sdcard1」扱いか

# ls /mnt/sdcard/
ls /mnt/sdcard/
LOST.DIR
DCIM
Android
A3 蠢ォ騾滓桃菴懈焔蜀・pdf
P1.jpg
P2.jpg
P3.jpg
P4.jpg
P5.jpg
Woosa Woosa.wma
隸サ菴-阡。逅エ.lrc
隸サ菴-阡。逅エ.mp3
鬮俶ク・ケ騎M譬シ蠑熟obady.rm
蜊。閠仙渕蜿」謇榊ュヲ.txt
ku6
PPTV.log
tudoucache
tudoudownload
Books
#

/mnt/sdcardの方はいろいろ何か入ってますね

あ、そうだ。ファイルシステムは何なんだ?

# mount
mount
rootfs / rootfs ro,relatime 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
usbfs /proc/bus/usb usbfs rw,relatime 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/mmcblk0p1 /system ext4 ro,relatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p2 /data ext4 rw,nosuid,nodev,relatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p3 /cache ext4 rw,nosuid,nodev,relatime,barrier=1,data=ordered 0 0
/dev/block/vold/179:4 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:4 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,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/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,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=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard1/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
#

ext4採用ね。