KKJConvでエラーが発生するということで調べてみたところ、どうもMIDP実行環境側の問題のようです。
エラーが発生するのは次のようなコードです。
TextBox tb;
tb.delete(0, tb.size());
このコードはTextBoxの文字列を削除するためのものですが、TextBoxが空の時に左の写真のようにString Index Out Of Boundsというエラーが発生します。
deleteメソッドの第一パラメータはオフセット、第二パラメータは削除する文字列の長さです。
tb.size() が 0 の時の問題なので tb.delete(0, 0); のようにしてテストすると文字列が存在する時にはエラーは発生しません。言い換えるとTextBoxに文字列が存在しない時にdeleteを呼ぶとエラーするということです。一応、ドキュメントを確認しましたが呼び方には問題が無いように思えます。ましてやKKJConvの初期から存在するコードなので実績もおおいにあります。
回避策は簡単なので以下のようなコードに変更してKKJConvのエラーは回避出来ました。
if (0 < tb.size()) {
tb.delete(0, tb.size());
}
Nokiaにバグではないの?と投げかけようと思いましたが、以前Forum Nokiaにあったバグレポートのシステムが見つかりません。もう一般開発者からのバグレポートは受け付けてないのかな?
既にAyamadoriさんがブログ「書くことないです。」に最新のNokia Series 40 Touch and Type端末のMIDP開発環境について書かれています。
私はQWERTYキーボードを中心に分かったことを書いてみたいと思います。
キーボード素直です。ずっとS60 3rdからフルキーボードのキーコードには悩み続けてきました。E7に至っては訳がわからないというのが正直な感想でした。それから考えると物足りないくらいに素直な挙動です。
E90などと違うのはCtrl+Cなどでコントロール・コードでは無く”C”そのものが返ってくることです。ただしCtrlキーそのものがキーコードを発生してくれるのでMIDPのアプリケーション内で処理可能です。また、CtrlだけではなくSymや数字シフトなどもキーコードが出ています。CtrlもSymキーもMIDPのCanvasでは何も働きませんので、逆に自分の好きなように役割を与えられるとも言えます。
カーソル移動キーが無い。「書くことないです」でも触れられていますが、方向キー、所謂10字キーが無いデバイスです。その代わりに画面を上下左右にスワイプすることで対応するキーコードが得られます。また左右のメニュー・キーもありません。これも画面のタップで代用します。S60 5thのタッチデバイスで表示される、あまり使いたいとは思わないゲーム・キーなバーチャル・キーボードは無くなったようです。
QWERTYキーで文字入力中に編集のためにスワイプというのは今ひとつな気もします。KKJConvではやはりキーボード操作でカーソルを移動できるようにしたいと思います。
液晶にタッチすれば何とか今までと同様の動作が出来ると思いきやダメなケースも見つかりました。Google Mapsは未だMIDP版が配布されていますが、これが全く操作不能でした。Google Mapsは画面を大きく使うためにCanvasをフルスクリーンで動作させています。検証はしていませんが、どうもこれが災いして画面のタッチが全く効きません。10キーだけは反応するですが、起動時に表示されたダイアログを消すことが出来なかったので、全く使い物になりませんでした。
Nokia 3030 (おそらくAsha 303と同じ)にChina MobileやChina UnicomのSIMを入れれば自動的にネットワーク設定が行われます(もしかすると中国国内版なのでプリセットされているのかも)。そのため何も考えなくてもNokia BrowserアイコンやInternetアイコンをタップすれば何かしら予め設定されているサイトに接続することは出来ます。
ところが、どう頑張ってもWAPの接続先しか選択できません。Preferred access pt.などというそれらしい設定を行なってもダメです。Internet Radioなどではちゃんとデータ通信用APNが選択出来るのでAccess pointの設定は出来ているようです。S60の設定も忘れかけていて、初めてのSeries 40でメニューを徘徊しても良く分かりません。そんな時見つけたのがGoGoSmartphoneBLOGの記事「Asha303のデータ通信設定」でした。いやぁ、助かりました。これを参考に自前でAPNとWeb接続の設定を行なって無事にInternetアイコンで希望のAPNに接続出来るようになりました。
以下私の行った設定例です。
< Access Pointの追加 >
– Settings/Configuration/Personal settings
– options/Add new/Access point
– Account nameは適当な名前を設定。わたしの場合は’CMNET’としました。
– Acc. point sett./Bearer settingsにてPack. data acc.pt.に cmnet と入力。他のフィールドはそのままでOK。(注: cmnetは本来China Mobileのアクセスポイント名ですがChina Unicomも同じ名前で接続できます)
< Web設定の追加 >
– Settings/Configuration/Personal settings
– options/Add new/Web
– Account nameは適当な名前を設定。わたしの場合は、ディフォルトのままMy webとしました。
– Use pref. acc. pt.はYesのままでOKです。あるいはNoに変更してAcc. point sett.に別途APNを設定することも可能です。
< Preferred access pt. の設定 >
– Settings/Configuration/Preferred access pt.にて先に作ったCMNETを選択します。
< Internetアイコンの設定 >
– Internetを起動しWeb settingsを開きます。
– Configurations sett./Accountにて先に作成したMy webを選択します。
以上です。
なんとなく勢いでテスト中です 🙂
ピードラさんがAsha 303をレビューされていますので本体の写真や感想などはGoGoSmarphoneBLOGを御覧ください。
左の写真の物は中国国内で正規販売されているNokia 3030という機種です。どうみてもAsha 303と同じです。搭載されているアプリ等が違う程度でほとんど同じものと思えます。
まだ数時間触っただけですが、現時点での感想やらKKJConvの対応について書いておきます。
[ KKJConv ]
ピードラさんからコピペ画面に「新規追加」するとエラーすることを聞いていましたので、取り急ぎ対応しました。詳しくは別途ブログにエントリーするつもりですが、どうもMIDPの実装そのものに問題があるようです。回避策は簡単な変更で済みましたので、とりあえずテスト版として以下のページからOTA導入出来るようにしています。
http://www.nkozawa.com/kkjtest/
デバイスから直接アクセスして導入してください。
漢字入力画面からCtrlキーが効かないとかカーソル移動キーが無くて不便(画面をスリスリするとカーソル移動します)なので、もうちょいAsha 303チューンを施したバージョンを作成予定です。
[ その他雑感 ]
– Series 40 なのでやはり自由度は低いです。KKJConv稼動したまま切り替えられるのはSMSアプリのみのようです。タスク切り替えなどは無いのでメールとKKJConvを行ったり来たりなどは出来ません。
– やはりQVGAは見劣りがするかも。特に中国語メニューだと今時のデバイスと比べると文字が美しく表示できないので手に取った時のガッカリ感があります。値段が安くて無線LAN, Bluetooth, WCDMA搭載ですので、割りきって使ってやろうという人向きなのでしょうね。QVGAでもAngry Birdsは結構遊べます。用途しだいではQVGAで十分なのかもです。
– USBで充電出来るのは便利です。が、かなり時間が必要みたいです。数時間、ThinkPadのUSBに接続していましたがフル充電にならなかったです。
所謂、ネットワークのスピードテストは様々な要因があるので結果を単純に評価できない事が多いです。春節休みで中国のネットワークが空いているようなので中国内のボトルネックが軽減されているものと見込んで前から試してみたかったChina UnicomのWCDMAとChina MobileのTD-SCDMAで速度テストを行ってみました。とは言ってもひとつのテストを気まぐれに行っただけなので軽く読み流していただければと思います。

W-CDMA HSDPA

TD-SCDMA HSDPA
テスト方法はChina UnicomはHTC Desire Z (T-Mobile G2)、China MobileはGalaxy S GT-I9008LをそれぞれTheseringで設定しiPod TouchからSpeedtestアプリで速度を測定しました。どちらもHSDPAモードで接続されている時にテストを行なっています。
普段からTD-SCDMAの方は体感的にEDGEの調子良い時と大差無い(上海のEDGEはかなり調子良いです)と感じていたので、だいたい予測通りではあります。TD-SCDMAのアップロードは何度試してもこれくらいの速度しか出ていません。これは意外でした。もしかするとデバイスに依存する問題かもしれないですが、かなり厳しいです。確かに写真のアップロードを行う時に何時も苦労しているのは、このためかと納得しました。
Galaxy S GT-I9008LはTD-SCDMA版ということもありカスタム・ファームが対応していない(おそらくGalaxy S用のものが焼けるでしょうけど、まともには使えそうもない)のでおとなしく中華アンドロイドのまま使うつもりでした。しかしながらGFWの壁だけはいかんともし難く、また標準VPNが動きそうもないことに耐え切れずルート化に踏み切りました。
ルート化自体はSuperOneClickで問題なく行えましたので、ここではごく簡単に手順を記録するに留めます。<要するに手抜きです>
[ USBドライバーの導入 ]
まずはGalaxy SのUSBドライバーをWindowsに組み込みます。ドライバーはSAMSUNGグローバルダウンロードセンターで似たようなモデルを選択して探しました。わたしはUSBドライバーだけを導入したのですが、今改めて探してみるとUSBドライバー単独のファイルが見つかりませんでした。SAMSUNG Kiesを導入してもドライバーが入るはずです。
[ SuperOneClick の導入 ]
Windows XPなどでは必要に応じて.Net Framework 2.0以上のruntimeを導入しておきます。XDA DeveloperからSuperOneClickをダウンロードします。各種ファイル共有サイトへのリンクがあります。フリーでダウンロードするには待ち時間があります。また、DOWNLOADなどと書かれたた各種アフェリエイトがありますので辛抱強くダウンロードに挑んでください。
SuperOneClickは導入作業はなく圧縮ファイルを展開した中にあるSuperOneClick.exeを起動するだけで使用出来ます。
[ ルート化の実行 ]
– Galaxy SのSetting/Applications/DevelopmentにてUSB debuggingを有効にします。
– USBを接続しSuperOneClickのRootボタンを押し画面の指示に従います。途中BusyBoxを導入するかどうか聞いて来たと思いますので導入しておきます。これだけでルート化されます。
ルート化されたので当初の目的通り壁越えのためにSSHTunnelを導入することが出来ました。ついでにフォントをいつもお世話になっている「こばこのひみつフォント」を追加、後は省電力設定のためにCPU tunerを入れました。今のところルート化による恩恵を受けているのは、この三点だけです。
とても簡単な話なのですが自分でも長い間気づかなかったので簡単にご紹介。
WindowsとMac OS Xの間でファイルを共有したい場合、Sambaで設定すれば可能ですが面倒です。また常にファイルを参照したいわけでは無く必要に応じてコピーを持ってきたいという場合に便利な方法です。
SSHという手法を利用してTCP/IPネットワークを介してファイル転送を行います。Windows側にWindSCPというソフトを導入するだけですのでお手軽です。
– まずはWindSCPをWindows側に導入します。
– Mac OS X側では「システム環境設定」「共有」で左の画面のように「リモートログイン」を有効にします。
– WindSCPのNew Sessionにて共有画面に表示されている情報を参考に設定を入力します。Host nameはIP Address, User name/PasswordはMac OS Xに設定したものです。その他の部分はそのままでLoginします。
– Keyに関するWarningが表示されたらYesを押します。後はExplorer風の画面ですので触っていれば使い方が分かると思います。
全ての操作はWinSCP側から行います。また必要がなくなったら「リモートログイン」の設定は切っておくほうが良いでしょう。
SSHDroidをAndroid端末で稼働させてsftpにてPCとの間でファイル転送を行っています。Bluetooth転送では困難な大きなファイルも難なく転送できます。ただしWiFiネットワークが必要ですので主には自宅での作業に限定されます。
最初はルート化されたデバイス専用かと思っていましたがファイル・システムのアクセスに制限があるだけで通常の使用であれば非ルート化端末でも問題ありません。
PC側にWindowsならWinSCP, Mac OS XならばCyberduckなどを入れて置くととても便利です。
接続に必要な情報はSSHDroidの起動画面を見れば分かります。接続に必要なパスワードはOptions画面で参照あるいは設定出来ます。
これは超オススメです。
2つの理由でBluetoothファイル転送が必要となりました。ひとつはHTC Desire ZからファイルをGalaxy Sに転送すること、もうひとつはGalaxy SのUSB接続が今ひとつ不調でPCへのファイル転送に手間取ることです。
標準のファイル・マネージャーやギャラリーにも共有メニューにBluetoothという選択肢がありますがうまく転送出来ません。
Bluetooth File TransferをAndroidデバイスに導入すると思い通りにファイルの転送が出来るようになります。
出来るようになる事:
– Androidデバイス間でのファイル転送。双方でBluetooth File Transferを起動しておきます。
– PCからデバイスをブラウズしファイル転送を行う。デバイスでBluetooth File Transferを起動しておきます。
– AndroidデバイスからPCをブラウズしファイル転送を行う。Mac OS X Lionでは予めシステム環境設定/共有にてBluetooth共有を有効にして置く必要があります。
中国国内で正規に販売されているAndroidデバイスはGoogleのアカウントに依存しない作りになっています。そのため使いこなしの作法が一般的なAndroidとは異なっています。
[ アカウントの同期 ]
端末を初期化してもGoogleのアカウントを入力しろとは言われません。とりあえずはどこにも同期しない設定で立ち上がってきます。Galaxy S I9008Lの場合はSettings/Accounts and sync/Add accountにて左のような画面が表示されます(Hotmailはアプリケーションを導入したから表示されているだけで最初はありませんでした) 。因みにKaiXinはオンラインゲームを中心としたSNS、RenRenはFacebookクローンで、最初から組み込まれていました。
私はGoogleに同期したいのでMircosoft Exchange ActiveSyncでGoogleのアカウントを入力しメール、アドレス帳、カレンダーの同期を行なっています。一度設定されてしまえば使い勝手は通常のAndroidと変わりません。
[ マーケット ]
Googleのアンドロイド・マーケットは付属していません。あるいはapkでマーケット・アプリを導入してもアカウントの設定が無いので使用することは出来ません。Galaxy S I9008LにはMMという中国移動のマーケット・アプリが付属しています。有料アプリをキャリア課金で導入出来るようにしたものですが、使い勝手が今ひとつなので使用していません。
手っ取り早いのは百度のアプリ検索サイト(中国内じゃないとアクセス出来ないかも?)からapkファイルをダウンロードして導入することです。この場合Settings/ApplicationにてUnknown sourcesに予めチェックを入れておかないと導入が出来ません。
ここで今まで使用していたアプリケーションをほとんど全て探すことは出来ました。ただし有料アプリの割れ物なども簡単に入手出来てしまいますので注意が必要です。私の場合、最終的にはHTC Desire Zにて導入しているapkファイルをコピーして使用することにいたしました(マーケットで導入したアプリのapkファイルをコピーするためにはルート化が必要です)。
[ 日本語 ]
– フォントは美しいとは言えませんが日本語の表示は問題ありません。
– 日本語入力は Simeji を百度で検索して導入しました。
– ロケール設定のために MoreLocale2 (中国語サイトだと MoreLocale区域設置)を導入しました。携帯電話が完全に日本語化されるわけではありませんが日本語リソースを持ったアプリケーションを動かすと正しく日本語で表示出来るようにするものです。
[ その他 ]
– 他の方も言うとおりVPNは設定があるけれども繋がらない感じ。
– apkを探してGoogle Mapsを入れて見ました。普通に地図アプリとしては使用出来ますがGoogleアカウントの設定が無いのでLatitudeは使用できません。