给模拟器发送短信的过程: DDMS/Telnet->console->Kernel 发送短信导致乱码的地方在两个: DDMS程序和console 短信乱码问题的原因: 中文短信是以ucs2编码,存储在pdu的usd区。 而传给系统的编码非ucs2。 第一步: DDMS传给console的是GBK编码,console接收后前有底层统一转成UTF-8编码,至于为什么这里就不说了! DDMS最后是用socket与console进行交互。UI操作以命令传给console; 默认发送时获取字节码的编码是ISO-8859-1。 所以我们做下修改: console接收后由一个命令分发表转到sms_send 将字节码从utf-8流中解析出来 这里就出现了一个错误。汉字的UTF-8为三个字节。在做第二个和第三个自己读取前跳过了第二个。所以注释掉 顺便修改console发送时候的编码函数 方法同上 最后的步骤是用发送者号码和短信内容构建PDU短信; smspdu_create_deliver_utf8-->smspdu_create_deliver-->gsm_rope_add_sms_deliver_pdu 我们主要关注gsm_rope_add_sms_deliver_pdu就行了 在这个函数中:主要涉及到PDU编码的知识,这个也不详细叙述,想了解的可以去百度; 根据代码分析,google在用户数据区前面多加了个长度信息。因为英文短信是从另外一个分支处理的,所以不受影响! 修改方法如图,注释掉那段代码! OK,我们流程都打通了,现在就需要编译了。 编译我也说一句吧,需要编译模拟器emulator,sdk或者熟悉点的可以只编译ddms,然后拷贝到sdk。 好了,打完收工!你可以用telnet连接模拟器:telnet localhost 5554->sms send 10086 你好! 或者在DDMS那里发送,效果是一样的! 涉及文件: external\qemu\telephony\sms.c external\qemu\android\console.c sdk\ddms\libs\ddmlib\src\com\android\ddmlib\EmulatorConsole.java 本文,是本人原创。转载请说明出处! 不好意思,可能图片挂了。大家可以看194K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3N6r3!0E0K9r3!0#2M7W2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3z5o6t1K6y4o6R3#2y4b7`.`.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课