CD音質のロスレスストリーミングサービス Deezer は確実に高音質!だが月1960円の価値はあるか?

Google Play Music との比較で語ります

当方は長らく Google Play Music の愛用者で、普段は、部屋のオーディオシステムで聴いています。参考までに、その構成は

  • Chromecast Audio(光ケーブル) または Chromecast Ultra(HDMI)
  • YAMAHA RX-A3060 AVアンプ
  • Emotiva A-300 メインアンプ
  • DALI IKON6MK2 フロアスタンドスピーカー

音源の質にもよりますが、Jazzやクラシックで、そこそこいい状態のものであれば、AVアンプの設定は

  • Music Enhancer ON
  • YPAOボリューム ON
  • 音響プログラム Straight

の状態で聴いています。(2chでは風呂と呼ばれるYAMAHAのAVアンプですが、80年代JPOPなど音の細い録音を聴くときに音響プログラムがボリュームと臨場感を加えてくれるものという考えです。)Google Play Musicの音質は MP3 320kbps 相当と言われていますが、総じて音質には満足していました。Googleのサービスは機能的にも充実していて、Androidスマホでのオンライン・オフライン再生、Google ChromecastやChromecast Audioへのストリーミング、ライブラリや、レコメンド、検索機能は秀逸です。

そこで飛び込んできたのが CD音質のロスレス再生を誇る Deezer という音楽サービスです。さっそく、1か月の試聴を申し込みました。

 

Deezer は確かに高音質。その差は低音に顕著に現れる。

Google Play Musicと音質を比較すると、ザラザラした背景が引っ込んでより音像がクリアになっていることにすぐに気が付きます。また、低音域が一番顕著に表れるところで、ベースラインがくっきりはっきりしています。これが圧縮音源と本来のCD音質かと思い知らされる瞬間でした。

ただし、この差がどんな再生環境でも現れるものかどうかは考えてみなければなりません。たとえば、iPhone と AirPods で音楽を聴く場合、音源がどんなに高音質であれ、AirPodsへ無線で転送された時点でAACコーデックの圧縮データに逆戻りしてしまうわけで、CD音質ロスレスサービスで使う意味がそもそもありません。

また重厚なアンプやスピーカー環境ではなく、卓上のミニコンポ、PCの両脇に置いた小さなスピーカーでの再生では、果たして有意な差があるのかも気になります。

音質以外でGoogle Play Music にかなうところは1つもなし

残念ながら、CD音質(後で検証しますが)以外、再生アプリの完成度、検索機能、レコメンド、ライブラリの操作性、音源の数(JPOPはかなりの率で入っていない)で、Google Play Musicにかないません。再生アプリは、かろうじて Chromecastへのキャストしての再生に対応していることで、高音質をそのままに手持ちのアンプやスピーカーで聞くことができます。

Chromecast または Chromecast Audio を通してAVアンプで聴くのがおすすめ

YAMAHAのAVアンプはSpotifyやDeezerなどのストリーミングに対応しており、MusicCastというアプリと連携して、スマホからの操作で音楽を再生することができます。ですが、これがなかなか、アプリの操作性はいまいち、ストリーミングとは思えないレスポンスで、再生指示をしてから待たされること数秒~数十秒、GooglePlayMusicになれた人からするととても我慢できない代物でした。

結局のところ、一番お勧めの視聴環境は、スマホ(当方Android)の Deezer から Chromecast か Chromecast Audio キャストすることです。Deezerに関して、Chromecastを通すとHQ(最高音質)再生に対応していないのではないかという情報もありましたが、現状では、HQの再生が可能です。ロスレスのままアンプの DAC へつなぎますから、一番いい条件で聴けることになります。

音質比較表

再生環境とDAC、スピーカーのの組み合わせをいろいろ試してみました。ポイントは、Deezerの高音質とGoogle Play Musicの音質に差がはっきり感じられるかどうかという点です。実際、どちらの音質もかなりいいので、★の数は、あくまで差を段階に分類したものです。また、耳を凝らしてじっと聞き比べても差があるのかどうかわからないものは同点、または気持ち程度の差を+で表してあります。

大まかには次の試聴形態で、

  • AVアンプで最高品質で聴いたもの
  • AVアンプだがBluetoothレシーバーを通したもの(AACや aptXに圧縮される)
  • スマホのイヤホンで聞いたもの(ロスレスだが、AndroidOSのミキサー経由、イヤホンのDAC依存)
  • 卓上のアクティブスピーカーONKYO GX-D90で聴いたもの(aptX Bluetoothレシーバーの光出力)

となります。

GX-D90は1万円台のアクティブスピーカーで光入力があります。aptX Bluetoothレシーバーは HS-BMR002という超小型のDACですが、この光出力を GX-D90 へ送って試聴します。

Sound Source Receiver Amplifier Speaker Score
Deezer(HQ) Chromecast Audio(Optical out) RX-A3060 + A-300 IKON6MK2 ★★★★★
Google Play Music(320kbps MP3) Chromecast Audio(Optical out) RX-A3060 + A-300 IKON6MK2 ★★★★
Deezer(HQ) Bluetooth (AAC on RX-A3060) RX-A3060 + A-300 IKON6MK2 ★★★
Google Play Music(320kbps MP3) Bluetooth (AAC on RX-A3060) RX-A3060 + A-300 IKON6MK2 ★★★
Deezer(HQ) Chromecast Audio(Optical out) - GX-D90 ★★
Google Play Music(320kbps MP3) Chromecast Audio(Optical out) - GX-D90 ★★
Deezer(HQ) Bluetooth(aptX on HS-BMR002) - GX-D90
Google Play Music(320kbps MP3) Bluetooth(aptX on HS-BMR002) - GX-D90
Deezer(HQ) USB-C earbuds - USB-C earbuds ★★+
Google Play Music(320kbps MP3) USB-C earbuds - USB-C earbuds ★★

 

結局のところ、一番最初のオーディオシステムをフルに生かし切った構成で聴いたものしかGooglePlayMusicとの差異は優位に感じられないということになりました。

補足1)

MacOSやWindows上で再生する場合、通常OSのミキサーを通りますから、若干音質のロスが生じます。(特にOSXのミキサーはひどいらしい)Deezerのプレーヤーが対応できるかわかりませんがサウンドデバイスを排他的にオープンできる設定が理想です。また、OSのミキサーを通る場合でも、音声出力のビット数と周波数を24bit/96kHzなどに上げるのも効果的ははずです。

Androidの非同期通知機能 Google Cloud Messaging (GCM) のサーバー側コードをC#で書いてみた

.NETの標準以外に Newtonsoft のJSON.NETを使用します。http://james.newtonking.com/pages/json-net.aspx
使い方は

    var container = new Google.GoogleCloudMessaging.Container {
        RegistrationIds = new String [] { "APA*******PQZQ" },
        Data = new { message = "Hello World!" }
    };
    var response = Google.GoogleCloudMessaging.Broadcast( "AIz************", container );

のようになります。

------------------------------

 

using System;
using System.Net;

using Newtonsoft.Json;

namespace Google
{
    public class GoogleCloudMessaging
    {
        public class Container
        {
            [JsonProperty("registration_ids")]
            public String[] RegistrationIds { get; set; }
            [JsonProperty("collapse_key", NullValueHandling=NullValueHandling.Ignore )]
            public String CollapseKey { get; set; }
            [JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)]
            public object Data { get; set; }
            [JsonProperty("delay_while_idle", NullValueHandling = NullValueHandling.Ignore)]
            public Boolean? DelayWhileIdle { get; set; }
            [JsonProperty("time_to_live", NullValueHandling = NullValueHandling.Ignore)]
            public int? TimeToLive { get; set; }
            [JsonProperty("restricted_package_name", NullValueHandling = NullValueHandling.Ignore)]
            public String RestrictedPackageName { get; set; }
            [JsonProperty("dry_run", NullValueHandling = NullValueHandling.Ignore)]
            public Boolean? DryRun { get; set; }
        }
        public class Response
        {
            [JsonProperty("multicast_id")]
            public String MulticastId { get; set; }
            [JsonProperty("success")]
            public int Success { get; set; }
            [JsonProperty("failure")]
            public int Failure { get; set; }
            [JsonProperty("canonical_ids")]
            public int CanonicalIds { get; set; }
            [JsonProperty("results")]
            public Result[] Results { get; set; }
        }
        public class Result
        {
            [JsonProperty("message_id")]
            public String MessageId { get; set; }
            [JsonProperty("registration_id")]
            public String RegistrationId { get; set; }
            [JsonProperty("error")]
            public String Error { get; set; }
        }
        static public Response Broadcast(String API_KEY, Container container)
        {
            var request = WebRequest.Create("https://android.googleapis.com/gcm/send");
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(container);
            using( WebClient web = new WebClient()){
                web.Headers.Add("Authorization", "key=" + API_KEY );
                web.Headers.Add("Content-Type", "application/json");
                byte[] result = web.UploadData("https://android.googleapis.com/gcm/send", "POST", System.Text.Encoding.UTF8.GetBytes(json) );
                String resultString = System.Text.Encoding.UTF8.GetString(result);
                var response = Newtonsoft.Json.JsonConvert.DeserializeObject<Response>( resultString );
                return response;
            }
        }
    }
}

SoftbankでSIMフリーHTC Desireと最近のAndroid HTC Sense系 ROM(含備忘録)

海外で購入したHTC DesireにいろんなROMを焼いてしばらくこの話題から遠ざかっていました。気がつくとSoftbankからたくさんのAndroid端末が発売されており、その間に andglobal.softbank.ne.jp なる新しいAPNも設定されていました。

Softbankでの契約内容と使用可能なAPNの組み合わせについて 2ch でまとめられていたものを備忘録としてここにコピーしておきます。

 

◆パケットし放題S(3G) 

mailwebservice.softbank.ne.jp → ウェブ 

のみの接続であれば上限4,410円で定額 

open.softbank.ne.jp → PCダイレクト 

smile.world → PCダイレクト 

は上限が9,800円。 

andglobal.softbank.ne.jp → スマートフォン通信 

は青天井(未確認) 

 

◆パケットし放題フラット(iPhone、3G) 

ウェブ PCダイレクト分のみ定額になる。黒simフラット契約、銀simガラケー共に 

open.softbank.ne.jp → PCダイレクト 

smile.world → PCダイレクト 

mailwebservice.softbank.ne.jp → ウェブは定額範囲だったが、 

andglobal.softbank.ne.jp → スマートフォン通信 

に設定すると定額外で別枠だった。パケ死する恐れあり。 

Desireだとフラット契約を適用できたが、DHDでパケットし放題フラットを適用できなかったのも、 

APNとプランの設定で範囲で、初期DHD内でのAPNがandglobalな為、定額外扱いだからだと思われる。 

 

◆パケットし放題S forスマートフォン 

◆パケットし放題MAX forスマートフォン(受付終了) 

現時点(2011/5/10)では、銀Simでも緑Simでも 

mailwebservice.softbank.ne.jp → ウェブ(ガラケー扱い) 

open.softbank.ne.jp → PCダイレクト 

andglobal.softbank.ne.jp → スマートフォン通信 

smile.world → PCダイレクト 

のどれも定額内。 

(緑sim用の機種ならandglobal、銀sim用の機種Xシリーズならopenに接続されるが、契約はどちらでも同じ。) 

 

◆パケットし放題フラット forスマートフォン(2011/05/01より) 

・SoftBankスマートフォン(Xシリーズの場合、最新の販売履歴がXシリーズであること)のみ、お申し込みいただけます。 

・国内でご利用のS!メール[MMS]送信・読出料、ウェブ・PCサイトブラウザ(PCメールを含む)・PCサイトダイレクト(Xシリーズ専用)通信料が定額の対象となります。 

スマホ用プランでパケットし放題MAX/Sと同様となので 

mailwebservice.softbank.ne.jp → ウェブ(ガラケー扱い) 

open.softbank.ne.jp → PCダイレクト 

andglobal.softbank.ne.jp → スマートフォン通信 

smile.world → PCダイレクト 

のどれも定額内と思われる。 

 

あと、私自身がひっかかった非常に重要な落とし穴として最近のHTC DesireのROMにははじめからSoftbankのAPN設定が含まれていますが、中に andglobal な設定しかないROMがあり、こういったROMを焼いてAndroidが起動、アカウントでサインインすると、以前のバックアップとアプリのダウンロードをすべくネットに自動的に接続に行きます。この間有無を言わさず通信が始まりますからどこのAPNに接続しているか未確認の状態では非常に危険です。

/system/etc/apns-conf.xmlの内容を十分確認するか、SIMを抜いた状態で初期設定を行うなど気を使う必要があります。

皆様もご注意ください。

台湾でプリペイドSIM - 遠傳電信 FarEasTone編

今回台湾で4日ほど滞在する際に、我がHTC Desire(UK版SIMフリー)でパケット通信すべくプリペイドSIMを購入しました。

手続きについてはこちらのサイトを参考にさせて頂きました。

http://blog.nabe.jp/archives/000211.html

台北駅新光三越裏の店舗カウンターでプリペイドSIMを購入したいと伝えると、1日100NTD 3日間250NTD 5日間350NTDのプランがあるとのこと。手続きにはパスポートのほかにもう一つ日本での身分証明書が要求されましたので私の場合は運転免許証を使いました。

登録手続きから開通まで1時間かかるという説明を受けましたが実際には手続きをしていろいろ説明を聞いているうちに開通したようですぐに利用可能でした。

作業の手順としてはSIMを携帯に刺して、ネットワークの選択でFarEasToneを選択、その後アクセスポイントの設定でAPNを internet になっていたものを f3prepaid に変更。あとは携帯を再起動すると完了です。携帯上でアクティベーションなどの作業はありませんでした。

購入したNT$350は5日間の無制限3Gデータ通信用で、音声通話用のクレジットは含まれていませんでした。ただし電話番号はありますからSMSの受信、音声通話の着信は可能です。

ちなみに、私は中国語はカタコトですが、店頭では英語が通じるスタッフが一人いたためお陰でほぼ英語だけで滞り無くコミュニケーション可能でした。

Android 2.2 FroyoでSoftbank MMS対応する方法(Mms.apk)

Mms.apk.froyo.jakeMod5に更新しました。(2010/8/2)

Mms.apk.froyo.htc.jakeModExperimental4 アップしました。(2010/8/6)

Android 2.1 (Eclair)をお使いの場合はこちら

Android 2.2のソースコードがいよいよ公開されたということで、Softbank MMS対応すべくさっそく AOSP(Android Open Sourcee Project)からFroyoのソースを取得してビルドしてみました。

ソースコードを概観したところの感想は次のようなものです。

  • Softbank MMSの問題を引き起こしていた部分は、EclairでのAOSPの有志の方のコミットにもかかわらず反映されていないようでした。
  • 特にFrameworks.jarに含まれる Pdu関連のソースは手つかずのままFroyoに持ち越されている様子。
  • Mms.apkについては、いろいろ手が加わっており、Eclairでの些細なバグなど(文字化けとか)が修正されていました。
Eclairのソースで施した手当と同じことをFroyoに施してコンパイルしなおしました。チャレンジャーの皆様の役に立てばと思います。

CyanogenMod6をお使いなら

CyanogeMod 6 ROMをお使いの場合は、なにもしなくてもSoftbankでも利用可能です。当方のMms.apkと置き換えるメリットを考慮の上判断してください。

OpenDesire 3.0.x以上をお使いなら

UserAgent指定などのオプションや、SoftbankのMMSを利用するための最小限の更新が含まれています。

当方のMms.apkを利用するメリット

ROMの更新や各方面の方々の対応、Softbank本家の対応予定など、当方での仕事も役目を終えつつありますが、現時点でなおも当方のMms.apkを利用するメリットとしては次のような点になります。
  • アプリ間の連系で emailto: URL Intent を受け取れるように設定しています。
  • Eメールアドレスで送受信した場合のコンタクトのアイコンやアドレスの新規登録処理で、ちゃんと電話番号の場合と区別して処理されるようになっています。
  • HTC由来のROMをご利用の場合
    ソフトバンク本家の謹製アプリが出るまでは、当方で特別対応したものが有効だと思われます。

Mms.apk置き換え時とその後の手順

rootを取る手順や Mms.apk を置き換える手順については各方面で紹介されているのでここでは省略します。

Mms.apkファイルをインストールするとき

/system/app/Mms.apk ファイルを置き換えます。同じディレクトリに Mms.odex ファイルが存在する場合は必ず削除します。

Mms.apkファイルを置き換えて再起動後

User-Agentの設定を必ず行ってください。ソフトバンクで使用する場合はこれを行わないと始まりません。


それでもうまくいかない場合・・・
  • 「モバイルネットワーク」設定(APN設定)でMMSの設定はできていますか?
  • User-Agentの設定をいろいろ変えてもだめですか?


ダウンロード
Mms.apk.froyo.jakeMod5
  • chanogenの更新の取り込み(フォントサイズ指定など微小な修正)
Mms.apk.froyo.jakeMod4
  • AvatorのEmailアドレス対応の修正
  • 文字の大きさ設定、名前を表示しない設定の追加
  • cyanogenからの追加(言語リソースの追加)
Mms.apk.froyo.jakeMod3
  • 背景黒のオプション追加(cyanogenでの更新の反映) (2010/7/9までの分)
Mms.apk.froyo.jakeMod2
  • cyanogenでの新しい更新を含む(2010/6/30までの分)
Mms.apk.froyo.jakeMod1
  • multipart/alternative のメールが文字化けしていたのを修正。(当方のeclairのソースからのコピーミス)



 

HTC由来のROMの注意

なおHTC由来のROM(Sense UI付のもの)では上記のMms.apk では正常動作しません.
たとえば以下のようなROMは HTC 由来のものとなります。
  • LeeDrOiD
  • Oficial Froyo HTC Sense ROM
  • DJ DROID。
以下に試験的に作成したバージョンを置いておきます。

Mms.apk.froyo.htc.jakeModExperimental4
  • メッセージの送信で落ちる不具合に対処(できたか不明動作報告求む)

 

Mms.apk.froyo.htc.jakeModExperimental4 (871 kb)

 

Softbank X06HT のMMS対応の方法(予想)

当方の海外購入版 SIMフリー HTC DesireではROOT化とMMSアプリの書き換えで Softbankが公式に非対応としている S!メール に対応することができました。

公式にはSoftbankは近々アップデートで対応するといっているのですが、果たしてどういった対応をしてくるのでしょうか。対処しなければならない問題箇所を予測してみました。

Softbankの MMS 拡張プロトコルの問題

MMSの送受信でDocomoのユーザーの被害(?)が少ないのは多くはこれによっていたと思われます。SoftbankのMMSセンターを通じて送られるMMSデータの中にSoftbank(Vodafone?)が独自に拡張したプロトコルが含まれており、これを正しく扱えなかった Android OS のライブラリが例外を起こして落ちるために受信に失敗していました。解決法には、Android OS側のプログラムをそういったイレギュラープロトコルを正しく無視するか取り扱うように補強する方法と、SoftbankのMMSセンター側で、Androidに対しては拡張されたデータ部分を送信しないようにするという道があります。しかしながら、MMSセンターは、アクセスの拒否の判断を User-Agent を使って行っているようですが、User-Agentによって送信するデータを変えるというのははたして簡単なのか。すでに、User-Agentの偽装は多くの方ができるようになっており、将来の問題追跡の煩雑化を考えると技術者目線ではやりたくない方法です。もっとも、Vodafoneなんちゃらという標準を逸脱するヘッダーを拡張仕様として乗っけた時点で技術側負けだったのだと思いますが。

Android OS自身に内在する不具合

上記のSoftbank固有のプロトコル意外にも、MMSのプロトコルの取り扱いに関しては framework.jar という共有のライブラリに格納された部分にマルチパートのメールを正常に扱えないなどの問題を含んでおり、これはいずれにしてもアップデートして解消しなければなりません。Mms.apkというパッケージ自身もシステム上でロックされて上書きできないようにされているわけですから、framework.jar という共有ライブラリの更新はさらに大変そうです。結局はROMの更新しかないと思われるわけです。

Softbankとして独自に追加的にやらないといけないこと

  • 絵文字対応
    日本のガラパゴス携帯に合わせるためにやらないといけない。白黒ならフォントの置き換えで対応できるが、やはり謹製クオリティを出すならカラー絵文字でないといけない。
  • HTMLメール対応
    いわゆるデコメールなどと呼ばれているもの。HTMLブラウザを引っ張ってこないといけないので、Mms.apkの拡張という意味では荷の重い工程になるはずです。
  • 日本人的に使いやすいUIをもったアプリの提供
    Android標準のメッセージソフトは海外の人が使い慣れた「1行SMS」的使い方に特化されたデザインになっているので、日本のユーザー向けにはやはり個別のメールアプリを提供したほうがいいのでしょうが、Softbank自身にそういった開発をする意欲があるかどうか疑問です。余計なコストになるので、Mms.apkを問題のない程度に変更したものを入れてくるだけになるかもしれません。

マーケットからの単独アプリとして提供する場合の困難

2010年7月現在ソフトバンクからは単独アプリとしてマーケットからMMSアプリを提供するとアナウンスされています。Mms.apkを上書きインストールする形になるのか、別アプリとしてインストるするかのいずれかになるのでしょうか…。もっともMms.apkをrootを取らなくても上書きインストールすべがあるのなら多くの人がRootを取ったり、ADBを使用したりこんなに苦労しなくても済むのです。

もともとAndroidに含まれている Mms.apk は /system/app というディレクトリに格納されており、一方で通常後からインストールされるアプリは /data/app というディレクトリに配置されます。/system/appディレクトリは文字通りシステムによって保護されており、ここに入っているアプリは「root」を取らずして削除したり、上書きしたりすることができません。

AndroidのアプリはIDによって識別されています。(たとえば mms.apk は com.android.mms など)このIDを違うものを指定することで、原理的には2つ目のMms.apkをインストールすることができます。そこで2つ目のMms.apkを使用するようにすればいいとなるかといえばそう簡単ではありません。Mms.apkアプリはメッセージ関連のイベントを処理するためのバックグランドプロセスとしても登録されています。また、アプリ間の連携のため電話番号やEメールアドレスをキャッチするための登録もされています。これらを別のアプリから横取りすることはある意味「安全」な方法でやるのは無理です。(と思います)

そういう点で「別アプリ」提供の場合、Mms.apkの改良や延長という対応ではなく、iPhone が i.softbank.ne.jp でやったようなSMS/MMSとは完全に別体系のアプリとなるのではないかと思います。

いずれにしても、今後の展開が楽しみです。

 

HTC Desire(X06HT)で Softbank MMS対応する方法 Mms.apkの差し替え

2010/7/3 Mms.apk.jakeMod11アップしました。

Softbank X06HT(HTC Desire)の登場で、思わず衝動買いしそうになりつつ、ネットを調べるとどうもSIMフリーを海外から購入したほうが(エンジニア魂をくすぐる問う意味で)いろいろお得感が大きいという結論になり、さっそく購入しました。在庫有りだったためなんと香港からFedexで1日で届いてしまいました。

Softbankのアナウンスでは当初はMMSやメール送受信(Y!メールという?)はできないということでしたが、なんのそれくらいいいやと踏んでいたところ、それがいかに足かせになろうとは思ってもいませんでした。いろいろ触るうちに、どうしてもこれをメインの携帯として使いたいという欲がムラムラとこみあげてきて、ついに意地でもMMS対応させようと HTC DesireのROOT化、Andoid標準のメッセージソフトの更新に踏み込みました。

Android OS 2.1に関する話題はいろんなところでされているので、ここでは私個人の都合状どうしてもやらなければならなかったことをメモとして残しておこうと思います。

SMS/MMSにまつわる解決できなかった問題

  • UserAgent問題
    当初、SoftbankのMMSの接続ができない問題が持ち上がったときにこの UserAgent の偽装をおこなうことで送受信できるようになるといわれました。そこで、各所でUserAgentを選択的に偽装できる修正がなされたMms.apk ファイルが作られて配布されました。が、後に続く問題のために、どうしても実用的なレベルに使用できませんでした。
  • 本文に漢字が含まれるとメッセージが届かなかったり、件名と本文がぶっ飛んだりしてしまった
    メッセージが通知もされず届かないという問題は致命的でした。
  • 画像などの添付ファイルがあるとやはりおかしかった
  • 改行キーでメッセージを送信するとメッセージが同じもの2通が送信されてしまう
  • ファイル名としてふさわしくない文字列を含む添付ファイルを保存しようとするとできない。
  • 件名に日本語を含んだメッセージを「書きかけ」としていったん保存すると再度の編集時、件名が文字化けする。

その1:ROOT化

Androidのシステムに標準に組み込まれているソフトは通常のアプリのインストール方法なで上書きやアップデートがかけられないようにロックされています。つまり、OS上でROOT権限がないとこれらのコンポーネントの変更・削除ができないことになります。

そこで、俗に言われるROOT化という禁断の手が必要になります。この作業はご存じのとおり、メーカーの保証や各所のサポートを受けられなくしてしまう禁じてであるのでおいそれとはすすめられません。また、この方法についてはここでは省略しますので、関係各所を参考の上チャレンジしてください。

Googleの検索結果

その2:APN問題

SIMフリー版など、携帯キャリアのものでないデバイスを使用する場合について回る問題です。通話やSMSは何もしないでもSIMを差し替えるだけで使えるようになりますが、3G回線を利用したインターネットの接続のためにはいわゆるAPN(アクセスポイント)を設定しないといけません。

これについても、キャリアがオープンにしていない話題ですし、各所で紹介されているのでここでは省略します。

Googleの検索結果

その3:MMSの接続設定

APNの設定の中に、MMSを送受信するための設定も含まれています。SoftbankでMMSを送受信するために、これらの設定が正しくされている必要があります。

Googleの検索結果

その4:Mms.apkの上書き

SMSとMMSを司るソフトコンポーネントは Mms.apk というパッケージで、システム上の /system/app/Mms.apk というファイルです。

SoftbankのSMS,MMS通信ができない理由は、通信プロトコルの不整合や、AndroidOS自身に内在する不具合など複数の要因によって起こっています。これを根本解決するには、Androidのシステムライブラリを含めてSoftbank仕様として再コンパイル後、ファームアップデートとして顧客に配布するよりないのではないかと思います。が、ここでは、それを待っていたら、Softbankのアナウンス通り今年の後半まで指をくわえて待っていなければなりません。

で、必死になって Mms.apk を自分でコンパイルしました。

Softbank MMS問題の修正は、実は4月末までにとある方によってなされており、Android OSのソースを管理する Android Open Source Project にすでに反映されています。そこのソースコードを取得して必要なファイルを更新すればいい・・と思ったところそうは簡単ではないことがわかりました。

Softbank MMS問題の不具合は実はMms.apkの中ではなく、MMSの通信自体のライブラリが格納されている /system/framework/framework.jar という共有ライブラリの中にあったのです。ところが、このファイルを置換することは残念ながらできません。おそらく携帯デバイスやOSのビルドの種類ごとに異なる内容になっており、これを書き換えるとOSそのものが起動しなくなる恐れがあります。そこで、framework.jarには手を付けないで、Mms.apkだけでなんとか済まされないかと格闘。

苦肉の策は、framework.jar に含まれていたMMS関連のソースコードを引き抜いてきて、Mms.apkのソースコードとしてコンパイルしなおすというものです。

この結果、Android標準のメッセージアプリでは無事SMS/MMS/携帯メール の送受信が正しく行えるようになりました。

Softbankでの利用では、Mms.apkを更新後、まず最初に User-Agentの設定を忘れずに行ってください。

 

改善される点のまとめ

  • UserAgentが選択またはカスタム設定可能
  • SoftbankのMMSの送受信の種々の不具合の改善
    (メッセージの不着、着信しても本文空、画像添付時の不具合などが改善)
  • ENTERキーで送信した場合にメッセージが同じもの2通が送信されてしまう不具合
  • バイブレーションパターンの設定、LEDの設定がある(HTC DesireではLED動かず?)
  • 送信アドレスの入力テキストボックスでの検索と候補表示で電話番号だけでなくメールアドレスからも選択できるようになった。
  • 新たな設定項目(Eclairのソースコードに含まれていたものを含む)
    スレッドの背景色(有機ELのDesireの場合黒のほうが消費電力が少ない?)
    改行キーで送信するかしないかの設定
    フォントサイズの設定
Mms.apkjakeMod5以降での更新
  • アドレス帳のメールアドレスからSMS/MMS送信にジャンプできるように修正。
  • 既存のスレッドにない宛先にジャンプした時の不具合など修正。
Mms.apk.jakeMod6での更新
  • ファイル名としてふさわしくない文字列を含む添付ファイルを保存しようとするとできない。
  • 件名に日本語を含んだメッセージを「書きかけ」としていったん保存すると再度の編集時、件名が文字化けする。
Mms.apk.jakeMod7での更新
Mms.apk.jakeMod8の更新内容
  • ほかのアプリからEMAILアドレスが引き渡された時にアドレスが失われる問題を修正
    Intent.ACTION_SEND で Intent.EXTRA_EMAIL の参照を追加。
    ※元々Mms.apkはEメールアドレスを取り扱う想定が全くなかったのでこういうことに・・・
Mms.apk.jakeMod9の更新内容
  • mailto:******?subject=xxxx&body=xxxxx にただしく対処
Mms.apk.jakeMod10の更新内容
  • multipart/alternative の取り扱いミスで文字化けを修正
  • X01TのUser-Agentを修正
Mms.apk.jakeMod11の更新内容
  • cyanogenリポジトリからの修正分を(2010/6/30までの分)

制限事項:

  • この Mms.apk 差し替えで有効なのは Androidに標準の「メッ セージ」アプリを使用した場合だけです。アンドロイドマーケットで配布されている各種SMS/MMSアプリでは同様の問題は改善されません。
  • 受信中に表示を切り替えたりすると、異常終了するなどの不具合は時々見られます。(もともと内在する不具合か)

ダウンロードはこちら

Mms.apk.jakeMod11

  • 想定環境: Android OS 2.0以上 (HTC Desire ROM 1.21 MoDaCo Custom ROM r1 r2 r3 r3.1で動作確認済み)
  • Android 2.2 (Froyo)の場合はこちら

 

Mms.apk.jakeMod11 (897 kb)