﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Free Monkey-文章分类-Android</title><link>http://www.blogjava.net/anymobile/category/37565.html</link><description>Make Anything Mobile!</description><language>zh-cn</language><lastBuildDate>Wed, 15 Dec 2010 15:44:32 GMT</lastBuildDate><pubDate>Wed, 15 Dec 2010 15:44:32 GMT</pubDate><ttl>60</ttl><item><title>Android Widget 设计与开发</title><link>http://www.blogjava.net/anymobile/articles/340831.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 15 Dec 2010 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340831.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340831.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340831.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：徐建祥（netpirate@gmail.com）时间： 2010/12/15来自： http://www.anymobile.orgWidget杂谈：最早Widget是指在PC的桌面上的小窗口程序；Web上的先行者似乎是Yahoo！；当然，OPhone也搞了一套Widget，HTML+CSS的东东。我们这里谈的所谓Widget，就是窗口小部件，Android SDK从1.5版...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/340831.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/340831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-15 21:44 <a href="http://www.blogjava.net/anymobile/articles/340831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 安装软件后执行“OPEN”引起的Intent血案（系统BUG）</title><link>http://www.blogjava.net/anymobile/articles/340723.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340723.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340723.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340723.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 编写：徐建祥(netpirate@gmail.com)日期：2010/12/13网址：http://www.anymobile.org打开程序的入口有很多个：shell 命令行运行；Launcher待机界面执行；状态通知栏运行；桌面快捷方式运行；软件中调用运行；安装软件后执行&#8220;OPEN&#8221;运行！前面几项，调用程序的代码如下（参考：com...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/340723.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/340723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:11 <a href="http://www.blogjava.net/anymobile/articles/340723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android: 缩放图片文件引起的OOM异常</title><link>http://www.blogjava.net/anymobile/articles/340722.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340722.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340722.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340722.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 编写：徐建祥(netpirate@gmail.com)日期：2010/12/06网址：http://www.anymobile.org传输文件，或者设置头像，我们一般都会检查原始图片的大小，作缩放处理。常用的Java版缩放图片代码：view plaincopy to clipboardprint?    public&nbsp;Bitmap&nbsp;g...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/340722.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/340722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:10 <a href="http://www.blogjava.net/anymobile/articles/340722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 软件的状态栏图标通知处理</title><link>http://www.blogjava.net/anymobile/articles/340720.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340720.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340720.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340720.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 编写：徐建祥(netpirate@gmail.com)日期：2010/11/22网址：http://www.anymobile.orgQQ的状态栏通知机制：当所有QQ的UI Activity切换到后台后，添加状态通知；切换回来后，删除该状态通知。飞信的状态栏通知方式：运行软件后，图标一直显示在状态栏的通知栏中；显示退出软件则删除该状态通知。似乎QQ的更有点技术含量，多个程序切换...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/340720.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/340720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:08 <a href="http://www.blogjava.net/anymobile/articles/340720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 离线用户的灰色头像处理</title><link>http://www.blogjava.net/anymobile/articles/340721.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340721.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340721.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340721.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340721.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写：徐建祥(netpirate@gmail.com)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">日期：2010/11/22</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">网址：http://www.anymobile.org</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">主要涉及两个技术点：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1、图标加灰色过滤；</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2、android的图片资源默认是静态的，单实例；如果两个IM好友的头像一样，最简单的都是用的软件自带头像，有一个在线，一个离线，直接改变头像的灰度，则两个用户的头像都会变灰或者在线，答案是：Drawable.mutate()。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">代码如下：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<div class="dp-highlighter" style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px; background-color: #e7e5dc; width: 913px; overflow-x: auto; overflow-y: auto; margin-top: 18px !important; margin-right: 0px !important; margin-bottom: 18px !important; margin-left: 0px !important; padding-top: 1px; ">
<div class="bar" style="padding-left: 45px; ">
<div class="tools" style="padding-top: 3px; padding-right: 8px; padding-bottom: 10px; padding-left: 10px; font: normal normal normal 9px/normal Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; border-left-color: #6ce26c; "><a href="http://blog.csdn.net/netpirate/archive/2010/11/22/6028140.aspx#" style="text-decoration: none; color: #a0a0a0; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: inherit; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 10px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; background-position: initial initial; background-repeat: initial initial; ">view plain</a><a href="http://blog.csdn.net/netpirate/archive/2010/11/22/6028140.aspx#" style="text-decoration: none; color: #a0a0a0; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: inherit; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 10px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; background-position: initial initial; background-repeat: initial initial; ">copy to clipboard</a><a href="http://blog.csdn.net/netpirate/archive/2010/11/22/6028140.aspx#" style="text-decoration: none; color: #a0a0a0; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: inherit; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 10px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; background-position: initial initial; background-repeat: initial initial; ">print</a><a href="http://blog.csdn.net/netpirate/archive/2010/11/22/6028140.aspx#" style="text-decoration: none; color: #a0a0a0; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: inherit; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 10px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; background-position: initial initial; background-repeat: initial initial; ">?</a></div>
</div>
<ol start="1" class="dp-j" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 1px !important; margin-left: 45px !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: decimal; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #5c5c5c; ">
    <li class="alt" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #ffffff; color: inherit; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">Drawable&nbsp;mDrawable&nbsp;=&nbsp;context.getResources().getDrawable(R.drawable.face_icon);&nbsp;&nbsp;</span></span></li>
    <li class="" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #f8f8f8; color: #5c5c5c; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; "><span class="comment" style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: #008200; background-color: inherit; ">//Make&nbsp;this&nbsp;drawable&nbsp;mutable.</span><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">&nbsp;&nbsp;</span></span></li>
    <li class="alt" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #ffffff; color: inherit; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; "><span class="comment" style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: #008200; background-color: inherit; ">//A&nbsp;mutable&nbsp;drawable&nbsp;is&nbsp;guaranteed&nbsp;to&nbsp;not&nbsp;share&nbsp;its&nbsp;state&nbsp;with&nbsp;any&nbsp;other&nbsp;drawable.</span><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">&nbsp;&nbsp;</span></span></li>
    <li class="" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #f8f8f8; color: #5c5c5c; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">mDrawable.mutate();&nbsp;&nbsp;</span></li>
    <li class="alt" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #ffffff; color: inherit; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">ColorMatrix&nbsp;cm&nbsp;=&nbsp;<span class="keyword" style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: #006699; background-color: inherit; font-weight: bold; ">new</span><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">&nbsp;ColorMatrix();&nbsp;&nbsp;</span></span></li>
    <li class="" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #f8f8f8; color: #5c5c5c; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">cm.setSaturation(<span class="number" style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: #c00000; background-color: inherit; ">0</span><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">);&nbsp;&nbsp;</span></span></li>
    <li class="alt" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #ffffff; color: inherit; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">ColorMatrixColorFilter&nbsp;cf&nbsp;=&nbsp;<span class="keyword" style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: #006699; background-color: inherit; font-weight: bold; ">new</span><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">&nbsp;ColorMatrixColorFilter(cm);&nbsp;&nbsp;</span></span></li>
    <li class="" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 3px !important; padding-bottom: 0px !important; padding-left: 10px !important; list-style-type: decimal-leading-zero; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: solid; border-width: initial; border-color: initial; list-style-position: outside !important; list-style-image: initial; border-left-width: 3px; border-left-color: #6ce26c; background-color: #f8f8f8; color: #5c5c5c; line-height: 14px; "><span style="line-height: 18px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; color: black; background-color: inherit; ">mDrawable.setColorFilter(cf);&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;
<p>&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">OVER！</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:08 <a href="http://www.blogjava.net/anymobile/articles/340721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 安装文件.apk反编译</title><link>http://www.blogjava.net/anymobile/articles/340719.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340719.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340719.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340719.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340719.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写：徐建祥(netpirate@gmail.com)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">日期：2010/10/12</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">网址：http://www.anymobile.org</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">反编译包括：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;odex+apk-&gt;apk</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack xml</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack drawable</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack class</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">涉及软件：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;apktool</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;dex2jar</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;jdgui</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;AXMLPrinter2</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;smali</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;Auto-sign</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--待续&#8230;&#8230;</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:07 <a href="http://www.blogjava.net/anymobile/articles/340719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XX for Android Design 设计文档</title><link>http://www.blogjava.net/anymobile/articles/340718.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340718.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340718.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340718.html</trackback:ping><description><![CDATA[<div><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">XX for Android Design 设计文档</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">[ Android平台XX视频聊天/XX for Android]</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">日期: 2010.07.20.&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写: 徐建祥&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">网址：http://www.anymobile.org&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">修改记录：&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2010-07-20 徐建祥&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2010-08-06 徐建祥&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">目 录&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. 项目概述&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.1. 功能介绍&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.2. 开发环境</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.3. 运行环境&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.4. 名词解释&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2. 系统架构&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3. 模块设计&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1. Android消息通讯&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.1. Intent意图&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.2. Broadcast Receiver广播接受者</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.3. Thread Message线程消息&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.4. callback机制&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.5. Observer观察者模式&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.1.6. Listener监听器&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.2. AV引擎库&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3.3. 协议库&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">4. 体系结构&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5. 流程设计&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.1. 注册&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.2. 登录</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.3. 注销&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4. 点对点聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.1. 发送文字聊天数据&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.2. 接受文字聊天数据&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.3. 发送音视频聊天数据&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.4. 接受音视频多媒体数据&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.5. 主动关闭聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.4.6. 对方关闭聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.5. 短信邀请视频聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.6. 聊天室聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.7. 聊天室转点对点聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.7.1. 主动邀请聊友聊天&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.7.2. 接受聊友聊天邀请&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">5.8. WAP用户以及TCP代理服务器</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">6. 接口设计&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">6.1. JNI&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">6.2. PTS&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">6.3. AV Engine&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">7. 数据存储&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">7.1. Shared Preferences&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">7.2. SQLite Database&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8. 移植相关&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8.1. io输入输出相关&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8.2. os操作系统相关&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8.3. timer定时器&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8.4. socket网络&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">8.5. log日志&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">参考文档&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. 项目概述&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.1.功能介绍</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">XX视频聊天手机，在2.5G网络上实现手机视频互动，让广大手机用户享受到3G功能。实现全球互通，无需漫游费，使得通讯费用大为降低；此外，也支持手机对PC的双向视频聊天，从而使人们可以随时、随地&#8220;见面&#8221;，让世界变的更小。&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">XX for Android是视频聊天软件XX的Android版本，实现了手机用户与艾米聊友或通讯录好友点对点视频、语音、文字聊天，另外用户可以使用视频、语音、文字聊天室功能。&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.2.开发环境&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Windows XP + Cygwin / Ubuntu 10.3&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">JAVA:&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">IDE: JDK 1.5 + Eclipse3.5 + ADT0.9.6 + CDT 1.0.0&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">SDK: Android SDK&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">NDK: Android-NDK-r3&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">C/C++:&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">C库: BSD C库精简版 bionic&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.3.运行环境&nbsp;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Android平台1.5及以上固件版本</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1.4.名词解释</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">【Android】OHA组织开发的，包括操作系统、中间件和核心应用的移动设备软件集合。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2.系统架构</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">主要包括4个模块层次：UI交互层；JNI接口层；核心应用层，以及系统适配层。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">（图略）</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">UI交互层：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">主要实现了人机交互界面，以及一些框架类等，通过不同的场景完成产品功能，每个场景可以包含多个界面，每个场景可以处理特定的通知消息。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">JNI接口层：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">衔接Java与C/C++代码层，是UI交互层与PTS协议模块和AV引擎交互的枢纽，提供自上而下的正向调用，以及自下而上的callback调用机制。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">系统适配层：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">提供系统平台相关的wrapper实现，如io、os、timer、socket等。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">核心应用层：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">移植的核心库，包括协议库和AV引擎库。</p>
</span></div>
<img src ="http://www.blogjava.net/anymobile/aggbug/340718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 23:03 <a href="http://www.blogjava.net/anymobile/articles/340718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 即时通讯软件开发日志系列</title><link>http://www.blogjava.net/anymobile/articles/340713.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340713.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340713.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340713.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写：徐建祥(netpirate@gmail.com)<br />
日期：2010/10/12<br />
网址：http://www.anymobile.org</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">最近几个月一直在负责某即时通讯软件的智能手机平台开发工作（已经有手机厂商和运营商的定制版，近日将发布公版），参考了iphone的设计风格，以及QQ for Android的功能设计，代码完全自主开发，主要涉及以下方面：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--调研方案</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">() --&gt; &lt;&lt;XX for Android porting 移植文档&gt;&gt;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--需求</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">() --&gt; &lt;&lt;XX for Android UI Spec 产品设计文档&gt;&gt;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--设计</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">() --&gt; &lt;&lt;XX for Android design 设计文档&gt;&gt;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--开发</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()AndroidManifest设置：debugable/launchModel/task/minSDK/...</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()欢迎界面与初始化检测：手机卡/网络/SD卡(IMEI/IMSI/ACTIVE NETWORK/WIFI/SDCard)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()注册/登录界面与动画(frame animation)、数据存储(DB &amp; Share Proferences)、网络(TCP/CP &amp; HTTP)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()主界面与TAB设计(TabHost &amp; TabWidget)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()更换皮肤等主题(Theme)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()呼叫小窗口(Custom Dialog)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()工具条(Menu layout &amp; onClick)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()两级聊天室列表(GroupList &amp; ChildView)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()电话簿(Contact v1.0 &amp; Contact v2.0)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()资料设置(Radio &amp; EditView &amp; CheckBox)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()消息表情(GridView &amp; SpanningString)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()软件运转到后台，在状态栏显示软件图标(Statusbar)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()软件更新--HTTP检测接口；XML数据格式解析；多线程下载；软件覆盖安装(XML Parser &amp; MultiThread)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()手机号码绑定与短信监控器(SMS Observer)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()捕获按键：HOME/BACK/SEARCH，on ACTIVITY &amp; DIALOG，后退键可以通过onKeyDown捕获；搜索键可以通过onDispathEvent获悉，其会dismiss对话框</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()相机的本地预览竖屏窗口，默认只支持横屏预览(Camera Preview)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()聊天与消息机制(listener/Callback/Intent/Handler Message/Thread Message)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()JNI &amp; AIDL</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()自定义组件(Activity/Button/Dialog/ListView/In-Out)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()OpenGL &amp; 3D</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--测试 --&gt; &lt;&lt;XX for Android v0.X.X 测试报告&gt;&gt;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()Eclipse Debug(USB / Serial port)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()模拟发送短信和电话呼入(ddms / command)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()抓日志与截屏(adb &amp; ddms &amp; logcat)</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--发布 --&gt; &lt;&lt;XX for Android Deploy 部署文档&gt;&gt;</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()MD5等编码</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()软件源代码混淆</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()ANT脚本</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">()</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">以上开发部分需结合软件源码示例，待续&#8230;&#8230;</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 22:45 <a href="http://www.blogjava.net/anymobile/articles/340713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Introduction to Android RILD</title><link>http://www.blogjava.net/anymobile/articles/340711.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340711.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340711.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340711.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">整理：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;" style="text-decoration: none; color: #336699; ">netpirate@gmail.com</a>)<br />
日期：2009/09/21<br />
网址：<a href="http://www.anymobile.org/" style="text-decoration: none; color: #336699; ">http://www.anymobile.org</a><br />
<br />
初始化流程，主入口init.rc, rild.c中的main函数，主要完成三个任务：<br />
1. 开启libril.so中的event机制， 在RIL_startEventLoop中，是最核心的由多路I/O驱动的消息循环。<br />
2. 初始化librefrence_ril.so，也就是跟硬件或模拟硬件modem通信的部分（后面统一称硬件）， 通过RIL_Init函数完成。<br />
3. 通过RIL_Init获取一组函数指针RIL_RadioFunctions， 并通过RIL_register完成注册，并打开接受上层命令的socket通道。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">RIL的线程和事件</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">一共创建了3个线程，5个事件：<br />
s_wakeupfd_event(s_fdWakeupRead,pipe),<br />
s_listen_event(s_fdListen,socket RILD),<br />
s_commands_event(accept(s_fdListen...)),<br />
s_debug_event(s_fdDebug,socket RILD-debug),<br />
-1.</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">第一个线程s_tid_dispath处理所有fd（socket，pipe，port）对应的事件处理，处理和上层RIL.JAVA联系是第一个线程和对应的5个事件。<br />
第二个线程s_tid_mainloop和第三个线程s_tid_reader通过硬件层连接的fd，来处理readline,processline，处理下层硬件相关。</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 22:44 <a href="http://www.blogjava.net/anymobile/articles/340711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 手机之：Huawei_C8600</title><link>http://www.blogjava.net/anymobile/articles/340712.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340712.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340712.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340712.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;" style="text-decoration: none; color: #336699; ">netpirate@gmail.com</a>)<br />
日期：2010/08/12<br />
网址：<a href="http://www.anymobile.org/" style="text-decoration: none; color: #336699; ">http://www.anymobile.org</a><br />
<br />
Huawei_C8600外形看还可以，硬件配置如下：<br />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">[ro.product.board]: [C8600]<br />
[ro.product.brand]: [China Telecom]<br />
[ro.product.manufacturer]: [HUAWEI]<br />
[ro.board.platform]: [msm7k]<br />
[ro.config.browser_useragent1]: [Mozilla/5.0 (HW-C8600/C8600V100R001C92B225;U;Android/2.1;]<br />
[ro.config.browser_useragent2]: [320*480;CTC/2.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17]<br />
[ro.build.description]: [MSM7x25-user 2.1-update1 ERE27 20100707 ota-rel-keys,release-keys]<br />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><img src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_10.png" border="0" alt="" width="320" height="480" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_11.png" alt="" width="320" height="480" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_12.png" alt="" width="320" height="480" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /><br />
<br />
它主要有2点比较有吸引力：<br />
<br />
1、自动安装驱动程序；<br />
该机型通过USB的方式（手机当U盘用），主动安装SD卡下面的可执行文件，安装驱动。<br />
<br />
这种方法的好处：使用快捷，无需随记附赠驱动程序<br />
这种方法的缺点：SD卡的不少程序其实都有病毒的特征，360安全软件检测后提示是Nnewheur_PE病毒。<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/anymobile/hw_newheur_PE.png" alt="" width="640" height="478" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /><br />
<br />
2、KVM虚拟机<br />
该机型安装了日本贵司的KVM：JBlend，可以选择扫描SD卡检测jad/jar文件，有了类似的机子，J2ME平台移植的问题解决来咯，使用KVM的KNI调研动态库。<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_22.png" alt="" width="320" height="480" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_09.png" alt="" width="320" height="480" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /></p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 22:44 <a href="http://www.blogjava.net/anymobile/articles/340712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to Android Webkit</title><link>http://www.blogjava.net/anymobile/articles/340710.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340710.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340710.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340710.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">整理：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;" style="text-decoration: none; color: #336699; ">netpirate@gmail.com</a>)<br />
日期：2009/09/09<br />
网址：<a href="http://www.anymobile.org/" style="text-decoration: none; color: #336699; ">http://www.anymobile.org</a></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">市面上主流的浏览器:<br />
a. IE，内核Trident；<br />
b. FireFox，内核：Gecko；<br />
c. Safari, Google Chrome，内核：Webkit；<br />
d. Opera，内核 Presto。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><strong style="font-size: 18pt; "><br />
Webkit Architecture</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Android Browser 主要分成三个部分:</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. Webkit Engine (C++):JavascriptCore,WebCore,Webkit;<br />
2. Framework WebView (Java);&nbsp;<br />
3. Browser app (java).</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. JavaScriptCore；<br />
Javascript 引擎<br />
KJS进化到Squirrel Fish<br />
基本的模板库WTF<br />
基本的正则表达式解析模块PCRE<br />
基本编码转换模块，依赖ICU进行<br />
JS解析/编译引擎<br />
JS运行库</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">2. WebCore----render engine；<br />
解析页面，生成DOM tree 和 render tree，最终render整个页面到background。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">网络接口封装<br />
HTML解析引擎<br />
XML解析引擎<br />
CSS解析引擎<br />
JS 客户端对象封装<br />
网页渲染引擎<br />
BackEnd封装与实现<br />
SVG<br />
HTML Editing<br />
Plugins<br />
网页内容处理，Image/Icon<br />
。。。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">3. Webkit-------和平台相关的background实现；<br />
里面包括了android 平台的实现，具体是通过JNI和framework 里面的webview。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">WebCore的高层封装<br />
提供与BackEnd一直的平台支撑<br />
提供给WebCore用户操控相关的支撑接口</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">source analysis：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">1. bindings&nbsp; ---将javaScript 中对象和DOM对象进行绑定，比如window对象和document对象<br />
2. bridge ----将javascript对象和自定义的对象绑定<br />
3. css -------实现了css 2.0 的标准<br />
4. dom-------DOM树的相关对象<br />
5. editing-------所有于Edit相关功能，比如html中的编辑框<br />
6. html -------html 语言的解析<br />
7. loader ------- 加载网页资源以及Cache，FrameLoader ImageLoader<br />
8. platform----- 和平台有关的，比如 图像decoder，图形的绘制，网络操作，字体等<br />
9. plugin------实现了基于Netscape的 NPAPI (Netscape Plugin Application Programming Interface ) 的框架<br />
10. rendering--------- render tree 相关对象<br />
11. resource ------PC 浏览器safair 用到的资源，对于android来说没用<br />
12. svg ---------- svg 语言的解析<br />
13. wml----------- wml 语言的解析<br />
14. xml------------xml 语言的解析以及XSLT 转换，需要libxslt</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><strong style="font-size: 18pt; ">软件应用</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Browsers<br />
-Safari<br />
-Google Chrome/Chromium<br />
-OmniWeb<br />
-Osb-browser &#8211; Nokia<br />
-Web Browser for S60 &#8211; Nokia<br />
-QT Browser Engine</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">E-mail Clients：使用Webkit 作Web 内容处理<br />
-Entourage 2008 &#8211; Microsoft (for Mac)<br />
-Mail-Apple<br />
-Mailplane&nbsp; 特定的Gmail终端</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">Instant Messenger/Chat Clients：使用Webkit对消息进行渲染和样式化<br />
-iChat AV &#8211; Apple<br />
-MSN Messenger &#8211; Microsoft (Mac)<br />
-Yahoo! Messenger</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">RSS Readers：使用Webkit来处理和现实新闻摘要，以及Feed连接到的完整文档<br />
-MiNews<br />
-NetNewsWire<br />
-NewsFire<br />
-PixelNews</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/340710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 22:43 <a href="http://www.blogjava.net/anymobile/articles/340710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XXXX软件Android平台移植Porting说明书</title><link>http://www.blogjava.net/anymobile/articles/340708.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 14 Dec 2010 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/340708.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/340708.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/340708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/340708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/340708.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：徐建祥(netpirate@gmail.com)日期：2010/05/06网址：http://www.anymobile.org目&nbsp; 录1．项目简介&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/340708.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/340708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-12-14 22:41 <a href="http://www.blogjava.net/anymobile/articles/340708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 安装文件.apk反编译</title><link>http://www.blogjava.net/anymobile/articles/334503.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Mon, 11 Oct 2010 19:01:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/334503.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/334503.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/334503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/334503.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/334503.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">编写：徐建祥(netpirate@gmail.com)<br />
日期：2010/10/12<br />
网址：http://www.anymobile.org<br />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "><br />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">反编译包括：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;odex+apk-&gt;apk</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack xml</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack drawable</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;crack class</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">涉及软件：</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;apktool</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;dex2jar</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;jdgui</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;AXMLPrinter2</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;smali</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">&nbsp;&nbsp; &nbsp;Auto-sign</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; ">--待续&#8230;&#8230;</p>
</span>
<img src ="http://www.blogjava.net/anymobile/aggbug/334503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-10-12 03:01 <a href="http://www.blogjava.net/anymobile/articles/334503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XX for Android Design 设计文档</title><link>http://www.blogjava.net/anymobile/articles/334501.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Mon, 11 Oct 2010 18:43:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/334501.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/334501.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/334501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/334501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/334501.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: XX for Android Design&nbsp;设计文档[ Android平台XX视频聊天/XX for Android]日期: 2010.07.20.编写: 徐建祥网址：http://www.anymobile.org&nbsp;修改记录：                                    2010-07-20  ...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/334501.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/334501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-10-12 02:43 <a href="http://www.blogjava.net/anymobile/articles/334501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 即时通讯软件开发日志系列</title><link>http://www.blogjava.net/anymobile/articles/334500.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Mon, 11 Oct 2010 18:36:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/334500.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/334500.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/334500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/334500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/334500.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">编写：徐建祥</span><span lang="EN-US">(netpirate@gmail.com)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">日期：</span><st1:chsdate year="2010" month="10" day="12" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">2010/10/12</span></st1:chsdate></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">网址：</span><span lang="EN-US">http://www.anymobile.org<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">最近几个月一直在负责某即时通讯软件的智能手机平台开发工作（已经有手机厂商和运营商的定制版，近日将发布公版），参考了</span><span lang="EN-US">iphone</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">的设计风格，以及</span><span lang="EN-US">QQ for
Android</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">的功能设计，代码完全自主开发，主要涉及以下方面：</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">调研方案</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">() --&gt; &lt;&lt;XX for Android porting </span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">移植文档</span><span lang="EN-US">&gt;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">需求</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">() --&gt; &lt;&lt;XX for Android UI Spec </span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">产品设计文档</span><span lang="EN-US">&gt;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">设计</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">() --&gt; &lt;&lt;XX for Android design </span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">设计文档</span><span lang="EN-US">&gt;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">开发</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()AndroidManifest</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">设置：</span><span lang="EN-US">debugable/launchModel/task/minSDK/...<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">欢迎界面与初始化检测：手机卡</span><span lang="EN-US">/</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">网络</span><span lang="EN-US">/SD</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">卡</span><span lang="EN-US">(IMEI/IMSI/ACTIVE
NETWORK/WIFI/SDCard)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">注册</span><span lang="EN-US">/</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">登录界面与动画</span><span lang="EN-US">(frame
animation)</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">、数据存储</span><span lang="EN-US">(DB &amp;
Share Proferences)</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">、网络</span><span lang="EN-US">(TCP/CP &amp; HTTP)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">主界面与</span><span lang="EN-US">TAB</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">设计</span><span lang="EN-US">(TabHost
&amp; TabWidget)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">更换皮肤等主题</span><span lang="EN-US">(Theme)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">呼叫小窗口</span><span lang="EN-US">(Custom Dialog)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">工具条</span><span lang="EN-US">(Menu layout &amp; onClick)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">两级聊天室列表</span><span lang="EN-US">(GroupList &amp; ChildView)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">电话簿</span><span lang="EN-US">(Contact v1.0 &amp; Contact v2.0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">资料设置</span><span lang="EN-US">(Radio &amp; EditView &amp; CheckBox)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">消息表情</span><span lang="EN-US">(GridView &amp; SpanningString)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">软件运转到后台，在状态栏显示软件图标</span><span lang="EN-US">(Statusbar)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">软件更新</span><span lang="EN-US">--HTTP</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">检测接口；</span><span lang="EN-US">XML</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">数据格式解析；多线程下载；软件覆盖安装</span><span lang="EN-US">(XML Parser &amp;
MultiThread)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">手机号码绑定与短信监控器</span><span lang="EN-US">(SMS Observer)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">捕获按键：</span><span lang="EN-US">HOME/BACK/SEARCH</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">，</span><span lang="EN-US">on ACTIVITY &amp; DIALOG</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">，后退键可以通过</span><span lang="EN-US">onKeyDown</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">捕获；搜索键可以通过</span><span lang="EN-US">onDispathEvent</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">获悉，其会</span><span lang="EN-US">dismiss</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">对话框</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">相机的本地预览竖屏窗口，默认只支持横屏预览</span><span lang="EN-US">(Camera Preview)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">聊天与消息机制</span><span lang="EN-US">(listener/Callback/Intent/Handler Message/Thread Message)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()JNI &amp; AIDL<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">自定义组件</span><span lang="EN-US">(Activity/Button/Dialog/ListView/In-Out)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()OpenGL &amp; 3D<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">测试</span><span lang="EN-US"> --&gt; &lt;&lt;XX for Android v0.X.X </span><span style="font-family:
宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">测试报告</span><span lang="EN-US">&gt;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()Eclipse Debug(USB / Serial port)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">模拟发送短信和电话呼入</span><span lang="EN-US">(ddms / command)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">抓日志与截屏</span><span lang="EN-US">(adb &amp; ddms &amp; logcat)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">发布</span><span lang="EN-US"> --&gt; &lt;&lt;XX for Android Deploy </span><span style="font-family:
宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">部署文档</span><span lang="EN-US">&gt;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()MD5</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">等编码</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">软件源代码混淆</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()ANT</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">脚本</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">以上开发部分需结合软件源码示例，待续&#8230;&#8230;</span></p>
<img src ="http://www.blogjava.net/anymobile/aggbug/334500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-10-12 02:36 <a href="http://www.blogjava.net/anymobile/articles/334500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 手机之：Huawei_C8600</title><link>http://www.blogjava.net/anymobile/articles/328724.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Thu, 12 Aug 2010 17:24:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328724.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328724.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328724.html</trackback:ping><description><![CDATA[编写：徐建祥(<a href="mailto:netpirate@gmail.com">netpirate@gmail.com</a>)<br />
日期：2010/08/12<br />
网址：<a href="http://www.anymobile.org/">http://www.anymobile.org</a><br />
<br />
Huawei_C8600外形看还可以，硬件配置如下：<br />
<br />
<p>[ro.product.board]: [C8600]<br />
[ro.product.brand]: [China Telecom]<br />
[ro.product.manufacturer]: [HUAWEI]<br />
[ro.board.platform]: [msm7k]<br />
[ro.config.browser_useragent1]: [Mozilla/5.0 (HW-C8600/C8600V100R001C92B225;U;Android/2.1;]<br />
[ro.config.browser_useragent2]: [320*480;CTC/2.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17]<br />
[ro.build.description]: [MSM7x25-user 2.1-update1 ERE27 20100707 ota-rel-keys,release-keys]<br />
<br />
</p>
<p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_10.png" width="320" height="480" /><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_11.png" width="320" height="480" /><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_12.png" width="320" height="480" /><br />
<br />
它主要有2点比较有吸引力：<br />
<br />
1、自动安装驱动程序；<br />
该机型通过USB的方式（手机当U盘用），主动安装SD卡下面的可执行文件，安装驱动。<br />
<br />
这种方法的好处：使用快捷，无需随记附赠驱动程序<br />
这种方法的缺点：SD卡的不少程序其实都有病毒的特征，360安全软件检测后提示是Nnewheur_PE病毒。<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/hw_newheur_PE.png" width="640" height="478" /><br />
<br />
2、KVM虚拟机<br />
该机型安装了日本贵司的KVM：JBlend，可以选择扫描SD卡检测jad/jar文件，有了类似的机子，J2ME平台移植的问题解决来咯，使用KVM的KNI调研动态库。<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_22.png" width="320" height="480" /><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/device_hw_09.png" width="320" height="480" /></p>
<img src ="http://www.blogjava.net/anymobile/aggbug/328724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-13 01:24 <a href="http://www.blogjava.net/anymobile/articles/328724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to Android RILD</title><link>http://www.blogjava.net/anymobile/articles/328593.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 11 Aug 2010 19:03:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328593.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328593.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328593.html</trackback:ping><description><![CDATA[<p>整理：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">netpirate@gmail.com</a>)<br />
日期：2009/09/21<br />
网址：<a href="http://www.anymobile.org/">http://www.anymobile.org</a><br />
<br />
初始化流程，主入口init.rc, rild.c中的main函数，主要完成三个任务：<br />
1. 开启libril.so中的event机制， 在RIL_startEventLoop中，是最核心的由多路I/O驱动的消息循环。<br />
2. 初始化librefrence_ril.so，也就是跟硬件或模拟硬件modem通信的部分（后面统一称硬件）， 通过RIL_Init函数完成。<br />
3. 通过RIL_Init获取一组函数指针RIL_RadioFunctions， 并通过RIL_register完成注册，并打开接受上层命令的socket通道。</p>
<p>RIL的线程和事件</p>
<p>一共创建了3个线程，5个事件：<br />
s_wakeupfd_event(s_fdWakeupRead,pipe),<br />
s_listen_event(s_fdListen,socket RILD),<br />
s_commands_event(accept(s_fdListen...)),<br />
s_debug_event(s_fdDebug,socket RILD-debug),<br />
-1.</p>
<p>第一个线程s_tid_dispath处理所有fd（socket，pipe，port）对应的事件处理，处理和上层RIL.JAVA联系是第一个线程和对应的5个事件。<br />
第二个线程s_tid_mainloop和第三个线程s_tid_reader通过硬件层连接的fd，来处理readline,processline，处理下层硬件相关。</p>
 <img src ="http://www.blogjava.net/anymobile/aggbug/328593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-12 03:03 <a href="http://www.blogjava.net/anymobile/articles/328593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to Android Webkit</title><link>http://www.blogjava.net/anymobile/articles/328592.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 11 Aug 2010 18:57:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328592.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328592.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328592.html</trackback:ping><description><![CDATA[整理：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">netpirate@gmail.com</a>)<br />
日期：2009/09/09<br />
网址：<a href="http://www.anymobile.org">http://www.anymobile.org</a><br />
<br />
<p>市面上主流的浏览器:<br />
a. IE，内核Trident；<br />
b. FireFox，内核：Gecko；<br />
c. Safari, Google Chrome，内核：Webkit；<br />
d. Opera，内核 Presto。<br />
</p>
<strong style="font-size: 18pt"><br />
Webkit Architecture</strong><br />
<br />
<p>Android Browser 主要分成三个部分:</p>
<p>1. Webkit Engine (C++):JavascriptCore,WebCore,Webkit;<br />
2. Framework WebView (Java); <br />
3. Browser app (java).</p>
<p>1. JavaScriptCore；<br />
Javascript 引擎<br />
KJS进化到Squirrel Fish<br />
基本的模板库WTF<br />
基本的正则表达式解析模块PCRE<br />
基本编码转换模块，依赖ICU进行<br />
JS解析/编译引擎<br />
JS运行库</p>
<p>2. WebCore----render engine；<br />
解析页面，生成DOM tree 和 render tree，最终render整个页面到background。</p>
<p>网络接口封装<br />
HTML解析引擎<br />
XML解析引擎<br />
CSS解析引擎<br />
JS 客户端对象封装<br />
网页渲染引擎<br />
BackEnd封装与实现<br />
SVG<br />
HTML Editing<br />
Plugins<br />
网页内容处理，Image/Icon<br />
。。。<br />
</p>
<p>3. Webkit-------和平台相关的background实现；<br />
里面包括了android 平台的实现，具体是通过JNI和framework 里面的webview。</p>
<p>WebCore的高层封装<br />
提供与BackEnd一直的平台支撑<br />
提供给WebCore用户操控相关的支撑接口</p>
<p>source analysis：</p>
<p>1. bindings&nbsp; ---将javaScript 中对象和DOM对象进行绑定，比如window对象和document对象<br />
2. bridge ----将javascript对象和自定义的对象绑定<br />
3. css -------实现了css 2.0 的标准<br />
4. dom-------DOM树的相关对象<br />
5. editing-------所有于Edit相关功能，比如html中的编辑框<br />
6. html -------html 语言的解析<br />
7. loader ------- 加载网页资源以及Cache，FrameLoader ImageLoader<br />
8. platform----- 和平台有关的，比如 图像decoder，图形的绘制，网络操作，字体等<br />
9. plugin------实现了基于Netscape的 NPAPI (Netscape Plugin Application Programming Interface ) 的框架<br />
10. rendering--------- render tree 相关对象<br />
11. resource ------PC 浏览器safair 用到的资源，对于android来说没用<br />
12. svg ---------- svg 语言的解析<br />
13. wml----------- wml 语言的解析<br />
14. xml------------xml 语言的解析以及XSLT 转换，需要libxslt</p>
<p><strong style="font-size: 18pt">软件应用</strong></p>
<p>Browsers<br />
-Safari<br />
-Google Chrome/Chromium<br />
-OmniWeb<br />
-Osb-browser &#8211; Nokia<br />
-Web Browser for S60 &#8211; Nokia<br />
-QT Browser Engine</p>
<p>E-mail Clients：使用Webkit 作Web 内容处理<br />
-Entourage 2008 &#8211; Microsoft (for Mac)<br />
-Mail-Apple<br />
-Mailplane&nbsp; 特定的Gmail终端</p>
<p>Instant Messenger/Chat Clients：使用Webkit对消息进行渲染和样式化<br />
-iChat AV &#8211; Apple<br />
-MSN Messenger &#8211; Microsoft (Mac)<br />
-Yahoo! Messenger</p>
<p>RSS Readers：使用Webkit来处理和现实新闻摘要，以及Feed连接到的完整文档<br />
-MiNews<br />
-NetNewsWire<br />
-NewsFire<br />
-PixelNews</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/anymobile/aggbug/328592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-12 02:57 <a href="http://www.blogjava.net/anymobile/articles/328592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to Android Power Management</title><link>http://www.blogjava.net/anymobile/articles/328591.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 11 Aug 2010 18:27:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328591.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328591.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328591.html</trackback:ping><description><![CDATA[整理：徐建祥(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#101;&#116;&#112;&#105;&#114;&#97;&#116;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">netpirate@gmail.com</a>)<br />
日期：2009/09/16<br />
网址：http://www.anymobile.org<br />
<br />
<p><span style="font-size: 18pt"><strong>Index</strong></span><br />
1. Introduction<br />
2. Architecture<br />
3. How to Work<br />
4. Wake Locks<br />
5. Wake Lock Example<br />
6. Music Application</p>
<p><span style="font-size: 18pt"><strong>1.Introduction</strong></span></p>
<p>Android supports its own Power Management (on top of the standard Linux Power Management) designed with the premise that the CPU shouldn't consume power if no applications or services require power. For more information regarding standard Linux power management, please see Linux Power Management Support at http://kernel.org.<br />
Android requires that applications and services request CPU resources with "wake locks" through the Android application framework and native Linux libraries. If there are no active wake locks, Android will shut down the CPU.</p>
<p><strong style="font-size: 18pt">2.Architecture</strong></p>
<p><br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anymobile/power_manager_arch.png" width="660" height="625" /><br />
<br />
<strong>Framework Layer</strong><br />
/frameworks/base/core/java/android/os/PowerManager.java<br />
/frameworks/base/services/java/com/android/server/PowerManagerService.java<br />
/frameworks/base/core/java/android/os/Power.java<br />
/frameworks/base/core/jni/android_os_power.cpp<br />
/hardware/libhardware_legacy/power/power.c<br />
&nbsp;&nbsp;&nbsp; "/sys/power/wake_lock"<br />
&nbsp;&nbsp;&nbsp; "/sys/power/wake_unlock"<br />
&nbsp;&nbsp;&nbsp; "/sys/power/state"<br />
&nbsp;&nbsp;&nbsp; "/sys/android_power/acquire_partial_wake_lock"<br />
&nbsp;&nbsp;&nbsp; "/sys/android_power/release_wake_lock"<br />
&nbsp;&nbsp;&nbsp; "/sys/android_power/request_state"<br />
&nbsp;&nbsp;&nbsp; &#8230; &#8230;<br />
<strong>Kernel Layer</strong><br />
/drivers/android/power.c<br />
/drivers/power/apm_power.c (Advanced Power Management)</p>
<p><br />
<strong style="font-size: 18pt">3.How to Work</strong></p>
<p>系统正常开机后进入到AWAKE状态，Backlight会从最亮慢慢调节到用户设定的亮度,系统screen off timer(settings-&gt;sound &amp; display-&gt; Display settings -&gt; Screen timeout)开始计时,在计时时间到之前，如果有任何的activity事件发生,如Touch click, keyboard pressed等事件，则将Reset screen off timer, 系统保持在AWAKE状态。如果有应用程序在这段时间内申请了Full wake lock,那么系统也将保持在AWAKE状态，除非用户按下power key. 在AWAKE状态下如果电池电量低或者是用AC供电screen off timer时间到并且选中Keep screen on while pluged in选项,backlight会被强制调节到DIM的状态。<br />
如果Screen off timer时间到并且没有Full wake lock或者用户按了power key，那么系统状态将被切换到NOTIFICATION，并且调用所有已经注册的g_early_suspend_handlers函数，通常会把LCD和Backlight驱动注册成early suspend类型，如有需要也可以把别的驱动注册成early suspend，这样就会在第一阶段被关闭. 接下来系统会判断是否有partial wake lock acquired，如果有则等待其释放，在等待的过程中如果有user activity事件发生，系统则马上回到AWAKE状态;如果没有partial wake lock acquired，则系统会马上调用函数pm_suspend关闭其它相关的驱动，让CPU进入休眠状态。<br />
系统在Sleep状态时如果检测到任何一个Wakeup source，则CPU会从Sleep状态被唤醒,并且调用相关的驱动的resume函数，接下来马上调用前期注册的early suspend驱动的resume函数，最后系统状态回到AWAKE状态.</p>
<p>Registering Kernel-level Drivers with the PM Driver<br />
#Be notified immediately before power down<br />
android_register_early_suspend(android_early_suspend_t *handler)<br />
#Be notified immediately after power up<br />
android_register_early_resume(android_early_resume_t *handler)<br />
HARDWARE LIGHTS<br />
#define LIGHT_ID_BACKLIGHT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "backlight"<br />
#define LIGHT_ID_KEYBOARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "keyboard"<br />
#define LIGHT_ID_BUTTONS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "buttons"<br />
#define LIGHT_ID_BATTERY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "battery"<br />
#define LIGHT_ID_NOTIFICATIONS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "notifications"<br />
#define LIGHT_ID_ATTENTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attention"<br />
#define LIGHT_ID_BLUETOOTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "bluetooth"<br />
#define LIGHT_ID_WIFI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "wifi"</p>
<p><strong style="font-size: 18pt">4.Wake Locks</strong></p>
<p>Wake locks are used by applications and services to request CPU resources.<br />
Types of Wake Locks:<br />
-ACQUIRE_CAUSES_WAKEUP: Normally wake locks don't actually wake the device, they just cause it to remain on once it's already on.<br />
-FULL_WAKE_LOCK:&nbsp; The screen and keyboard are on at full brightness<br />
-ON_AFTER_RELEASE: When this wake lock is released, poke the user activity timer<br />
-PARTIAL_WAKE_LOCK: The CPU is running, The screen might not be on.<br />
-SCREEN_BRIGHT_WAKE_LOCK: The screen is on at full brightness; the keyboard backlight will be allowed to go off.<br />
-SCREEN_DIM_WAKE_LOCK: The screen is on, but the keyboard backlight will be allowed to go off, and the screen backlight will be allowed to go dim.</p>
<p><strong style="font-size: 18pt">5.Wake Lock Example</strong></p>
<p>1). Acquire handle to the PowerManager service.<br />
&lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt;<br />
&lt;uses-permission android:name="android.permission.DEVICE_POWER" /&gt;</p>
<p>PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);</p>
<p>2). Create a wake lock and specify the power management flags for screen, timeout, etc.</p>
<p>PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);</p>
<p>3). Acquire wake lock.<br />
wl.acquire();</p>
<p>4). Perform operation (play MP3, open HTML page, etc.).</p>
<p>5). Release wake lock.<br />
wl.release();</p>
<p><strong style="font-size: 18pt">6.Music Application</strong></p>
<p>/packages/apps/Music/AndroidManifest.xml<br />
&lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt;<br />
/packages/apps/Music/src/.../MediaPlayerService.java PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);<br />
WakeLock mWakeLock =<br />
&nbsp;&nbsp;&nbsp; pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; this.getClass().getName());<br />
#Sets this WakeLock is not ref counted.<br />
mWakeLock.setReferenceCounted(false);<br />
&#8230;<br />
#The lock will be released after 30 seconds.<br />
mWakeLock.acquire(30000);<br />
&#8230;<br />
mHandler.sendEmptyMessage(RELEASE_WAKELOCK);<br />
#Release the claim to the CPU or screen being on.<br />
mWakeLock.release();</p>
<p><strong style="font-size: 18pt">Reference</strong></p>
<p>Android Platform Development Kit:Power Management<br />
http://www.netmite.com/android/mydroid/development/pdk/docs/power_management.html<br />
<br />
</p>
<p>Android Power Management(Steve Guo)<br />
http://letsgoustc.spaces.live.com/blog/cns!89AD27DFB5E249BA!526.entry</p>
<p>Android 电源管理(hzdysymbol)<br />
http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx</p>
<p>Linux Power Management Support<br />
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.24.y.git;a=blob;f=Documentation/pm.txt</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/anymobile/aggbug/328591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-12 02:27 <a href="http://www.blogjava.net/anymobile/articles/328591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XXXX软件Android平台移植说明书</title><link>http://www.blogjava.net/anymobile/articles/328588.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 11 Aug 2010 16:24:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328588.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328588.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328588.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：徐建祥(netpirate@gmail.com)日期：2010/05/06网址：http://www.anymobile.org目&nbsp; 录1．项目简介&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/328588.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/328588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-12 00:24 <a href="http://www.blogjava.net/anymobile/articles/328588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 程序的安装、卸载和更新</title><link>http://www.blogjava.net/anymobile/articles/328406.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 10 Aug 2010 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328406.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328406.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328406.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328406.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">作者：徐建祥</span><span lang="EN-US">(netpirate@gmail.com)<br />
</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">日期：</span><st1:chsdate year="2010" month="7" day="28" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">2010/07/28</span></st1:chsdate><span lang="EN-US"><br />
</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">网址：</span><span lang="EN-US">http://www.anymobile.org</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">安装程序：软件从无到有。</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">卸载程序：软件从有到无。</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">更新程序：软件的覆盖安装，可以保留原版本的数据，提升软件版本。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">安装程序的方法：</span><span lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">1、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">通过</span><span lang="EN-US">Intent</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">机制，调出系统安装应用，重新安装应用的话，会保留原应用的数据。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">String fileName =
Environment.getExternalStorageDirectory() + </span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;mso-font-kerning:
0pt">apkName</span></em><span lang="EN-US">;</span></p>
<p class="MsoNormal"><span lang="EN-US">Uri uri = Uri.fromFile(</span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;
mso-font-kerning:0pt">new</span></strong><span lang="EN-US"> File(fileName));</span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">Intent intent = </span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;
mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"> Intent(Intent.</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;
mso-font-kerning:0pt">ACTION_VIEW</span></em><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">);</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:
0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">intent.setDataAndType(Uri, </span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;
mso-font-kerning:0pt">application/vnd.android.package-archive"</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;
mso-font-kerning:0pt">);</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">startActivity(intent);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">2、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">直接调用安装接口。</span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">Uri</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;mso-font-kerning:
0pt"> mPackageURI</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"> = Uri.<em>fromFile</em>(</span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;
mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"> File(Environment.<em>getExternalStorageDirectory</em>()
+ </span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:#0000C0;mso-font-kerning:0pt">apkName</span></em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt">));<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:#7F0055;mso-font-kerning:0pt">int</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;
mso-font-kerning:0pt"> installFlags = 0;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">PackageManager pm =
getPackageManager();</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:#7F0055;mso-font-kerning:0pt">try</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:
0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">{</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp; </span>PackageInfo pi = pm.getPackageInfo(</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;
mso-font-kerning:0pt">packageName</span></em><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">, </span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:
0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp; </span><span style="mso-spacerun:yes">&nbsp;</span>PackageManager.</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;
mso-font-kerning:0pt">GET_UNINSTALLED_PACKAGES</span></em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt">);</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;mso-font-kerning:
0pt">if</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">(pi != </span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;mso-font-kerning:
0pt">null</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">)</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp; </span>{</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>installFlags |= PackageManager.</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;
mso-font-kerning:0pt">REPLACE_EXISTING_PACKAGE</span></em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt">;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp; </span>}</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">}</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:#7F0055;mso-font-kerning:0pt">catch</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;
mso-font-kerning:0pt"> (NameNotFoundException e)</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">{}<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">PackageInstallObserver observer
= </span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:#7F0055;mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt"> PackageInstallObserver();</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">pm.installPackage(</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;mso-font-kerning:
0pt">mPackageURI</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">, observer, installFlags);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">安装应用权限：</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;mso-font-kerning:
0pt">android.permission.INSTALL_PACKAGES</span></em></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">系统应用（安装在</span><span lang="EN-US">/system/app</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">下面）可以采用该方式，第三方应用无法申请安装卸载权限。</span></p>
<p class="MsoNormal"><span lang="EN-US">java.lang.SecurityException: Neither user
10039 nor current process has android.permission.INSTALL_PACKAGES.</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">3、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">执行</span><span lang="EN-US">install</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">命令。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">install &#8211;r </span><span style="font-family:
宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">更新安装，默认新安装；如果不附上</span><span lang="EN-US">-r</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">参数，则会清楚原应用的数据，版本一致则无法安装。</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">（</span><span lang="EN-US">1</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">）</span><span lang="EN-US">am start &#8230;</span></p>
<p class="MsoNormal"><span><span style="mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Verdana;mso-hansi-font-family:Verdana;
color:black">（</span></span><span lang="EN-US" style="mso-bidi-font-size:10.5pt;font-family:Verdana;color:black">2</span><span><span style="mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:Verdana;mso-hansi-font-family:Verdana;color:black">）</span></span><span><span lang="EN-US" style="mso-bidi-font-size:10.5pt;
font-family:Verdana;color:black">Runtime.exec(String[] args)<o:p></o:p></span></span></p>
<p class="MsoNormal"><span><span style="mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Verdana;mso-hansi-font-family:Verdana;
color:black">（</span></span><span lang="EN-US" style="mso-bidi-font-size:10.5pt;font-family:Verdana;color:black">3</span><span><span style="mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:Verdana;mso-hansi-font-family:Verdana;color:black">）</span></span><span><span lang="EN-US" style="mso-bidi-font-size:10.5pt;
font-family:Verdana;color:black">Class&lt;?&gt; execClass =
Class.forName("android.os.Exec");</span></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">4、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">执行</span><span lang="EN-US">cp / adb push</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">命令。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">由系统检测到应用程序有更新，自动完成重新安装。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l1 level1 lfo1;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">5、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">通过第三方软件实现。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Market</span><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">，</span><span lang="EN-US">EOE</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">，</span><span lang="EN-US">eTrackDog</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">均采用第一种方法实现更新。</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">优点：由系统核心应用程序控制安装程序；</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">缺点：无法控制安装过程；安装完成后，也无法立刻启动应用，需要用户确认；无法扩展。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">实例：</span><span lang="EN-US">Market</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">查找安装程序</span></p>
<p class="MsoNormal"><span lang="EN-US">Intent intent = </span></p>
<p class="MsoNormal" style="text-indent:21.0pt;mso-char-indent-count:2.0"><span lang="EN-US">new Intent(Intent.ACTION_VIEW,
Uri.parse("market://search?q=pname:your.app.id"));</span></p>
<p class="MsoNormal"><span lang="EN-US">startActivity(intent);</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">卸载程序的方法：</span><span lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo2;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">1、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">通过</span><span lang="EN-US">Intent</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">机制，调出系统卸载应用。</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">Uri </span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;mso-font-kerning:0pt">packageURI</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;
mso-font-kerning:0pt"> = Uri.parse("package:</span><span lang="EN-US"> your.app.id</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;
mso-font-kerning:0pt">");<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">Intent intent = </span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F0055;
mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"> Intent(Intent.</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;
mso-font-kerning:0pt">ACTION_DELETE</span></em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt">);</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">startActivity(intent);</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo2;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">2、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">直接调用卸载接口。</span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align:
none;text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">PackageInstallObserver observer
= </span><strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:#7F0055;mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black;mso-font-kerning:
0pt"> PackageInstallObserver();</span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Courier New&quot;;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;
color:black;mso-font-kerning:0pt">pm.installPackage(</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#0000C0;mso-font-kerning:
0pt">mPackageURI</span><span lang="EN-US" style="font-size:10.0pt;font-family:
&quot;Courier New&quot;;color:black;mso-font-kerning:0pt">, observer, installFlags);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">卸载应用权限：</span><em><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;mso-font-kerning:
0pt">android.permission.DELETE_PACKAGES</span></em></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo2;
tab-stops:list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family:
&quot;Times New Roman&quot;"><span style="mso-list:Ignore">3、<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;
</span></span></span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">运行</span><span lang="EN-US">rm apk</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">安装文件，由系统检测后调用卸载应用。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">备注说明：</span><span lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">Android</span><span style="font-family:
宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">系统的应用安装，在系统设置里面有一项，是否安装未知源，所在在软件更新的时候，需要检测这个选项，如果打钩，则只允许安装</span><span lang="EN-US">Market</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">源提供的安装程序，如果没有打钩的话，系统安装应用时会提示用户设置，如果选择设置，设置好后，无法返回安装界面；如果选择取消，则推出安装程序。所以，如果是更新的话，一定要在下载之前就检测许可安装源的设置，或者在下载前检测是否已经下载过新的安装程序，避免重复下载安装程序。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">相关的代码如下：</span></p>
<div style="border-width: initial; border-color: initial; border-left-color: #d1d7dc; padding-top: 0cm; padding-right: 0cm; padding-bottom: 0cm; padding-left: 8pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #fafafa; margin-left: 10.5pt; margin-right: 0cm; background-position: initial initial; background-repeat: initial initial; ">
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">1.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><strong><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#7F0055;
mso-font-kerning:0pt">int</span></strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">&nbsp;result&nbsp;=&nbsp;Settings.Secure.getInt(getContentResolver(),&nbsp;Settings.Secure.INSTALL_NON_MARKET_APPS,&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#C00000;mso-font-kerning:0pt">0</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">);&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">2.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><strong><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#7F0055;
mso-font-kerning:0pt">if</span></strong><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">&nbsp;(result&nbsp;==&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#C00000;mso-font-kerning:0pt">0</span><span lang="EN-US" style="font-size:
10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">)&nbsp;{&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">3.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#008200;
mso-font-kerning:0pt">//&nbsp;show&nbsp;some&nbsp;dialog&nbsp;here&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:black;border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;
padding:0cm;mso-font-kerning:0pt">&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#5C5C5C;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">4.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#008200;
mso-font-kerning:0pt">//&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:black;border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;
padding:0cm;mso-font-kerning:0pt">&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#5C5C5C;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">5.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#008200;
mso-font-kerning:0pt">//&nbsp;and&nbsp;may&nbsp;be&nbsp;show&nbsp;application&nbsp;settings&nbsp;dialog&nbsp;manually&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:black;border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;
padding:0cm;mso-font-kerning:0pt">&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:#5C5C5C;
mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">6.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">Intent&nbsp;intent&nbsp;=&nbsp;</span><strong><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#7F0055;mso-font-kerning:0pt">new</span></strong><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;
border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;padding:0cm;
mso-font-kerning:0pt">&nbsp;Intent();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">7.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">8.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">startActivity(intent);&nbsp;&nbsp;
&nbsp;&nbsp;</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="margin-left:18.0pt;text-align:left;
text-indent:-18.0pt;line-height:13.5pt;mso-pagination:widow-orphan;mso-list:
l0 level1 lfo3;tab-stops:list 36.0pt;background:#FAFAFA;border:none;mso-border-left-alt:
solid #D1D7DC .75pt;padding:0cm;mso-padding-alt:0cm 0cm 0cm 8.0pt"><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
mso-fareast-font-family:&quot;Bitstream Vera Sans Mono&quot;;mso-bidi-font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><span style="mso-list:Ignore">9.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US" style="font-size:10.0pt;
font-family:&quot;Bitstream Vera Sans Mono&quot;;color:black;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;mso-font-kerning:0pt">}</span><span lang="EN-US" style="font-size:9.0pt;font-family:&quot;Bitstream Vera Sans Mono&quot;;
color:#5C5C5C;mso-font-kerning:0pt"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span><span lang="EN-US" style="font-size:10.0pt;font-family:Arial;color:#333333">public static final
class </span></span><span lang="EN-US" style="font-size:17.0pt">Settings.Secure </span><span><span lang="EN-US" style="font-size:10.0pt;font-family:
Arial;color:#333333">extends</span></span><span class="apple-converted-space"><span lang="EN-US" style="font-size:10.0pt;font-family:Arial;color:#333333">&nbsp;</span></span><span><span lang="EN-US" style="font-size:10.0pt;font-family:
Arial;color:#333333"><a href="http://www.coolapk.com/docs/reference/android/provider/Settings.NameValueTable.html"><span style="color:#006699">Settings.NameValueTable</span></a></span></span></p>
<p class="MsoNormal" align="left" style="margin-top:18.0pt;margin-right:0cm;
margin-bottom:6.0pt;margin-left:0cm;text-align:left;mso-pagination:widow-orphan;
mso-outline-level:4;background:#E2E2E2"><span lang="EN-US" style="font-size:10.0pt;
mso-bidi-font-size:12.0pt;font-family:Arial;color:#222222;mso-font-kerning:
0pt">public static final&nbsp;<a href="http://www.coolapk.com/docs/reference/java/lang/String.html"><span style="color:#006699">String</span></a>&nbsp;</span><strong><span lang="EN-US" style="font-size:11.0pt;font-family:Arial;color:#222222;mso-font-kerning:0pt">INSTALL_NON_MARKET_APPS<o:p></o:p></span></strong></p>
<p class="MsoNormal" align="left" style="text-align:left;mso-pagination:widow-orphan"><span lang="EN-US" style="font-size:8.0pt;font-family:Arial;color:#999999;mso-font-kerning:
0pt">Since:</span><span lang="EN-US" style="font-size:8.0pt;mso-bidi-font-size:
12.0pt;font-family:Arial;color:#999999;mso-font-kerning:0pt">&nbsp;</span><span lang="EN-US" style="font-size:8.0pt;font-family:Arial;color:#999999;mso-font-kerning:
0pt"><a href="http://www.coolapk.com/docs/guide/appendix/api-levels.html#level3"><span style="mso-bidi-font-size:12.0pt;color:#999999">API Level 3</span></a><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="text-align:left;line-height:15.6pt;
mso-pagination:widow-orphan"><span lang="EN-US" style="font-size:10.0pt;
font-family:Arial;color:#333333;mso-font-kerning:0pt">Whether the package
installer should allow installation of apps downloaded from sources other than
the Android Market (vending machine). 1 = allow installing from other sources 0
= only allow installing from the Android Market</span><span style="font-family:
宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">下面是程序更新的几个步骤演示：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; "><img src="http://www.blogjava.net/images/blogjava_net/anymobile/45914/o_upgrade_00.png" width="160" height="240" alt="" /><br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; "><img src="http://www.blogjava.net/images/blogjava_net/anymobile/45914/o_upgrade_01.png" width="160" height="240" alt="" /><br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; "><img src="http://www.blogjava.net/images/blogjava_net/anymobile/45914/o_upgrade_02.png" width="160" height="240" alt="" /><br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; "><img src="http://www.blogjava.net/images/blogjava_net/anymobile/45914/o_upgrade_05.png" width="160" height="240" alt="" /><br />
</span></p>
<p class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">OVER!</span></p>
<img src ="http://www.blogjava.net/anymobile/aggbug/328406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-10 14:00 <a href="http://www.blogjava.net/anymobile/articles/328406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android手机上监听短信的两种方式</title><link>http://www.blogjava.net/anymobile/articles/328396.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Tue, 10 Aug 2010 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/328396.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/328396.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/328396.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/328396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/328396.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：徐建祥(netpirate@gmail.com)日期：2010/08/10网址：http://www.anymobile.org&nbsp;Android手机上监听短信有两种方式：&nbsp;1、 接受系统的短信广播，操作短信内容。&nbsp;优点：操作方便，适合简单的短信应用。缺点：来信会在状态栏显示通知信息。&nbsp;AndroidManif...&nbsp;&nbsp;<a href='http://www.blogjava.net/anymobile/articles/328396.html'>阅读全文</a><img src ="http://www.blogjava.net/anymobile/aggbug/328396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-08-10 11:50 <a href="http://www.blogjava.net/anymobile/articles/328396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android(1.5) 开机图片/文字/动画 修改</title><link>http://www.blogjava.net/anymobile/articles/314687.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Sat, 06 Mar 2010 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/314687.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/314687.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/314687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/314687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/314687.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2010/03/06<br />
网址：http://www.anymobile.org<br />
<br />
Android 开机会出现3个画面：<br />
a. Linux 系统启动，出现Linux小企鹅画面(reboot)；<br />
b. Android平台启动初始化，出现"A N D R I O D"文字字样画面；<br />
c. Android平台图形系统启动，出现含闪动的ANDROID字样的动画图片(start)。<br />
<br />
1/ 开机图片(Linux小企鹅)<br />
<br />
Linux Kernel引导启动后，加载该图片。<br />
/kernel/trunk/drivers/video/fbmem.c<br />
/kernel/trunk/drivers/video/fbmem.h<br />
/kernel/trunk/drivers/video/logo/logo.c<br />
/kernel/trunk/drivers/video/logo/logo.h<br />
/kernel/trunk/drivers/video/logo/Kconfig<br />
/kernel/trunk/include/linux/linux_logo.h<br />
<br />
2/ 开机文字("A N D R I O D")<br />
<br />
Android 系统启动后，读取 /initlogo.rle（一张565 rle压缩的位图），如果读取成功，测在/dev/graphics/fb0显示Logo图片；如果读取失败，则将/dev/tty0设为TEXT模式，并打开/dev/tty0，输出文本&#8220;A N D R I O D&#8221;字样。<br />
<br />
相关代码：<br />
<br />
/system/core/init/init.c<br />
/system/core/init/init.h<br />
/system/core/init/init.rc<br />
/system/core/init/logo.c<br />
<br />
*.rle文件的制作步骤:<br />
a. 使用GIMP或者Advanced Batch Converter软件，将图象转换为RAW格式；<br />
b. 使用android自带的rgb2565工具，将RAW格式文件转换为RLE格式(如：rgb2565 -rle &lt; initlogo.raw &gt; initlogo.rle)。<br />
<br />
3/ 开机动画(闪动的ANDROID字样的动画图片)<br />
<br />
Android的系统登录动画类似于Windows系统的滚动条，是由前景和背景两张PNG图片组成，这两张图片存在于/system/framework/framework-res.apk文件当中。前景图片（android-logo-mask.png）上的Android文字部分镂空，背景图片（android-logo-shine.png）则是简单的纹理。系统登录时，前景图片在最上层显示，程序代码控制背景图片连续滚动，透过前景图片文字镂空部分滚动显示背景纹理，从而实现动画效果。<br />
<br />
相关代码：<br />
/frameworks/base/libs/surfaceflinger/BootAnimation.h<br />
/frameworks/base/libs/surfaceflinger/BootAnimation.cpp<br />
<br />
/frameworks/base/core/res/assets/images/android-logo-mask.png<br />
Android默认的前景图片，文字部分镂空，大小256&#215;64<br />
/frameworks/base/core/res/assets/images/android-logo-shine.png<br />
Android默认的背景图片，有动感效果，大小512&#215;64<br />
<br />
参考文档：<br />
<br />
图说Android开机画面和开机动画<br />
http://www.shudoo.com/09/1030/15/13418431.html<br />
<br />
initlogo.rle: display an image on boot<br />
http://forum.xda-developers.com/showthread.php?t=443431<br />
<br />
分析Android 根文件系统启动过程（init守护进程分析）<br />
http://crazier9527.javaeye.com/blog/454635<br />
<br />
<img src ="http://www.blogjava.net/anymobile/aggbug/314687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-03-06 13:06 <a href="http://www.blogjava.net/anymobile/articles/314687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 调试.so库文件</title><link>http://www.blogjava.net/anymobile/articles/314685.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Sat, 06 Mar 2010 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/314685.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/314685.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/314685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/314685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/314685.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2010/03/06<br />
网址：http://www.anymobile.org<br />
<br />
<p>调试步骤如下：<br />
1/ 将异常的地址信息存到文本文件，并存放在项目根目录；<br />
2/ 使用panic.py解析该文件；<br />
3/ 根据返回的信息(文件名;行号;方法名)调试程序。<br />
<br />
以操作第三方的Touch input 输入法为例，过程如下：<br />
<br />
# 该输入法的英文和手写OK，操作中文输入法时，出现异常，软键盘消失，异常日志如下<br />
02-05 06:41:19.834 D/dalvikvm(&nbsp; 751): Trying to load lib /system/lib/libimezi.so 0x43e2a788<br />
02-05 06:41:19.874 D/dalvikvm(&nbsp; 751): Added shared lib /system/lib/libimezi.so 0x43e2a788<br />
02-05 06:41:20.035 I/DEBUG&nbsp;&nbsp; (&nbsp; 551): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***<br />
02-05 06:41:20.035 I/DEBUG&nbsp;&nbsp; (&nbsp; 551): Build fingerprint: 'unknown'<br />
02-05 06:41:20.035 I/DEBUG&nbsp;&nbsp; (&nbsp; 551): pid: 751, tid: 751&nbsp; &gt;&gt;&gt; com.htc.android.cime &lt;&lt;&lt;<br />
02-05 06:41:20.045 I/DEBUG&nbsp;&nbsp; (&nbsp; 551): signal 11 (SIGSEGV), fault addr 00000003<br />
02-05 06:41:20.045 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r0 00000000&nbsp; r1 00000000&nbsp; r2 807248ec&nbsp; r3 807248ec<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r4 00252d80&nbsp; r5 00000004&nbsp; r6 00000001&nbsp; r7 00000000<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r8 beff8550&nbsp; r9 41459d28&nbsp; 10 41459d18&nbsp; fp 00000000<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; ip 8072430c&nbsp; sp beff84f0&nbsp; lr 80716b4f&nbsp; pc 80717bce cpsr 60000030<br />
02-05 06:41:20.135 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #00&nbsp; pc 00017bce&nbsp; /system/lib/libimezi.so<br />
02-05 06:41:20.135 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #01&nbsp; pc 00010f80&nbsp; /system/lib/libimezi.so<br />
02-05 06:41:20.145 I/DEBUG&nbsp;&nbsp; (&nbsp; 551): stack:<br />
02-05 06:41:20.155 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84b0&nbsp; ad083e10&nbsp; <br />
02-05 06:41:20.155 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84b4&nbsp; ad05d44f&nbsp; /system/lib/libdvm.so<br />
02-05 06:41:20.155 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84b8&nbsp; ad06b8a0&nbsp; /system/lib/libdvm.so<br />
02-05 06:41:20.155 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84bc&nbsp; ad083e10&nbsp; <br />
02-05 06:41:20.167 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84c0&nbsp; 43e2aa90&nbsp; <br />
02-05 06:41:20.175 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84c4&nbsp; 00000003&nbsp; <br />
02-05 06:41:20.175 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84c8&nbsp; 00000014&nbsp; <br />
02-05 06:41:20.185 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp; beff84cc&nbsp; 80716b4f&nbsp; /system/lib/libimezi.so<br />
<br />
# 保存异常日志，存为文件: 20100205_ime.txt<br />
02-05 06:41:20.045 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r0 00000000&nbsp; r1 00000000&nbsp; r2 807248ec&nbsp; r3 807248ec<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r4 00252d80&nbsp; r5 00000004&nbsp; r6 00000001&nbsp; r7 00000000<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; r8 beff8550&nbsp; r9 41459d28&nbsp; 10 41459d18&nbsp; fp 00000000<br />
02-05 06:41:20.055 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp; ip 8072430c&nbsp; sp beff84f0&nbsp; lr 80716b4f&nbsp; pc 80717bce&nbsp; cpsr 60000030<br />
02-05 06:41:20.135 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #00&nbsp; pc 00017bce&nbsp; /system/lib/libimezi.so<br />
02-05 06:41:20.135 I/DEBUG&nbsp;&nbsp; (&nbsp; 551):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #01&nbsp; pc 00010f80&nbsp; /system/lib/libimezi.so<br />
<br />
# 执行脚本<br />
xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt <br />
read file ok<br />
/home/xujianxiang/workspace/xujx/wing15/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line: '/home/xujianxiang/workspace/xujx/wing15/out/target/product/generic/symbols/system/lib/libimezi.so': No such file<br />
Traceback (most recent call last):<br />
&nbsp; File "./panic.py", line 69, in &lt;module&gt;<br />
&nbsp;&nbsp;&nbsp; print "%-30s%s" % (list[1],list[0])<br />
IndexError: list index out of range<br />
<br />
# 没找到库文件，因为这个文件是第三方的，只存放在/out/target/product/generic/system/lib /libimezi.so，拷贝一份存到/out/target/product/generic/symbols/system/lib /libimezi.so，再次执行脚本<br />
xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt <br />
read file ok<br />
zi81keyd.c:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Zi8GetTableData<br />
zi81keyd.c:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Zi8InitializeDynamic<br />
<br />
# 成功解析异常，没有zi8库文件所致，更新如下库文件，输入法支持中文拼音。<br />
/system/lib/zi/Zi8DatPYP_CN.z8d<br />
/system/lib/zi/Zi8DatPYS_CN.z8d<br />
/system/lib/zi/Zi8DatZHA_CN.z8d<br />
/system/lib/zi/Zi8DatZHA_HK.z8d<br />
/system/lib/zi/Zi8DatZHA_TW.z8d<br />
/system/lib/zi/Zi8DatZYP_TW.z8d<br />
/system/lib/zi/Zi8DatZYS_TW.z8d</p>
<p><br />
</p>
附 panic.py：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">!/usr/bin/python</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />#</span><span style="color: #008000">&nbsp;stack&nbsp;symbol&nbsp;parser</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;os<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;string<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;sys<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">#</span><span style="color: #008000">define&nbsp;android&nbsp;product&nbsp;name</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />#</span><span style="color: #008000">ANDROID_PRODUCT_NAME&nbsp;=&nbsp;'generic'</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">ANDROID_PRODUCT_NAME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">smdk6410</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />ANDROID_WORKSPACE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;os.getcwd()</span><span style="color: #000000">+</span><span style="color: #800000">"</span><span style="color: #800000">/</span><span style="color: #800000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;addr2line&nbsp;tool&nbsp;path&nbsp;and&nbsp;symbol&nbsp;path</span><span style="color: #008000"><br />
</span><span style="color: #008080">15</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">addr2line_tool&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ANDROID_WORKSPACE&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />symbol_dir&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ANDROID_WORKSPACE&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">out/target/product/</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ANDROID_PRODUCT_NAME&nbsp;</span><span style="color: #000000">+</span><span style="color: #800000">'</span><span style="color: #800000">/symbols</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />symbol_bin&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;symbol_dir&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">/system/bin/</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />symbol_lib&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;symbol_dir&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">/system/lib/</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ReadLog:<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">__init__</span><span style="color: #000000">(self,filename):<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.logname&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;filename<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;parse(self):<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;file(self.logname,</span><span style="color: #800000">'</span><span style="color: #800000">r</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;f.readlines()<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;lines&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;[]:<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">read&nbsp;file&nbsp;ok</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">:<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">read&nbsp;file&nbsp;failed</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">[]<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;line&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;lines:<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;line.find(</span><span style="color: #800000">'</span><span style="color: #800000">stack</span><span style="color: #800000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">:<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">stop&nbsp;search</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">elif</span><span style="color: #000000">&nbsp;line.find(</span><span style="color: #800000">'</span><span style="color: #800000">system</span><span style="color: #800000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">:<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">print&nbsp;'find&nbsp;one&nbsp;item'&nbsp;+&nbsp;line</span><span style="color: #008000"><br />
</span><span style="color: #008080">37</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.append(line)<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ParseContent:<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">__init__</span><span style="color: #000000">(self,addr,lib):<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;addr&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;pc&nbsp;address</span><span style="color: #008000"><br />
</span><span style="color: #008080">43</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.exename&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;lib&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;executable&nbsp;or&nbsp;shared&nbsp;library</span><span style="color: #008000"><br />
</span><span style="color: #008080">44</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;addr2line(self):<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;addr2line_tool&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;-C&nbsp;-f&nbsp;-s&nbsp;-e&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;symbol_dir&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;self.exename&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;self.address<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">print&nbsp;cmd</span><span style="color: #008000"><br />
</span><span style="color: #008080">47</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;os.popen(cmd)<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;stream.readlines();<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;map(string.strip,lines)<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;list<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />inputarg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sys.argv<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;len(inputarg)&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">:<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">Please&nbsp;input&nbsp;panic&nbsp;log</span><span style="color: #800000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;exit()<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />filename&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;inputarg[</span><span style="color: #000000">1</span><span style="color: #000000">]<br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />readlog&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ReadLog(filename)<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />inputlist&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;readlog.parse()<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;item&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;inputlist:<br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;itemsplit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;item.split()<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ParseContent(itemsplit[</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">],itemsplit[</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">])<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;test.addr2line()<br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">%-30s%s</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;(list[</span><span style="color: #000000">1</span><span style="color: #000000">],list[0])<br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<img src ="http://www.blogjava.net/anymobile/aggbug/314685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-03-06 12:56 <a href="http://www.blogjava.net/anymobile/articles/314685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android AlarmClock 闹钟应用 简单分析</title><link>http://www.blogjava.net/anymobile/articles/308466.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 06 Jan 2010 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/308466.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/308466.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/308466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/308466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/308466.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2010/01/06<br />
网址：http://www.anymobile.org<br />
<br />
1/ set a alarm clock<br />
1.1 update alarms.db<br />
1.2 update com.android.alarmclock_preferences.xml<br />
1.3 update Settings.System.NEXT_ALARM_FORMATTED for status bar<br />
1.4 set Kernel RTC alarm or send a message if no driver<br />
<br />
flow:<br />
com.android.alarmclock.AlarmClock.onCreate() -&gt; SetAlarm.onPreferenceTreeClick() -&gt; SetAlarm.saveAlarm() -&gt; <br />
Alarm.setAlarm() -&gt; Alarm.setNextAlert() -&gt; Alarm.enableAlert(ALARM_ALERT_ACTION)/saveNextAlarm(Settings.System.NEXT_ALARM_FORMATTED) -&gt;<br />
android.app.AlarmManager.set() -&gt; AlarmManagerService.set() -&gt; AlarmManagerService.setRepeating -&gt; AlarmManagerService.setLocked() -&gt;<br />
android.app.IAlarmManager.set() -&gt; RTC.save()// /dev/alarms<br />
<br />
2/ play a clarm clock<br />
<br />
flow:<br />
RTC (WAKEUP) -&gt; AlarmReceiver.onReceive(ALARM_ALERT_ACTION) -&gt; AlarmAlert.onCreate() -&gt; <br />
AlarmAlertWakeLock.acquire()/KeyguardManager.newKeyguardLock().disableKeyguard() -&gt; <br />
AlarmKlaxon.postPlay() -&gt;&nbsp; AlarmKlaxon.KillerCallback().onKilled() -&gt; AlarmAlert.dismiss() -&gt; <br />
AlarmAlertWakeLock.release()/KeyguardManager.newKeyguardLock().reenableKeyguard()<br />
<br />
some description:<br />
<br />
/**<br />
&nbsp;* Days of week coded as single int, convenient for DB storage:<br />
&nbsp;*<br />
&nbsp;* 0x00:&nbsp; no day<br />
&nbsp;* 0x01:&nbsp; Monday<br />
&nbsp;* 0x02:&nbsp; Tuesday<br />
&nbsp;* 0x04:&nbsp; Wednesday<br />
&nbsp;* 0x08:&nbsp; Thursday<br />
&nbsp;* 0x10:&nbsp; Friday<br />
&nbsp;* 0x20:&nbsp; Saturday<br />
&nbsp;* 0x40:&nbsp; Sunday<br />
&nbsp;*/<br />
<br />
/**<br />
&nbsp;* Alarm type<br />
&nbsp;*<br />
&nbsp;* ELAPSED_REALTIME&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Alarm time in time since boot, including sleep, This alarm does not wake the device up.<br />
&nbsp;* ELAPSED_REALTIME_WAKEUP&nbsp;&nbsp;&nbsp; Alarm time in time since boot, including sleep, This alarm will wake up the device when it goes off.<br />
&nbsp;* RTC&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Alarm time in wall clock time in UTC, This alarm does not wake the device up.<br />
&nbsp;* RTC_WAKEUP&nbsp;&nbsp;&nbsp; Alarm time in wall clock time in UTC, This alarm will wake up the device when it goes off.<br />
&nbsp;*/<br />
<br />
db example:<br />
<br />
# cat /data/data/com.android.alarmclock/shared_prefs/com.android.alarmclock_preferences.xml<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version='1.0'&nbsp;encoding='utf-8'&nbsp;standalone='yes'&nbsp;</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">map</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">string&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="label"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">警报</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">string</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">boolean&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="vibrate"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">boolean&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="on"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">map</span><span style="color: #0000ff;">&gt;</span></div>
<br />
# sqlite3 /data/data/com.android.alarmclock/databases/alarms.db<br />
SQLite version 3.5.9<br />
Enter ".help" for instructions<br />
sqlite&gt; .tables<br />
alarms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android_metadata<br />
sqlite&gt; .schema alarms<br />
CREATE TABLE alarms (_id INTEGER PRIMARY KEY,hour INTEGER, minutes INTEGER, daysofweek INTEGER, alarmtime INTEGER, enabled INTEGER, vibrate INTEGER, message TEXT, alert TEXT);<br />
sqlite&gt; select * from alarms;<br />
1|7|0|127|0|0|1||<br />
2|8|30|31|1262766600000|1|1|警报|content://media/internal/audio/media/21<br />
3|9|0|0|0|0|1||<br />
<img src ="http://www.blogjava.net/anymobile/aggbug/308466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2010-01-06 17:27 <a href="http://www.blogjava.net/anymobile/articles/308466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 软件安装程序(*.apk)的结构分析、反编译以及汉化</title><link>http://www.blogjava.net/anymobile/articles/307094.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 23 Dec 2009 17:22:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/307094.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/307094.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/307094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/307094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/307094.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2009/12/23<br />
网址：http://www.anymobile.org<br />
<br />
1/ apk文件结构：<br />
<br />
<p>Apk文件：</p>
<p>Android application package文件。每个要安装到OPhone平台的应用都要被编译打包为一个单独的文件，后缀名为.apk，其中包含了应用的二进制代码、资源、配置文件等。</p>
<p>apk文件实际是一个zip压缩包，可以通过解压缩工具解开。可以用zip解开*.apk文件，下面是一个helloword的apk示例文件</p>
<p>|&#8211; AndroidManifest.xml&nbsp;&nbsp; <br />
|&#8211; META-INF&nbsp;&nbsp; <br />
|&nbsp;&nbsp; |&#8211; CERT.RSA&nbsp;&nbsp; <br />
|&nbsp;&nbsp; |&#8211; CERT.SF&nbsp;&nbsp; <br />
|&nbsp;&nbsp; `&#8211; MANIFEST.MF&nbsp;&nbsp; <br />
|&#8211; classes.dex&nbsp;&nbsp; <br />
|&#8211; res&nbsp;&nbsp; <br />
|&nbsp;&nbsp; |&#8211; drawable&nbsp;&nbsp; <br />
|&nbsp;&nbsp; |&nbsp;&nbsp; `&#8211; icon.png&nbsp;&nbsp; <br />
|&nbsp;&nbsp; `&#8211; layout&nbsp;&nbsp; <br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `&#8211; main.xml&nbsp;&nbsp; <br />
`&#8211; resources.arsc <br />
</p>
<br />
2/ apk文件解压后反编译：<br />
<br />
2.1 图片等多媒体文件：没有编译，无需反编译。<br />
<br />
2.2 layout等二进制xml文件：使用AXMLPrinter将其转换为可读的xml文件：java -jar AXMLPrinter2.jar main.xml &gt; new_main.xml<br />
工具下载地址：<a href="http://code.google.com/p/android4me/downloads/list">http://code.google.com/p/android4me/downloads/list</a><br />
<br />
2.3 class文件反编译：<br />
<p>Android模拟器中提供了一个dex文件的反编译工具，dexdump。用法为首先启动Android模拟器，把要查看的dex文件用adb push上传的模拟器中，然后通过adb shell登录，找到要查看的dex文件，执行dexdump xxx.dex。</p>
<p>目前在网上能找到的另一个dex文件的反编译工具是Dedexer。Dedexer可以读取dex格式的文件，生成一种类似于汇编语言的输出。这种输出与jasmin[ ]的输出相似，但包含的是Dalvik的字节码。</p>
<br />
2.4 resources.arsc资源文件：参考汉化部分<br />
<br />
3/ android 软件汉化<br />
<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0" class="Apple-style-span">
<p style="padding-bottom: 6px; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 6px"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方案1：通过16进制编码软件自行替换英文<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.<font face="Verdana">JDK(Java Development Kit) -开发环境<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.Auto-Sign -签名工具<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.Hex Workshop -十六进制编辑器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.WinRAR -压缩软件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图文并茂示例：<a href="http://bbs.blueshow.net/thread-604533-1-1.html">http://bbs.blueshow.net/thread-604533-1-1.html</a></p>
<p style="padding-bottom: 6px; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 6px"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方案2：通过汉化开发人员自行编写的汉化软件For Android<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.<font face="Verdana">JDK(Java Development Kit) -开发环境<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.Android ResEdit-汉化软件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.WinRAR -压缩软件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图文并茂示例：<a href="http://mobile.yesky.com/363/9292863.shtml">http://mobile.yesky.com/363/9292863.shtml</a><br />
<br />
</span></p>
参考文档：<br />
<br />
Apk文件结构简介 <a href="http://www.ophonesdn.com/article/show/38">http://www.ophonesdn.com/article/show/38</a><br />
Apk文件结构、dex反编译 <a href="http://ken.opda.cn/?p=31">http://ken.opda.cn/?p=31</a><br />
android 资源文件反编译 <a href="http://ken.opda.cn/?p=53">http://ken.opda.cn/?p=53</a><br />
<img src ="http://www.blogjava.net/anymobile/aggbug/307094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2009-12-24 01:22 <a href="http://www.blogjava.net/anymobile/articles/307094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 1.5 平台整合 Google Apps (Market;GTalk;Google Maps;GMail;Voice Search)</title><link>http://www.blogjava.net/anymobile/articles/306653.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Sat, 19 Dec 2009 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/306653.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/306653.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/306653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/306653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/306653.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2009/12/19<br />
网址：http://www.anymobile.org<br />
<br />
移植Google Apps (Market;GTalk;Google Maps;GMail;Voice Search)的大致步骤如下：<br />
<br />
1/ 通过ADB，从Google定制的手机下载相关的文件(jar/lib库，apk安装文件，xml权限文件等)；<br />
2/ 修改两个make脚本文件：core.mk和generic_with_google.mk；<br />
3/ make generic_with_google，生产新的system.img镜像文件的时候包含这些文件。<br />
<br />
注意点：<br />
<br />
a. 移植的手机需要支持上网，通过SetupWizard.apk验证Google帐户，该程序在待机界面前运行，验证失败的话，会无法进入待机界面；Market;GTalk;GMail均需要验证Google帐户，Market需要GTalk服务，设置<span style="color: #800080; font-family: verdana; font-size: 13px; line-height: 21px; ">ro.setupwizard.mode=DISABLED</span>，则开机不会强制验证。<br />
b. Android 1.5版本不支持街景；<br />
c. 如果只移植Google Maps，则只需要移植以下3个文件：<br />
Adding vendor/google/app/Maps.apk<br />
Adding vendor/google/etc/permissions/com.google.android.maps.xml<br />
Adding vendor/google/framework/com.google.android.maps.jar<br />
<br />
下面是core.mk和generic_with_google.mk的代码修改：<br />
<br />
Sending build/target/product/core.mk<br />
<div style="border-left-color: #cccccc; padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; width: 98%; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;"> 1</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_BRAND :=</span><br />
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_NAME :=</span><br />
</span><span style="color: #008080;"> 3</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_DEVICE :=</span><br />
</span><span style="color: #008080;"> 4</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_POLICY :=</span> android.policy_phone<br />
</span><span style="color: #008080;"> 5</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_PROPERTY_OVERRIDES :=</span> \<br />
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">    ro.config.notification_sound=F1_New_SMS.ogg<br />
</span><span style="color: #008080;"> 7</span> <span style="color: #000000;"><br />
</span><span style="color: #008080;"> 8</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_PACKAGES :=</span> \<br />
</span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    framework-res \<br />
</span><span style="color: #008080;">10</span> <span style="color: #000000;">    Browser \<br />
</span><span style="color: #008080;">11</span> <span style="color: #000000;">    Contacts \<br />
</span><span style="color: #008080;">12</span> <span style="color: #000000;">    Launcher \<br />
</span><span style="color: #008080;">13</span> <span style="color: #000000;">    HTMLViewer \<br />
</span><span style="color: #008080;">14</span> <span style="color: #000000;">    Phone \<br />
</span><span style="color: #008080;">15</span> <span style="color: #000000;">    ContactsProvider \<br />
</span><span style="color: #008080;">16</span> <span style="color: #000000;">    DownloadProvider \<br />
</span><span style="color: #008080;">17</span> <span style="color: #000000;">    GoogleSearch \<br />
</span><span style="color: #008080;">18</span> <span style="color: #000000;">    MediaProvider \<br />
</span><span style="color: #008080;">19</span> <span style="color: #000000;">    SettingsProvider \<br />
</span><span style="color: #008080;">20</span> <span style="color: #000000;">    TelephonyProvider \<br />
</span><span style="color: #008080;">21</span> <span style="color: #000000;">    UserDictionaryProvider \<br />
</span><span style="color: #008080;">22</span> <span style="color: #000000;">    PackageInstaller \<br />
</span><span style="color: #008080;">23</span> <span style="color: #000000;">    Bugreport \<br />
</span><span style="color: #008080;">24</span> <span style="color: #000000;">    <span style="color: red;">ImProvider</span></span></div>
<br />
Sending build/target/product/generic_with_google.mk<br />
<br />
<div style="border-left-color: #cccccc; padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; width: 98%; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;"> 1</span> <span style="color: #000000;"><span style="color: #b60000;"># This is a generic product that isn't specialized for a specific device.</span><br />
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;"><span style="color: #b60000;"># It includes the base Android platform including some Google-specific features.</span><br />
</span><span style="color: #008080;"> 3</span> <span style="color: #000000;"><span style="color: #b60000;"># If you do not want to include Google specific features, you should derive </span><br />
</span><span style="color: #008080;"> 4</span> <span style="color: #000000;"><span style="color: #b60000;"># from generic.mk</span><br />
</span><span style="color: #008080;"> 5</span> <span style="color: #000000;"><span style="font-family: verdana; line-height: 21px; "><span style="color: #000000; "><span style="color: #0000ff; ">PRODUCT_PROPERTY_OVERRIDES </span>:= \<br />
</span><span style="color: #000000; "><span style="color: #ff0000; "><span class="Apple-tab-span" style="white-space:pre">	</span>ro.com.google.locationfeatures=1 \</span> <br />
</span><span style="color: #000000; "><span class="Apple-tab-span" style="white-space:pre">	</span>ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html \<br />
</span><span style="color: #000000; "><span class="Apple-tab-span" style="white-space:pre">	</span>ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html \</span></span><span style="font-family: verdana; line-height: 21px; "><span style="color: #000000; "><br />
</span><span style="color: #000000; "><span style="color: #800080; "><span class="Apple-tab-span" style="white-space:pre">	</span>ro.setupwizard.mode=DISABLED</span> </span></span><br />
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_PACKAGES :=</span> \<br />
</span><span style="color: #008080;"> 7</span> <span style="color: #000000;">    GoogleContactsProvider \<br />
</span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    GoogleSubscribedFeedsProvider<br />
</span><span style="color: #008080;"> 9</span> <span style="color: #000000;"><span style="color: #b60000;">#     \</span><br />
</span><span style="color: #008080;">10</span> <span style="color: #000000;"><span style="color: #b60000;">#    com.google.android.gtalkservice \</span><br />
</span><span style="color: #008080;">11</span> <span style="color: #000000;"><span style="color: #b60000;">#    com.google.android.maps</span><br />
</span><span style="color: #008080;">12</span> <span style="color: #000000;"><span style="color: #0010ff;">PRODUCT_COPY_FILES :=</span> \<br />
</span><span style="color: #008080;">13</span> <span style="color: #000000;">    vendor/google/app/checkin.apk:system/app/checkin.apk \<br />
</span><span style="color: #008080;">14</span> <span style="color: #000000;">    vendor/google/app/Gmail.apk:system/app/Gmail.apk \<br />
</span><span style="color: #008080;">15</span> <span style="color: #000000;">    vendor/google/app/GmailProvider.apk:system/app/GmailProvider.apk \<br />
</span><span style="color: #008080;">16</span> <span style="color: #000000;">    vendor/google/app/GoogleApps.apk:system/app/GoogleApps.apk \<br />
</span><span style="color: #008080;">17</span> <span style="color: #000000;">    vendor/google/app/GooglePartnerSetup.apk:system/app/GooglePartnerSetup.apk \<br />
</span><span style="color: #008080;">18</span> <span style="color: #000000;">    vendor/google/app/GoogleSettingsProvider.apk:system/app/GoogleSettingsProvider.apk \<br />
</span><span style="color: #008080;">19</span> <span style="color: #000000;">    vendor/google/app/gtalkservice.apk:system/app/gtalkservice.apk \<br />
</span><span style="color: #008080;">20</span> <span style="color: #000000;">    vendor/google/app/Maps.apk:system/app/Maps.apk \<br />
</span><span style="color: #008080;">21</span> <span style="color: #000000;">    vendor/google/app/MediaUploader.apk:system/app/MediaUploader.apk \<br />
</span><span style="color: #008080;">22</span> <span style="color: #000000;">    vendor/google/app/NetworkLocation.apk:system/app/NetworkLocation.apk \<br />
</span><span style="color: #008080;">23</span> <span style="color: #000000;">   <span style="color: #000000;"> vendor/google/app/SetupWizard.apk:system/app/SetupWizard.apk \</span><br />
</span><span style="color: #008080;">24</span> <span style="color: #000000;">    vendor/google/app/Street.apk:system/app/Street.apk \<br />
</span><span style="color: #008080;">25</span> <span style="color: #000000;">    vendor/google/app/Talk.apk:system/app/Talk.apk \<br />
</span><span style="color: #008080;">26</span> <span style="color: #000000;">    vendor/google/app/Vending.apk:system/app/Vending.apk \<br />
</span><span style="color: #008080;">27</span> <span style="color: #000000;">    vendor/google/app/VoiceSearch.apk:system/app/VoiceSearch.apk \<br />
</span><span style="color: #008080;">28</span> <span style="color: #000000;">    vendor/google/etc/permissions/com.google.android.gtalkservice.xml:system/etc/permissions/com.google.android.gtalkservice.xml \<br />
</span><span style="color: #008080;">29</span> <span style="color: #000000;">    vendor/google/etc/permissions/com.google.android.maps.xml:system/etc/permissions/com.google.android.maps.xml \<br />
</span><span style="color: #008080;">30</span> <span style="color: #000000;">    vendor/google/framework/com.google.android.gtalkservice.jar:system/framework/com.google.android.gtalkservice.jar \<br />
</span><span style="color: #008080;">31</span> <span style="color: #000000;">    vendor/google/framework/com.google.android.maps.jar:system/framework/com.google.android.maps.jar \<br />
</span><span style="color: #008080;">32</span> <span style="color: #000000;">    vendor/google/lib/libspeech.so:system/lib/libspeech.so<br />
</span><span style="color: #008080;">33</span> <span style="color: #000000;"><br />
</span><span style="color: #008080;">34</span> <span style="color: #000000;"><span style="color: #20ff00;">$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)</span><br />
</span><span style="color: #008080;">35</span> <span style="color: #000000;"><br />
</span><span style="color: #008080;">36</span> <span style="color: #000000;"><span style="color: #a40000;"># Overrides</span><br />
</span><span style="color: #008080;">37</span> <span style="color: #000000;"><span style="color: #2000ff;">PRODUCT_NAME :=</span> generic_with_google<br />
</span><span style="color: #008080;">38</span> </div>
<span  style="font-family: verdana; font-size: 14px; line-height: 21px; ">
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">注意：</p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">我用的HTC的image提取的google maps 3.0的jar库和apk安装文件，只可以定位成功，无法读取定位后的地图数据，抛出ClassCastException异常：</p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">03-01 16:52:58.561 E/AndroidRuntime( 2453): Uncaught handler: thread main exiting due to uncaught exception<br />
03-01 16:52:58.936 E/AndroidRuntime( 2453): java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable<br />
03-01 16:52:58.936 E/AndroidRuntime( 2453):&#160;&#160;&#160;&#160; at com.google.android.maps.MyLocationOverlay.getLocationDot(MyLocationOverlay.java:180)</p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">最后，我是提取的release版的Android 1.5版本的相关文件(Google Add-ons)，方法如下：</p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1)/system/etc/permissions/com.google.android.gtalkservice.xml<br />
2)/system/etc/permissions/com.google.android.maps.xml<br />
3)/system/framework/com.google.android.gtalkservice.jar<br />
4)/system/framework/om.google.android.maps.jar<br />
5)/system/app/Maps.apk (Google Maps v3.1)</p>
</span><br />
参考：<br />
<span  style="font-family: verdana; font-size: 14px; line-height: 21px; ">
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Google Mobile<br />
<a href="http://www.google.com/mobile/" style="text-decoration: none; color: #336699; ">http://www.google.com/mobile/</a><br />
<br />
HTC Developer Center<br />
<a href="http://developer.htc.com/index.html" style="text-decoration: none; color: #336699; ">http://developer.htc.com/index.html</a><br />
<br />
Building Android 1.5 &#8211; Google Apps and audio files<br />
<a href="http://www.johandekoning.nl/index.php/2009/07/12/building-android-1-5-google-apps-and-audio-files/" style="text-decoration: none; color: #336699; ">http://www.johandekoning.nl/index.php/2009/07/12/building-android-1-5-google-apps-and-audio-files/</a><br />
<br />
Google Voice Search Wiki<br />
<a href="http://en.wikipedia.org/wiki/Google_Voice_Search" style="text-decoration: none; color: #336699; ">http://en.wikipedia.org/wiki/Google_Voice_Search</a></p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Using Google Maps in Android<br />
<a href="http://mobiforge.com/developing/story/using-google-maps-android" style="text-decoration: none; color: #336699; ">http://mobiforge.com/developing/story/using-google-maps-android</a></p>
<p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Android Add-ons(Map API)<br />
<a href="http://android.nanshapo.com/topic/view/812.html" style="text-decoration: none; color: #336699; ">http://android.nanshapo.com/topic/view/812.html</a></p>
</span>
<br />
<br />
<img src ="http://www.blogjava.net/anymobile/aggbug/306653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2009-12-19 13:36 <a href="http://www.blogjava.net/anymobile/articles/306653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 平台的 Microsoft Office &amp; Adobe PDF 软件相关</title><link>http://www.blogjava.net/anymobile/articles/306647.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Sat, 19 Dec 2009 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/306647.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/306647.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/306647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/306647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/306647.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2009/12/19<br />
网址：http://www.anymobile.org<br />
<br />
1/ <a href="http://www.dataviz.com/products/documentstogo/android/index.html">Decuments To Go</a><br />
<a href="http://www.dataviz.com/products/documentstogo/android/index.html">http://www.dataviz.com/products/documentstogo/android/index.html</a><br />
Supports latest Microsoft Office &amp; Adobe -- formats (doc, docx, xls, xlsx, ppt, pptx &amp; pdf)<br />
<br />
免费版：Word view; Excel view<br />
收费版：Word; Excel; PowerPoint; PDF view, create &amp; edit (单独安装key app)<br />
<br />
2/ <a href="http://www.quickoffice.com/quickoffice_android/">QuickOffice</a><br />
<a href="http://www.quickoffice.com/quickoffice_android/">http://www.quickoffice.com/quickoffice_android/</a><br />
Supports Microsoft Office &amp; TXT -- formats (doc, xls, ppt, &amp; txt)<br />
<br />
免费版：Word view; Excel view<br />
收费版：Word; Excel; PowerPoint; TXT view, rename, sort<br />
<br />
比较两款软件：<br />
<br />
软件性质：都是商业软件。<br />
功能方面：操作的都是SD卡上的文档，免费版本都只有Word和Excel的浏览功能；收费版本，前者可以编辑Office 和 PDF 文件；后者只可以浏览Office和TXT，不支持编辑功能。<br />
软件流程：Decuments To Go=Microsoft Office+Adobe Reader；而QuickOffice=FileManager+Office view。<br />
<br />
另外，测试中发现，Decuments To Go创建的word文件，QuickOffice无法打开，而电脑上的OpenOffice则可以打开。<br />
<br />
<img src ="http://www.blogjava.net/anymobile/aggbug/306647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2009-12-19 12:43 <a href="http://www.blogjava.net/anymobile/articles/306647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 与J2ME 虚拟机相关资料</title><link>http://www.blogjava.net/anymobile/articles/306643.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Sat, 19 Dec 2009 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/306643.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/306643.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/306643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/306643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/306643.html</trackback:ping><description><![CDATA[<p>作者：徐建祥(netpirate@gmail.com)<br />
日期：2009/11/16<br />
网址：http://www.anymobile.org</p>
<p>某些手机厂商的J2ME虚拟机是移植的SUN公司开源授权的PHONEME虚拟机(https://phoneme.dev.java.net/)；南京某公司(CM)也开发了J2ME虚拟机，具体情况不详。</p>
<p><img src="https://mobileandembedded.dev.java.net/branding/images/phoneme/welcomePhoneME7-80pct.png" alt="PhoneME" width="440" height="140" />
</p>
<p>phoneME Feature software is an open source development effort
addressing the market and technical requirements of &#8220;feature phone&#8221;
devices. The majority (about 80%) of mobile phones in the world today
are feature phones. Devices of this type typically include a
high-resolution screen, multiple forms of messaging (SMS, MMS, IM,
Email), basic 2D and 3D gaming, a camera, music player, Internet
browser, etc.
<br />
&nbsp;<br />
Powering all this functionality is a core set of Java ME technologies known
as CLDC (the Java VM) and MIDP (the mobile information device profile).
CLDC and MIDP are the most widely adopted Java ME application platforms
used in mobile phones today. Layered on this base is a set of additional
Java ME technologies often called &#8220;optional packages&#8221; that come
in the form of JSRs (Java Specification Requests). <br />
&nbsp;<br />
The
phoneME Feature software includes the latest milestone and
in-development implementations of CLDC and MIDP as well as
implementations for a number of optional package JSRs. <a href="https://phoneme.dev.java.net/content/phoneme_platforms.html#phonemefeature">&nbsp;&nbsp;more...</a>
</p>
<p>下面是三篇相关的文档资料：</p>
<h1 class="title_txt">
<span style="color: #333399;"><span style="font-size: large;">j2me程序移植入android总结</span>
</span>
</h1>
<p>http://blog.csdn.net/lzf_china/archive/2009/10/16/4676111.aspx</p>
<p>思路无非3种：
</p>
<p>1, 提供一个android下的j2me虚拟机，让j2me程序运行 如OPhone下的百宝箱<br />
2, 提供一个转换工具，将j2me的jar放入apk中，重新用apt制作成apk安装程序，并允许，如netmite<br />
3, 提供类库中间层，将android中没有的j2me类库用android的程序实现出来，并用android sdk重新编译成apk 如J2AB</p>
<p><span style="font-size: 14pt; color: #02368d;"><strong>JavaME无法满足Android,只有设计Dalvik</strong>
</span>
</p>
<p>http://blog.chinaunix.net/u2/85805/showart_1421638.html</p>
<p><strong>Android为什么不使用Native C/C++？<br />
Android为什么不使用Sun JavaME？</strong>
</p>
<p><span style="font-size: 14pt; color: #02368d;"><strong>Dalvik和J2ME相比先进到了哪里？</strong>
</span>
</p>
<p>http://blog.chinaunix.net/u2/85805/showart_1421644.html</p>
<p>分析了Dalvik和J2ME的区别。首先Dalvik虚拟机是Google自己开发的 Java虚拟机，运行在Android平台上。J2ME是Sun公司的移动平台Java VM。</p>
<p>一、运行环境对比<br />
二、模拟器<br />
三、兼容性<br />
四、运行效率<br />
<span style="font-size: small;">五、安全性<br />
六、类库完整性</span>
</p>
<img src ="http://www.blogjava.net/anymobile/aggbug/306643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2009-12-19 11:49 <a href="http://www.blogjava.net/anymobile/articles/306643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 的系统属性(SystemProperties)设置分析</title><link>http://www.blogjava.net/anymobile/articles/301989.html</link><dc:creator>Xu Jianxiang</dc:creator><author>Xu Jianxiang</author><pubDate>Wed, 11 Nov 2009 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/anymobile/articles/301989.html</guid><wfw:comment>http://www.blogjava.net/anymobile/comments/301989.html</wfw:comment><comments>http://www.blogjava.net/anymobile/articles/301989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anymobile/comments/commentRss/301989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anymobile/services/trackbacks/301989.html</trackback:ping><description><![CDATA[作者：徐建祥(netpirate@gmail.com)<br />
日期：2009/11/11<br />
网址：http://www.anymobile.org<br />
<br />
Android 的系统属性包括两部分：文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中：<br />
<br />
<span style="color: #000000;">bionic</span><span style="color: #000000;">/</span><span style="color: #000000;">libc</span><span style="color: #000000;">/</span><span style="color: #000000;">include</span><span style="color: #000000;">/</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">_system_properties.h</span><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span> <span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PROP_SERVICE_NAME&nbsp;"property_service"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PROP_PATH_RAMDISK_DEFAULT&nbsp;&nbsp;"/default.prop"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PROP_PATH_SYSTEM_BUILD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"/system/build.prop"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PROP_PATH_SYSTEM_DEFAULT&nbsp;&nbsp;&nbsp;"/system/default.prop"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PROP_PATH_LOCAL_OVERRIDE&nbsp;&nbsp;&nbsp;"/data/local.prop"</span></div>
<br />
后者则通过frameworks/base/core/java/android/os/SystemProperties.java的接口定义，<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">native</span><span style="color: #000000;">&nbsp;String&nbsp;native_get(String&nbsp;key);<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">native</span><span style="color: #000000;">&nbsp;String&nbsp;native_get(String&nbsp;key,&nbsp;String&nbsp;def);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">native</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;native_set(String&nbsp;key,&nbsp;String&nbsp;def);<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;set(String&nbsp;key,&nbsp;String&nbsp;val)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(key.length()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;PROP_NAME_MAX)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IllegalArgumentException(</span><span style="color: #000000;">"</span><span style="color: #000000;">key.length&nbsp;&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;PROP_NAME_MAX);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(val&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;val.length()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;PROP_VALUE_MAX)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IllegalArgumentException(</span><span style="color: #000000;">"</span><span style="color: #000000;">val.length&nbsp;&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROP_VALUE_MAX);<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;native_set(key,&nbsp;val);<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
该接口类在初始化运行环境中注册对应的cpp接口android_os_SystemProperties.cpp，实际操作通过JNI调用的是cpp文件对应的接口：<br />
<br />
frameworks/base/core/jni/AndroidRuntime.cpp<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;android&nbsp;{<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">extern</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;register_android_os_SystemProperties(JNIEnv&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">env);<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
frameworks/base/core/jni/android_os_SystemProperties.cpp<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;SystemProperties_set(JNIEnv&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">env,&nbsp;jobject&nbsp;clazz,&nbsp;jstring&nbsp;keyJ,&nbsp;jstring&nbsp;valJ)<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;err;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;key;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;val;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;env</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetStringUTFChars(keyJ,&nbsp;NULL);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(valJ&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;NULL&nbsp;pointer&nbsp;not&nbsp;allowed&nbsp;here&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;env</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetStringUTFChars(valJ,&nbsp;NULL);<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;property_set(key,&nbsp;val);<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ReleaseStringUTFChars(keyJ,&nbsp;key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(valJ&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL)&nbsp;{<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ReleaseStringUTFChars(valJ,&nbsp;val);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
设置key的value时，需要作鉴权，根据设置程序所在进程的fd获知uid值，比如system server进程可以设置net打头的key，不可以设置gsm打头的key，相关的定义如下：<br />
<br />
system/core/include/private/android_filesystem_config.h<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_ROOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;/*&nbsp;traditional&nbsp;unix&nbsp;root&nbsp;user&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;/*&nbsp;system&nbsp;server&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_RADIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1001&nbsp;&nbsp;/*&nbsp;telephony&nbsp;subsystem,&nbsp;RIL&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_DHCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1014&nbsp;&nbsp;/*&nbsp;dhcp&nbsp;client&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_SHELL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2000&nbsp;&nbsp;/*&nbsp;adb&nbsp;and&nbsp;debug&nbsp;shell&nbsp;user&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_CACHE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2001&nbsp;&nbsp;/*&nbsp;cache&nbsp;access&nbsp;*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;AID_APP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10000&nbsp;/*&nbsp;first&nbsp;app&nbsp;user&nbsp;*/</span></div>
<br />
system/core/init/property_service.c<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;PERSISTENT_PROPERTY_DIR&nbsp;&nbsp;"/data/property"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">prefix;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;uid;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;property_perms[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">net.rmnet0.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">net.gprs.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ril.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">gsm.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">net.dns</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">net.usb0</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_RADIO&nbsp;},<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">net.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">dev.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">runtime.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">hw.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">sys.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">service.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">wlan.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">dhcp.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">dhcp.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_DHCP&nbsp;},<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">debug.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SHELL&nbsp;},<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">log.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AID_SHELL&nbsp;},<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">service.adb.root</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;AID_SHELL&nbsp;},<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">persist.sys.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">persist.service.</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;AID_SYSTEM&nbsp;},<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;}<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;property_set(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">name,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">value)<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property_changed(name,&nbsp;value);<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;start_property_service(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fd;<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load_properties_from_file(PROP_PATH_SYSTEM_BUILD);<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load_properties_from_file(PROP_PATH_LOCAL_OVERRIDE);<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Read&nbsp;persistent&nbsp;properties&nbsp;after&nbsp;all&nbsp;default&nbsp;values&nbsp;have&nbsp;been&nbsp;loaded.&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load_persistent_properties();<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;create_socket(PROP_SERVICE_NAME,&nbsp;SOCK_STREAM,&nbsp;</span><span style="color: #000000;">0666</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(fd&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fcntl(fd,&nbsp;F_SETFD,&nbsp;FD_CLOEXEC);<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fcntl(fd,&nbsp;F_SETFL,&nbsp;O_NONBLOCK);<br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen(fd,&nbsp;</span><span style="color: #000000;">8</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;fd;<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;handle_property_set_fd(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fd)<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">(msg.cmd)&nbsp;{<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;PROP_MSG_SETPROP:<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.name[PROP_NAME_MAX</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.value[PROP_VALUE_MAX</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(memcmp(msg.name,</span><span style="color: #000000;">"</span><span style="color: #000000;">ctl.</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(check_control_perms(msg.value,&nbsp;cr.uid))&nbsp;{<br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_control_message((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;msg.name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">,&nbsp;(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;msg.value);<br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(</span><span style="color: #000000;">"</span><span style="color: #000000;">sys_prop:&nbsp;Unable&nbsp;to&nbsp;%s&nbsp;service&nbsp;ctl&nbsp;[%s]&nbsp;uid:&nbsp;%d&nbsp;pid:%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">,&nbsp;msg.value,&nbsp;cr.uid,&nbsp;cr.pid);<br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(check_perms(msg.name,&nbsp;cr.uid))&nbsp;{<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property_set((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;msg.name,&nbsp;(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;msg.value);<br />
</span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(</span><span style="color: #000000;">"</span><span style="color: #000000;">sys_prop:&nbsp;permission&nbsp;denied&nbsp;uid:%d&nbsp;&nbsp;name:%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cr.uid,&nbsp;msg.name);<br />
</span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">:<br />
</span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
在开机启动后的init操作中，会执行一个loop循环，当检测到有新的设置时，进入设置流程，鉴权失败会提示相关的异常，如sys_prop: permission denied uid:1000&nbsp; name:gsm.phone.id<br />
<br />
system/core/init/init.c<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;property_changed(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">name,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">value)<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(property_triggers_enabled)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue_property_triggers(name,&nbsp;value);<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drain_action_queue();<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">argv)<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse_config_file(</span><span style="color: #000000;">"</span><span style="color: #000000;">/init.rc</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qemu_init();<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device_fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;device_init();<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property_init();<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(console_name,&nbsp;O_RDWR);<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property_set_fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;start_property_service();<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">0</span><span style="color: #000000;">].fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;device_fd;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">0</span><span style="color: #000000;">].events&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;POLLIN;<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">1</span><span style="color: #000000;">].fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;property_set_fd;<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">1</span><span style="color: #000000;">].events&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;POLLIN;<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">2</span><span style="color: #000000;">].fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;signal_recv_fd;<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ufds[</span><span style="color: #000000;">2</span><span style="color: #000000;">].events&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;POLLIN;<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_count&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(;;)&nbsp;{<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ufds[</span><span style="color: #000000;">0</span><span style="color: #000000;">].revents&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;POLLIN)<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_device_fd(device_fd);<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ufds[</span><span style="color: #000000;">1</span><span style="color: #000000;">].revents&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;POLLIN)<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_property_set_fd(property_set_fd);<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ufds[</span><span style="color: #000000;">3</span><span style="color: #000000;">].revents&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;POLLIN)<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_keychord(keychord_fd);<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
OVER！
<img src ="http://www.blogjava.net/anymobile/aggbug/301989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anymobile/" target="_blank">Xu Jianxiang</a> 2009-11-11 17:40 <a href="http://www.blogjava.net/anymobile/articles/301989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>