Thursday, July 15, 2010

Android Mms.apk の Softbank 絵文字対応

「リア充の道は絵文字から」というありがたい言葉を頂いたので実装してみた。

制限事項がいくつかあるけど概ね良好にみえる。
  • CM5では下書きからの復帰で件名が化ける(eclairのバグ?)
  • システムのMmsアプリを置き換える
  • アプリに絵文字の画像ファイルを含むのでサイズが若干でかい(1.9MBくらい)
  • CM5,6+ mailto:のintent対応(適当)
  • CM5+ メールアドレス補完

こんな感じですん。


iPhoneとのやりとり


入力は一番上に履歴と、カテゴリごとに分けられたタブ5ページになる。(基準はiPhoneの絵文字キーボード)


絵文字の種類はiPhone compatible.
キャリア間の互換性はサーバ側で変換してくれるので気にしなくてよいはず。
SMS, docomo, au及びGMail間での送受信テストはした。

Mms.apk は adb コマンドなどで置き換えます。
$ adb remount
$ adb shell rm /system/app/Mms.odex
$ adb push Mms.apk /system/app/

あるいは update-mms-cm6-signed.zip をリカバリからぶち込めばそれだけでもよいです。

※ HT-03A など /system 領域が小さい機種の場合、導入に工夫が必要な場合があります。

CyanogenMod 5.0.8, 6.0.0以外の環境でのテストはしていません。
CMベースならおそらく大丈夫だと思われます。
ダウンロード (CM6)
ChangeLog

CM5ではframeworkの修正が必要です。また、CM5標準に比べてメールアドレスを補完する機能を付加してあります。
ダウンロード (CM5)
CM5用差し替えframework

CM以外のFroyoベースROMではテストをしていませんが動作するようです。(framework修正をapkに含めいています)
ダウンロード

Eclair用はありません。

TODO:
  • 単体アプリとして導入できるようにする
  • コード整理
  • ソース公開

21 comments:

ats said...

softbank(UA:iPhone) + desire + Defrost2.3で使ってみました。そもそもサポート外ということなので無視してくださってもかまわないのですが、ちょっと気になった点を書きます。これ以外は満足しています。

・絵文字(SBMじゃない方)を件名に入力できない
・件名を追加を選んだあと、件名を空白のまま送っても届かない

takuo said...

レポートありがとうございます。

元からある絵文字(Smily)は件名非対応のようですね。
件名を空にして送信する件はCM6では再現しませんでした。

masa said...

HT-03Aで使ってみました!素晴らしいです!
欲を言えば絵文字が大きすぎるのでQVGAサイズのデバイスでも使えるサイズの(絵文字サイズ半分)Mms.apkがあると助かります。お時間がある時で構いませんので、ご検討願います。

@uzakiroH said...

SoftBank X06HT DeFroST2.1で良好に使えております。たまに自動受信されない時がありますが、SoftbankMMSreqアプリを併用すれば万全です。

これは素晴らしいMms.apkです。本当に有難う御座います。

takuo said...

masaさま:
恐れ入ります。高解像度端末のことしか考えておらず、すみません。HT-03Aは当方も所有していますので、近々修正したいと思います。

@uzakiroHさま:
ありがとうございます。
不勉強なものでよく存じてないのですが、DeFroSTですと、frameworkへのMMS修正が含まれていないと思われます。
そのような環ですと、正しく受信できないことが多々あると思いますので、その辺はご留意の上ご使用くださいませ。

takuo said...

CM以外のFroyo用Mms.apkを作りました。
MDPI解像度でもわりとまともに表示するようにしました。

お試しください。

Anonymous said...

Desire + Defrost2.4a で使ってみました☆
絵文字が使えるようになって非常に楽しいです!
ただデコメを受信すると件名とデコメ絵文字が一つだけ表示され、文章が表示されません。
何が原因かよくわかりませんが念のためお伝えしておきます。

それ以外は大満足です☆
どうもありがとうございました。

qtotter said...

しばらくご無沙汰していたのですが、久しぶりにこちらを訪問してみたところ、絵文字にまで対応されていて、すごいことになってますね。

uzakiroH said...

毎度お世話になっております。
NexTSense v5.2なるHTCsense入りROMで試した所、
MMS送信以外は全てOKでした。惜しい!

takuo said...

adb logcat で何が起きて失敗しているかわかれば対応できるかもしれません。

Anonymous said...

au相手への画像の送信がうまくいかないようです

quews said...

HTC senseで落ちる時のログです。

E/WorkingMessage( 1450): Failed to send message: content://mms/drafts/3, threadId=1
E/WorkingMessage( 1450): java.lang.ClassCastException: java.lang.String
E/WorkingMessage( 1450): at android.app.ContextImpl$SharedPreferencesImpl.getInt(ContextImpl.java:2745)
E/WorkingMessage( 1450): at com.android.mms.transaction.MmsMessageSender.updatePreferencesHeaders(MmsMessageSender.java:107)
E/WorkingMessage( 1450): at com.android.mms.transaction.MmsMessageSender.sendMessage(MmsMessageSender.java:76)
E/WorkingMessage( 1450): at com.android.mms.data.WorkingMessage.sendMmsWorker(WorkingMessage.java:1105)
E/WorkingMessage( 1450): at com.android.mms.data.WorkingMessage.access$000(WorkingMessage.java:67)
E/WorkingMessage( 1450): at com.android.mms.data.WorkingMessage$1.run(WorkingMessage.java:957)
E/WorkingMessage( 1450): at java.lang.Thread.run(Thread.java:1102)
W/ActivityManager( 137): Activity pause timeout for HistoryRecord{46f45440 com.android.mms/.ui.ComposeMessageActivity}
E/ActivityManager( 137): Error running process
E/ActivityManager( 137): java.io.IOException: Error running exec(). Command: [/system/bin/dmesg] Working Directory: null Environment: [ANDROID_SOCKET_zygote=11, ANDROID_BOOTLOGO=1, EXTERNAL_STORAGE=/
mnt/sdcard, ANDROID_ASSETS=/system/app, TERMINFO=/system/etc/terminfo, ASEC_MOUNTPOINT=/mnt/asec, PATH=/sbin:/system/sbin:/system/bin:/system/xbin, ANDROID_DATA=/data, BOOTCLASSPATH=/system/framework/
core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/com.htc.framework.jar:/system/framework/com.htc
.android.pimlib.jar:/system/framework/com.htc.android.easopen.jar:/system/framework/com.scalado.util.ScaladoUtil.jar, ANDROID_PROPERTY_WORKSPACE=10,65536, ANDROID_ROOT=/system, LD_LIBRARY_PATH=/system
/lib]
E/ActivityManager( 137): at java.lang.ProcessManager.exec(ProcessManager.java:226)
E/ActivityManager( 137): at java.lang.ProcessBuilder.start(ProcessBuilder.java:201)
E/ActivityManager( 137): at com.android.server.am.ActivityManagerService.logProcessResult(ActivityManagerService.java:9438)
E/ActivityManager( 137): at com.android.server.am.ActivityManagerService.access$900(ActivityManagerService.java:155)
E/ActivityManager( 137): at com.android.server.am.ActivityManagerService$9.run(ActivityManagerService.java:9613)
E/ActivityManager( 137): Caused by: java.io.IOException: No such file or directory
E/ActivityManager( 137): at java.lang.ProcessManager.exec(Native Method)
E/ActivityManager( 137): at java.lang.ProcessManager.exec(ProcessManager.java:224)

takuo said...

すこし手間がいりますが
/data/data/com.android.mms/shared_prefs/
com.android.mms_preferences.xml

pref_key_mms_priority
というエントリがあったら削除してみてください。

takuo said...

と、思いましたが、non-cm-froyoのupdate.zipを更新しましたのでお試しください。

Anonymous said...

Galaxy Sで利用させています。

気づいたことですが、設定メニューからSMSとMMSの受信確認通知、MMSの開封確認レポート、メールアドレス補完のチェックを付けると後に外れ、フルスクリーン横画面、Enterで送信のチェックを外すと後にチェックが復帰してしまいます。

OSはFroyoでの動作確認になります。
改善策があるようでしたら、ご教示頂けると幸いです。

takuo said...

再現しないのでわかりません

PPHI said...

NeoPhyTe_Mod_1.8_Sense-FroYo_FRF91
Softbank, シルバーusim Desire
使ってます。 MMS使える方法ってありますか?
Mms.apkを入れて見ました。Custom User-Agentは見えて Softbank V702NK2やiPhone (3.0)の設定両方して見ましただが、メールはダウンロード出来ませんとエラになるんです。 何か良い方法あれば、教えて頂くと助かります。

takuo said...

APNの設定が間違ってるんじゃないでしょうか。

Jon said...

早い答えありがとうございます。
APN設定ですかね。設定はこちらのサイトを見て、設定致しました。
http://bqolife.blog53.fc2.com/blog-entry-204.html
一般の3G、www.google.co.jpなど見れるけどMMSだけ見れないのが困ってるんだね。
何か良い情報あれば嬉しいです (*^。^*)

takuo said...

間違いなく、non-cm-froyo 版を使っているのであれば、これ以上のことはわかりません。

Jon said...

ありがとう (*^。^*)
また色々探してみます
何か見つかりましたら知らせます。