??xml version="1.0" encoding="utf-8" standalone="yes"?> ~写Q徐建祥(netpirate@gmail.com) 日期Q?010/11/22 |址Qhttp://www.anymobile.org 主要涉及两个技术点Q?/p>
1、图标加灰色qoQ?/p>
2、android的图片资源默认是静态的Q单实例Q如果两个IM好友的头像一P最单的都是用的软g自带头像Q有一个在U,一个离U,直接改变头像的灰度,则两个用L头像都会变灰或者在U,{案是:Drawable.mutate()?/p>
代码如下Q?/p>
OVERQ?/p>
~写Q徐建祥(netpirate@gmail.com) 日期Q?010/10/12 |址Qhttp://www.anymobile.org 反编译包括: odex+apk->apk crack xml crack drawable crack class 涉及软gQ?/p>
apktool dex2jar jdgui AXMLPrinter2 smali Auto-sign --待箋…… XX for Android Design 设计文档 [ Androidq_XX视频聊天/XX for Android] 日期: 2010.07.20. ~写: 徐徏?nbsp; |址Qhttp://www.anymobile.org 修改记录Q?nbsp; 2010-07-20 徐徏?nbsp; 2010-08-06 徐徏?nbsp; ??nbsp; 1. 目概述 1.1. 功能介绍 1.2. 开发环?/p>
1.3. q行环境 1.4. 名词解释 2. pȝ架构 3. 模块设计 3.1. Android消息通讯 3.1.1. Intent意图 3.1.2. Broadcast Receiverq播接受?/p>
3.1.3. Thread MessageU程消息 3.1.4. callback机制 3.1.5. Observer观察者模?nbsp; 3.1.6. Listener监听?nbsp; 3.2. AV引擎?nbsp; 3.3. 协议?nbsp; 4. 体系l构 5. 程设计 5.1. 注册 5.2. d 5.3. 注销 5.4. 点对点聊?nbsp; 5.4.1. 发送文字聊天数?nbsp; 5.4.2. 接受文字聊天数据 5.4.3. 发送音视频聊天数据 5.4.4. 接受韌频多媒体数据 5.4.5. d关闭聊天 5.4.6. Ҏ关闭聊天 5.5. 短信邀误频聊?nbsp; 5.6. 聊天室聊?nbsp; 5.7. 聊天室{点对点聊?nbsp; 5.7.1. d邀误友聊?nbsp; 5.7.2. 接受聊友聊天邀?nbsp; 5.8. WAP用户以及TCP代理服务?/p>
6. 接口设计 6.1. JNI 6.2. PTS 6.3. AV Engine 7. 数据存储 7.1. Shared Preferences 7.2. SQLite Database 8. UL相关 8.1. io输入输出相关 8.2. os操作pȝ相关 8.3. timer定时?nbsp; 8.4. socket|络 8.5. log日志 参考文?nbsp; 1. 目概述 1.1.功能介绍 XX视频聊天手机Q在2.5G|络上实现手频互动,让广大手机用户n受到3G功能。实现全球互通,无需漫游费,使得通讯费用大ؓ降低Q此外,也支持手机对PC的双向视频聊天,从而Z可以随时、随?#8220;见面”Q让世界变的更小?nbsp; XX for Android是视频聊天Y件XX的Android版本Q实C手机用户与艾c友或通讯录好友点对点视频、语韟뀁文字聊天,另外用户可以使用视频、语韟뀁文字聊天室功能?nbsp; 1.2.开发环?nbsp; Windows XP + Cygwin / Ubuntu 10.3 JAVA: IDE: JDK 1.5 + Eclipse3.5 + ADT0.9.6 + CDT 1.0.0 SDK: Android SDK NDK: Android-NDK-r3 C/C++: C? BSD C库精?bionic 1.3.q行环境 Androidq_1.5及以上固件版?/p>
1.4.名词解释 【Android】OHAl织开发的Q包括操作系l、中间g和核心应用的Ud讑֤软g集合?/p>
2.pȝ架构 主要包括4个模块层ơ:UI交互层;JNI接口层;核心应用层,以及pȝ适配层?/p>
Q图略) UI交互层: 主要实现了hZ互界面,以及一些框架类{,通过不同的场景完成品功能,每个场景可以包含多个界面Q每个场景可以处理特定的通知消息?/p>
JNI接口层: 衔接Java与C/C++代码层,是UI交互层与PTS协议模块和AV引擎交互的枢U,提供自上而下的正向调用,以及自下而上的callback调用机制?/p>
pȝ适配层: 提供pȝq_相关的wrapper实现Q如io、os、timer、socket{?/p>
核心应用层: UL的核心库Q包括协议库和AV引擎库?/p>
~写Q徐建祥(netpirate@gmail.com) 最q几个月一直在负责某即旉讯软g的智能手机^台开发工作(已经有手机厂商和q营商的定制版,q日发布公版)Q参考了iphone的设计风|以及QQ for Android的功能设计,代码完全自主开发,主要涉及以下斚wQ?/p>
--调研Ҏ () --> <<XX for Android porting UL文档>> --需?/p>
() --> <<XX for Android UI Spec 产品设计文档>> --设计 () --> <<XX for Android design 设计文档>> --开?/p>
()AndroidManifest讄Qdebugable/launchModel/task/minSDK/... ()Ƣ迎界面与初始化:手机?|络/SD?IMEI/IMSI/ACTIVE NETWORK/WIFI/SDCard) ()注册/d界面与动?frame animation)、数据存?DB & Share Proferences)、网l?TCP/CP & HTTP) ()ȝ面与TAB设计(TabHost & TabWidget) ()更换皮肤{主?Theme) ()呼叫窗?Custom Dialog) ()工具?Menu layout & onClick) ()两聊天室列?GroupList & ChildView) ()电话?Contact v1.0 & Contact v2.0) ()资料讄(Radio & EditView & CheckBox) ()消息表情(GridView & SpanningString) ()软gq{到后収ͼ在状态栏昄软g图标(Statusbar) ()软g更新--HTTP接口;XML数据格式解析Q多U程下蝲QY件覆盖安?XML Parser & MultiThread) ()手机Ll定与短信监控器(SMS Observer) ()捕获按键QHOME/BACK/SEARCHQon ACTIVITY & DIALOGQ后退键可以通过onKeyDown捕获Q搜索键可以通过onDispathEventhQ其会dismiss对话?/p>
()相机的本地预览竖屏窗口,默认只支持横屏预?Camera Preview) ()聊天与消息机?listener/Callback/Intent/Handler Message/Thread Message) ()JNI & AIDL ()自定义组?Activity/Button/Dialog/ListView/In-Out) ()OpenGL & 3D () --试 --> <<XX for Android v0.X.X 试报告>> ()Eclipse Debug(USB / Serial port) ()模拟发送短信和电话呼入(ddms / command) ()抓日志与截屏(adb & ddms & logcat) () --发布 --> <<XX for Android Deploy 部v文档>> ()MD5{编?/p>
()软g源代码?/p>
()ANT脚本 () 以上开发部分需l合软g源码CZQ待l?#8230;… 整理Q徐建祥(netpirate@gmail.com) RIL的线E和事g 一共创Z3个线E,5个事Ӟ W一个线Es_tid_dispath处理所有fdQsocketQpipeQportQ对应的事g处理Q处理和上层RIL.JAVA联系是第一个线E和对应?个事件?br />
W二个线Es_tid_mainloop和第三个U程s_tid_reader通过g层连接的fdQ来处理readline,processlineQ处理下层硬件相兟?/p>
~写Q徐建祥(netpirate@gmail.com) [ro.product.board]: [C8600] 整理Q徐建祥(netpirate@gmail.com) 市面上主的览? Android Browser 主要分成三个部分: 1. Webkit Engine (C++):JavascriptCore,WebCore,Webkit; 1. JavaScriptCoreQ?br />
Javascript 引擎 2. WebCore----render engineQ?br />
解析面Q生成DOM tree ?render treeQ最lrender整个面到background?/p>
|络接口装 3. Webkit-------和^台相关的background实现Q?br />
里面包括了android q_的实玎ͼ具体是通过JNI和framework 里面的webview?/p>
WebCore的高层封?br />
提供与BackEnd一直的q_支撑 source analysisQ?/p>
1. bindings ---javaScript 中对象和DOM对象q行l定Q比如window对象和document对象 软g应用 Browsers E-mail ClientsQ用Webkit 作Web 内容处理 Instant Messenger/Chat ClientsQ用WebkitҎ息进行渲染和样式?br />
-iChat AV – Apple RSS ReadersQ用Webkit来处理和现实新闻摘要Q以及Feedq接到的完整文档 ~写Q徐建祥(netpirate@gmail.com) 反编译包括: odex+apk->apk crack xml crack drawable crack class 涉及软gQ?/p>
apktool dex2jar jdgui AXMLPrinter2 smali Auto-sign --待箋……
日期Q?010/10/12
|址Qhttp://www.anymobile.org
日期Q?009/09/21
|址Q?a style="text-decoration: none; color: #336699; ">http://www.anymobile.org
初始化流E,d口init.rc, rild.c中的main函数Q主要完成三个Q务:
1. 开启libril.so中的event机制Q?在RIL_startEventLoop中,是最核心的由多\I/O驱动的消息@环?br />
2. 初始化librefrence_ril.soQ也是跟硬件或模拟gmodem通信的部分(后面l一U硬ӞQ?通过RIL_Init函数完成?br />
3. 通过RIL_Init获取一l函数指针RIL_RadioFunctionsQ?q过RIL_register完成注册Qƈ打开接受上层命o的socket通道?/p>
s_wakeupfd_event(s_fdWakeupRead,pipe),
s_listen_event(s_fdListen,socket RILD),
s_commands_event(accept(s_fdListen...)),
s_debug_event(s_fdDebug,socket RILD-debug),
-1.
日期Q?010/08/12
|址Q?a style="text-decoration: none; color: #336699; ">http://www.anymobile.org
Huawei_C8600外Ş看还可以Q硬仉|如下:
[ro.product.brand]: [China Telecom]
[ro.product.manufacturer]: [HUAWEI]
[ro.board.platform]: [msm7k]
[ro.config.browser_useragent1]: [Mozilla/5.0 (HW-C8600/C8600V100R001C92B225;U;Android/2.1;]
[ro.config.browser_useragent2]: [320*480;CTC/2.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17]
[ro.build.description]: [MSM7x25-user 2.1-update1 ERE27 20100707 ota-rel-keys,release-keys]
它主要有2Ҏ较有吸引力:
1、自动安装驱动程序;
该机型通过USB的方式(手机当U盘用Q,d安装SD卡下面的可执行文Ӟ安装驱动?br />
q种Ҏ的好处:使用快捷Q无需随记附赠驱动E序
q种Ҏ的缺点:SD卡的不少E序其实都有病毒的特征,360安全软g后提示是Nnewheur_PE病毒?br />
2、KVM虚拟?br />
该机型安装了日本贵司的KVMQJBlendQ可以选择扫描SD卡检jad/jar文gQ有了类似的机子QJ2MEq_UL的问题解x咯,使用KVM的KNI调研动态库?br />
日期Q?009/09/09
|址Q?a style="text-decoration: none; color: #336699; ">http://www.anymobile.org
a. IEQ内核TridentQ?br />
b. FireFoxQ内核:GeckoQ?br />
c. Safari, Google ChromeQ内核:WebkitQ?br />
d. OperaQ内?Presto?/p>
Webkit Architecture
2. Framework WebView (Java);
3. Browser app (java).
KJSq化到Squirrel Fish
基本的模板库WTF
基本的正则表辑ּ解析模块PCRE
基本~码转换模块Q依赖ICUq行
JS解析/~译引擎
JSq行?/p>
HTML解析引擎
XML解析引擎
CSS解析引擎
JS 客户端对象封?br />
|页渲染引擎
BackEnd装与实?br />
SVG
HTML Editing
Plugins
|页内容处理QImage/Icon
。。?/p>
提供lWebCore用户操控相关的支撑接?/p>
2. bridge ----javascript对象和自定义的对象绑?br />
3. css -------实现了css 2.0 的标?br />
4. dom-------DOM树的相关对象
5. editing-------所有于Edit相关功能Q比如html中的~辑?br />
6. html -------html 语言的解?br />
7. loader ------- 加蝲|页资源以及CacheQFrameLoader ImageLoader
8. platform----- 和^台有关的Q比?囑փdecoderQ图形的l制Q网l操作,字体{?br />
9. plugin------实现了基于Netscape?NPAPI (Netscape Plugin Application Programming Interface ) 的框?br />
10. rendering--------- render tree 相关对象
11. resource ------PC 览器safair 用到的资源,对于android来说没用
12. svg ---------- svg 语言的解?br />
13. wml----------- wml 语言的解?br />
14. xml------------xml 语言的解析以及XSLT 转换Q需要libxslt
-Safari
-Google Chrome/Chromium
-OmniWeb
-Osb-browser – Nokia
-Web Browser for S60 – Nokia
-QT Browser Engine
-Entourage 2008 – Microsoft (for Mac)
-Mail-Apple
-Mailplane 特定的Gmaill端
-MSN Messenger – Microsoft (Mac)
-Yahoo! Messenger
-MiNews
-NetNewsWire
-NewsFire
-PixelNews
日期Q?010/10/12
|址Qhttp://www.anymobile.org
日期Q?/span>
|址Q?/span>http://www.anymobile.org
最q几个月一直在负责某即旉讯软g的智能手机^台开发工作(已经有手机厂商和q营商的定制版,q日发布公版)Q参考了iphone的设计风|以及QQ for
Android的功能设计,代码完全自主开发,主要涉及以下斚wQ?/span>
--调研Ҏ
() --> <<XX for Android porting UL文档>>
--需?/span>
() --> <<XX for Android UI Spec 产品设计文档>>
--设计
() --> <<XX for Android design 设计文档>>
--开?/span>
()AndroidManifest讄Q?/span>debugable/launchModel/task/minSDK/...
()Ƣ迎界面与初始化:手机?/span>/|络/SD?/span>(IMEI/IMSI/ACTIVE
NETWORK/WIFI/SDCard)
()注册/d界面与动?/span>(frame
animation)、数据存?/span>(DB &
Share Proferences)、网l?/span>(TCP/CP & HTTP)
()ȝ面与TAB设计(TabHost
& TabWidget)
()更换皮肤{主?/span>(Theme)
()呼叫窗?/span>(Custom Dialog)
()工具?/span>(Menu layout & onClick)
()两聊天室列?/span>(GroupList & ChildView)
()电话?/span>(Contact v1.0 & Contact v2.0)
()资料讄(Radio & EditView & CheckBox)
()消息表情(GridView & SpanningString)
()软gq{到后収ͼ在状态栏昄软g图标(Statusbar)
()软g更新--HTTP接口;XML数据格式解析Q多U程下蝲QY件覆盖安?/span>(XML Parser &
MultiThread)
()手机Ll定与短信监控器(SMS Observer)
()捕获按键Q?/span>HOME/BACK/SEARCHQ?/span>on ACTIVITY & DIALOGQ后退键可以通过onKeyDown捕获Q搜索键可以通过onDispathEventhQ其?/span>dismiss对话?/span>
()相机的本地预览竖屏窗口,默认只支持横屏预?/span>(Camera Preview)
()聊天与消息机?/span>(listener/Callback/Intent/Handler Message/Thread Message)
()JNI & AIDL
()自定义组?/span>(Activity/Button/Dialog/ListView/In-Out)
()OpenGL & 3D
()
--试 --> <<XX for Android v0.X.X 试报告>>
()Eclipse Debug(USB / Serial port)
()模拟发送短信和电话呼入(ddms / command)
()抓日志与截屏(adb & ddms & logcat)
()
--发布 --> <<XX for Android Deploy 部v文档>>
()MD5{编?/span>
()软g源代码?/span>
()ANT脚本
()
以上开发部分需l合软g源码CZQ待l?#8230;…
[ro.product.board]: [C8600]
[ro.product.brand]: [China Telecom]
[ro.product.manufacturer]: [HUAWEI]
[ro.board.platform]: [msm7k]
[ro.config.browser_useragent1]: [Mozilla/5.0 (HW-C8600/C8600V100R001C92B225;U;Android/2.1;]
[ro.config.browser_useragent2]: [320*480;CTC/2.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17]
[ro.build.description]: [MSM7x25-user 2.1-update1 ERE27 20100707 ota-rel-keys,release-keys]
它主要有2Ҏ较有吸引力:
1、自动安装驱动程序;
该机型通过USB的方式(手机当U盘用Q,d安装SD卡下面的可执行文Ӟ安装驱动?br />
q种Ҏ的好处:使用快捷Q无需随记附赠驱动E序
q种Ҏ的缺点:SD卡的不少E序其实都有病毒的特征,360安全软g后提示是Nnewheur_PE病毒?br />
2、KVM虚拟?br />
该机型安装了日本贵司的KVMQJBlendQ可以选择扫描SD卡检jad/jar文gQ有了类似的机子QJ2MEq_UL的问题解x咯,使用KVM的KNI调研动态库?br />
RIL的线E和事g
一共创Z3个线E,5个事Ӟ
s_wakeupfd_event(s_fdWakeupRead,pipe),
s_listen_event(s_fdListen,socket RILD),
s_commands_event(accept(s_fdListen...)),
s_debug_event(s_fdDebug,socket RILD-debug),
-1.
W一个线Es_tid_dispath处理所有fdQsocketQpipeQportQ对应的事g处理Q处理和上层RIL.JAVA联系是第一个线E和对应?个事件?br />
W二个线Es_tid_mainloop和第三个U程s_tid_reader通过g层连接的fdQ来处理readline,processlineQ处理下层硬件相兟?/p>
市面上主的览?
a. IEQ内核TridentQ?br />
b. FireFoxQ内核:GeckoQ?br />
c. Safari, Google ChromeQ内核:WebkitQ?br />
d. OperaQ内?Presto?br />
Android Browser 主要分成三个部分:
1. Webkit Engine (C++):JavascriptCore,WebCore,Webkit;
2. Framework WebView (Java);
3. Browser app (java).
1. JavaScriptCoreQ?br />
Javascript 引擎
KJSq化到Squirrel Fish
基本的模板库WTF
基本的正则表辑ּ解析模块PCRE
基本~码转换模块Q依赖ICUq行
JS解析/~译引擎
JSq行?/p>
2. WebCore----render engineQ?br /> 解析面Q生成DOM tree ?render treeQ最lrender整个面到background?/p>
|络接口装
HTML解析引擎
XML解析引擎
CSS解析引擎
JS 客户端对象封?br />
|页渲染引擎
BackEnd装与实?br />
SVG
HTML Editing
Plugins
|页内容处理QImage/Icon
。。?br />
3. Webkit-------和^台相关的background实现Q?br /> 里面包括了android q_的实玎ͼ具体是通过JNI和framework 里面的webview?/p>
WebCore的高层封?br />
提供与BackEnd一直的q_支撑
提供lWebCore用户操控相关的支撑接?/p>
source analysisQ?/p>
1. bindings ---javaScript 中对象和DOM对象q行l定Q比如window对象和document对象
2. bridge ----javascript对象和自定义的对象绑?br />
3. css -------实现了css 2.0 的标?br />
4. dom-------DOM树的相关对象
5. editing-------所有于Edit相关功能Q比如html中的~辑?br />
6. html -------html 语言的解?br />
7. loader ------- 加蝲|页资源以及CacheQFrameLoader ImageLoader
8. platform----- 和^台有关的Q比?囑փdecoderQ图形的l制Q网l操作,字体{?br />
9. plugin------实现了基于Netscape?NPAPI (Netscape Plugin Application Programming Interface ) 的框?br />
10. rendering--------- render tree 相关对象
11. resource ------PC 览器safair 用到的资源,对于android来说没用
12. svg ---------- svg 语言的解?br />
13. wml----------- wml 语言的解?br />
14. xml------------xml 语言的解析以及XSLT 转换Q需要libxslt
软g应用
Browsers
-Safari
-Google Chrome/Chromium
-OmniWeb
-Osb-browser – Nokia
-Web Browser for S60 – Nokia
-QT Browser Engine
E-mail ClientsQ用Webkit 作Web 内容处理
-Entourage 2008 – Microsoft (for Mac)
-Mail-Apple
-Mailplane 特定的Gmaill端
Instant Messenger/Chat ClientsQ用WebkitҎ息进行渲染和样式?br />
-iChat AV – Apple
-MSN Messenger – Microsoft (Mac)
-Yahoo! Messenger
RSS ReadersQ用Webkit来处理和现实新闻摘要Q以及Feedq接到的完整文档
-MiNews
-NetNewsWire
-NewsFire
-PixelNews
Index
1. Introduction
2. Architecture
3. How to Work
4. Wake Locks
5. Wake Lock Example
6. Music Application
1.Introduction
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.
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.
2.Architecture
Framework Layer
/frameworks/base/core/java/android/os/PowerManager.java
/frameworks/base/services/java/com/android/server/PowerManagerService.java
/frameworks/base/core/java/android/os/Power.java
/frameworks/base/core/jni/android_os_power.cpp
/hardware/libhardware_legacy/power/power.c
"/sys/power/wake_lock"
"/sys/power/wake_unlock"
"/sys/power/state"
"/sys/android_power/acquire_partial_wake_lock"
"/sys/android_power/release_wake_lock"
"/sys/android_power/request_state"
… …
Kernel Layer
/drivers/android/power.c
/drivers/power/apm_power.c (Advanced Power Management)
3.How to Work
pȝ正常开机后q入到AWAKE状态,Backlight会从最亮慢慢调节到用户讑֮的亮?pȝscreen off timer(settings->sound & display-> Display settings -> Screen timeout)开始计?在计时时间到之前Q如果有M的activity事g发生,如Touch click, keyboard pressed{事Ӟ则将Reset screen off timer, pȝ保持在AWAKE状态。如果有应用E序在这D|间内甌了Full wake lock,那么pȝ也将保持在AWAKE状态,除非用户按下power key. 在AWAKE状态下如果甉|电量低或者是用AC供电screen off timer旉到ƈ且选中Keep screen on while pluged in选项,backlight会被强制调节到DIM的状态?br /> 如果Screen off timer旉到ƈ且没有Full wake lock或者用h了power keyQ那么系l状态将被切换到NOTIFICATIONQƈ且调用所有已l注册的g_early_suspend_handlers函数Q通常会把LCD和Backlight驱动注册成early suspendcdQ如有需要也可以把别的驱动注册成early suspendQ这样就会在W一阶段被关? 接下来系l会判断是否有partial wake lock acquiredQ如果有则等待其释放Q在{待的过E中如果有user activity事g发生Q系l则马上回到AWAKE状?如果没有partial wake lock acquiredQ则pȝ会马上调用函数pm_suspend关闭其它相关的驱动,让CPUq入休眠状态?br /> pȝ在Sleep状态时如果到M一个Wakeup sourceQ则CPU会从Sleep状态被唤醒,q且调用相关的驱动的resume函数Q接下来马上调用前期注册的early suspend驱动的resume函数Q最后系l状态回到AWAKE状?
Registering Kernel-level Drivers with the PM Driver
#Be notified immediately before power down
android_register_early_suspend(android_early_suspend_t *handler)
#Be notified immediately after power up
android_register_early_resume(android_early_resume_t *handler)
HARDWARE LIGHTS
#define LIGHT_ID_BACKLIGHT "backlight"
#define LIGHT_ID_KEYBOARD "keyboard"
#define LIGHT_ID_BUTTONS "buttons"
#define LIGHT_ID_BATTERY "battery"
#define LIGHT_ID_NOTIFICATIONS "notifications"
#define LIGHT_ID_ATTENTION "attention"
#define LIGHT_ID_BLUETOOTH "bluetooth"
#define LIGHT_ID_WIFI "wifi"
4.Wake Locks
Wake locks are used by applications and services to request CPU resources.
Types of Wake Locks:
-ACQUIRE_CAUSES_WAKEUP: Normally wake locks don't actually wake the device, they just cause it to remain on once it's already on.
-FULL_WAKE_LOCK: The screen and keyboard are on at full brightness
-ON_AFTER_RELEASE: When this wake lock is released, poke the user activity timer
-PARTIAL_WAKE_LOCK: The CPU is running, The screen might not be on.
-SCREEN_BRIGHT_WAKE_LOCK: The screen is on at full brightness; the keyboard backlight will be allowed to go off.
-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.
5.Wake Lock Example
1). Acquire handle to the PowerManager service.
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
2). Create a wake lock and specify the power management flags for screen, timeout, etc.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);
3). Acquire wake lock.
wl.acquire();
4). Perform operation (play MP3, open HTML page, etc.).
5). Release wake lock.
wl.release();
6.Music Application
/packages/apps/Music/AndroidManifest.xml
<uses-permission android:name="android.permission.WAKE_LOCK" />
/packages/apps/Music/src/.../MediaPlayerService.java PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
WakeLock mWakeLock =
pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
this.getClass().getName());
#Sets this WakeLock is not ref counted.
mWakeLock.setReferenceCounted(false);
…
#The lock will be released after 30 seconds.
mWakeLock.acquire(30000);
…
mHandler.sendEmptyMessage(RELEASE_WAKELOCK);
#Release the claim to the CPU or screen being on.
mWakeLock.release();
Reference
Android Platform Development Kit:Power Management
http://www.netmite.com/android/mydroid/development/pdk/docs/power_management.html
Android Power Management(Steve Guo)
http://letsgoustc.spaces.live.com/blog/cns!89AD27DFB5E249BA!526.entry
Android 甉|理(hzdysymbol)
http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx
Linux Power Management Support
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.24.y.git;a=blob;f=Documentation/pm.txt
安装E序QY件从无到有?/span>
卸蝲E序QY件从有到无?/span>
更新E序QY件的覆盖安装Q可以保留原版本的数据,提升软g版本?/span>
安装E序的方法:
1?span style="font:7.0pt "Times New Roman"">
通过Intent机制Q调出系l安装应用,重新安装应用的话Q会保留原应用的数据?/span>String fileName = Environment.getExternalStorageDirectory() + apkName;
Uri uri = Uri.fromFile(new File(fileName));
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri, application/vnd.android.package-archive");
startActivity(intent);
2?span style="font:7.0pt "Times New Roman"">
直接调用安装接口?/span>Uri mPackageURI = Uri.fromFile(new File(Environment.getExternalStorageDirectory()
+ apkName));
int installFlags = 0;
PackageManager pm =
getPackageManager();
try
{
PackageInfo pi = pm.getPackageInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
if(pi != null)
{
installFlags |= PackageManager.REPLACE_EXISTING_PACKAGE;
}
}
catch (NameNotFoundException e)
{}
PackageInstallObserver observer
= new PackageInstallObserver();
pm.installPackage(mPackageURI, observer, installFlags);
安装应用权限Q?/span>android.permission.INSTALL_PACKAGES
pȝ应用Q安装在/system/app下面Q可以采用该方式Q第三方应用无法甌安装卸蝲权限?/span>
java.lang.SecurityException: Neither user 10039 nor current process has android.permission.INSTALL_PACKAGES.
3?span style="font:7.0pt "Times New Roman"">
执行install命o?/span>install –r 更新安装Q默认新安装Q如果不附上-r参数Q则会清楚原应用的数据,版本一致则无法安装?/span>
Q?/span>1Q?/span>am start …
Q?/span>2Q?/span>Runtime.exec(String[] args)
Q?/span>3Q?/span>Class<?> execClass = Class.forName("android.os.Exec");
4?span style="font:7.0pt "Times New Roman"">
执行cp / adb push命o?/span>ql检到应用E序有更斎ͼ自动完成重新安装?/span>
5?span style="font:7.0pt "Times New Roman"">
通过W三方Y件实现?/span>MarketQ?/span>EOEQ?/span>eTrackDog均采用第一U方法实现更新?/span>
优点Q由pȝ核心应用E序控制安装E序Q?/span>
~点Q无法控制安装过E;安装完成后,也无法立d动应用,需要用L认;无法扩展?/span>
实例Q?/span>Market查找安装E序
Intent intent =
new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));
startActivity(intent);
卸蝲E序的方法:
1?span style="font:7.0pt "Times New Roman"">
通过Intent机制Q调出系l卸载应用?/span>Uri packageURI = Uri.parse("package: your.app.id");
Intent intent = new Intent(Intent.ACTION_DELETE);
startActivity(intent);
2?span style="font:7.0pt "Times New Roman"">
直接调用卸蝲接口?/span>PackageInstallObserver observer
= new PackageInstallObserver();
pm.installPackage(mPackageURI, observer, installFlags);
卸蝲应用权限Q?/span>android.permission.DELETE_PACKAGES
3?span style="font:7.0pt "Times New Roman"">
q行rm apk安装文gQ由pȝ后调用卸蝲应用?/span>备注说明Q?/span>
Androidpȝ的应用安装,在系l设|里面有一,是否安装未知源,所在在软g更新的时候,需要检这个选项Q如果打钩,则只允许安装Market源提供的安装E序Q如果没有打钩的话,pȝ安装应用时会提示用户讄Q如果选择讄Q设|好后,无法q回安装界面Q如果选择取消Q则推出安装E序。所以,如果是更新的话,一定要在下载之前就许可安装源的设|,或者在下蝲前检是否已l下载过新的安装E序Q避免重复下载安装程序?/span>
相关的代码如下:
1.
int result = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0);
2.
if (result == 0) {
3.
// show some dialog here
4.
// ...
5.
// and may be show application settings dialog manually
6.
Intent intent = new Intent();
7.
intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
8.
startActivity(intent);
9.
}
public static final class Settings.Secure extends Settings.NameValueTable
public static final String INSTALL_NON_MARKET_APPS
Since: API Level 3
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>
下面是程序更新的几个步骤演示Q?/span>
OVER!
调试步骤如下Q?br />
1/ 异常的地址信息存到文本文gQƈ存放在项目根目录Q?br />
2/ 使用panic.py解析该文Ӟ
3/ Ҏq回的信?文g?行号;Ҏ?调试E序?br />
以操作第三方的Touch input 输入法ؓ例,q程如下Q?br />
# 该输入法的英文和手写OKQ操作中文输入法Ӟ出现异常QY键盘消失Q异常日志如?br />
02-05 06:41:19.834 D/dalvikvm( 751): Trying to load lib /system/lib/libimezi.so 0x43e2a788
02-05 06:41:19.874 D/dalvikvm( 751): Added shared lib /system/lib/libimezi.so 0x43e2a788
02-05 06:41:20.035 I/DEBUG ( 551): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-05 06:41:20.035 I/DEBUG ( 551): Build fingerprint: 'unknown'
02-05 06:41:20.035 I/DEBUG ( 551): pid: 751, tid: 751 >>> com.htc.android.cime <<<
02-05 06:41:20.045 I/DEBUG ( 551): signal 11 (SIGSEGV), fault addr 00000003
02-05 06:41:20.045 I/DEBUG ( 551): r0 00000000 r1 00000000 r2 807248ec r3 807248ec
02-05 06:41:20.055 I/DEBUG ( 551): r4 00252d80 r5 00000004 r6 00000001 r7 00000000
02-05 06:41:20.055 I/DEBUG ( 551): r8 beff8550 r9 41459d28 10 41459d18 fp 00000000
02-05 06:41:20.055 I/DEBUG ( 551): ip 8072430c sp beff84f0 lr 80716b4f pc 80717bce cpsr 60000030
02-05 06:41:20.135 I/DEBUG ( 551): #00 pc 00017bce /system/lib/libimezi.so
02-05 06:41:20.135 I/DEBUG ( 551): #01 pc 00010f80 /system/lib/libimezi.so
02-05 06:41:20.145 I/DEBUG ( 551): stack:
02-05 06:41:20.155 I/DEBUG ( 551): beff84b0 ad083e10
02-05 06:41:20.155 I/DEBUG ( 551): beff84b4 ad05d44f /system/lib/libdvm.so
02-05 06:41:20.155 I/DEBUG ( 551): beff84b8 ad06b8a0 /system/lib/libdvm.so
02-05 06:41:20.155 I/DEBUG ( 551): beff84bc ad083e10
02-05 06:41:20.167 I/DEBUG ( 551): beff84c0 43e2aa90
02-05 06:41:20.175 I/DEBUG ( 551): beff84c4 00000003
02-05 06:41:20.175 I/DEBUG ( 551): beff84c8 00000014
02-05 06:41:20.185 I/DEBUG ( 551): beff84cc 80716b4f /system/lib/libimezi.so
# 保存异常日志Q存为文? 20100205_ime.txt
02-05 06:41:20.045 I/DEBUG ( 551): r0 00000000 r1 00000000 r2 807248ec r3 807248ec
02-05 06:41:20.055 I/DEBUG ( 551): r4 00252d80 r5 00000004 r6 00000001 r7 00000000
02-05 06:41:20.055 I/DEBUG ( 551): r8 beff8550 r9 41459d28 10 41459d18 fp 00000000
02-05 06:41:20.055 I/DEBUG ( 551): ip 8072430c sp beff84f0 lr 80716b4f pc 80717bce cpsr 60000030
02-05 06:41:20.135 I/DEBUG ( 551): #00 pc 00017bce /system/lib/libimezi.so
02-05 06:41:20.135 I/DEBUG ( 551): #01 pc 00010f80 /system/lib/libimezi.so
# 执行脚本
xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt
read file ok
/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
Traceback (most recent call last):
File "./panic.py", line 69, in <module>
print "%-30s%s" % (list[1],list[0])
IndexError: list index out of range
# 没找到库文gQ因个文件是W三方的Q只存放?out/target/product/generic/system/lib /libimezi.soQ拷贝一份存?out/target/product/generic/symbols/system/lib /libimezi.soQ再ơ执行脚?br />
xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt
read file ok
zi81keyd.c:0 Zi8GetTableData
zi81keyd.c:0 Zi8InitializeDynamic
# 成功解析异常Q没有zi8库文件所_更新如下库文Ӟ输入法支持中文拼韟?br />
/system/lib/zi/Zi8DatPYP_CN.z8d
/system/lib/zi/Zi8DatPYS_CN.z8d
/system/lib/zi/Zi8DatZHA_CN.z8d
/system/lib/zi/Zi8DatZHA_HK.z8d
/system/lib/zi/Zi8DatZHA_TW.z8d
/system/lib/zi/Zi8DatZYP_TW.z8d
/system/lib/zi/Zi8DatZYS_TW.z8d
Apk文gQ?/p>
Android application package文g。每个要安装到OPhoneq_的应用都要被~译打包Z个单独的文gQ后~名ؓ.apkQ其中包含了应用的二q制代码、资源、配|文件等?/p>
apk文g实际是一个zip压羃包,可以通过解压~工兯开。可以用zip解开*.apk文gQ下面是一个helloword的apkCZ文g
|– AndroidManifest.xml
|– META-INF
| |– CERT.RSA
| |– CERT.SF
| `– MANIFEST.MF
|– classes.dex
|– res
| |– drawable
| | `– icon.png
| `– layout
| `– main.xml
`– resources.arsc
Android模拟器中提供了一个dex文g的反~译工具Qdexdump。用法ؓ首先启动Android模拟器,把要查看的dex文g用adb push上传的模拟器中,然后通过adb shelldQ找到要查看的dex文gQ执行dexdump xxx.dex?/p>
目前在网上能扑ֈ的另一个dex文g的反~译工具是Dedexer。Dedexer可以ddex格式的文Ӟ生成一U类g汇编语言的输出。这U输Zjasmin[ ]的输出相|但包含的是Dalvik的字节码?/p>
Ҏ1Q通过16q制~码软g自行替换英文 Ҏ2Q通过汉化开发h员自行编写的汉化软gFor Android
2.4 resources.arsc资源文gQ参考汉化部?br />
3/ android 软g汉化
1.JDK(Java Development Kit) -开发环?br />
2.Auto-Sign -{工具
3.Hex Workshop -十六q制~辑?br />
4.WinRAR -压羃软g
图文q茂CZQ?a >http://bbs.blueshow.net/thread-604533-1-1.html
1.JDK(Java Development Kit) -开发环?br />
2.Android ResEdit-汉化软g
3.WinRAR -压羃软g
图文q茂CZQ?a >http://mobile.yesky.com/363/9292863.shtml
注意Q?/p>
我用的HTC的image提取的google maps 3.0的jar库和apk安装文gQ只可以定位成功Q无法读取定位后的地图数据,抛出ClassCastException异常Q?/p>
03-01 16:52:58.561 E/AndroidRuntime( 2453): Uncaught handler: thread main exiting due to uncaught exception
03-01 16:52:58.936 E/AndroidRuntime( 2453): java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable
03-01 16:52:58.936 E/AndroidRuntime( 2453): at com.google.android.maps.MyLocationOverlay.getLocationDot(MyLocationOverlay.java:180)
最后,我是提取的release版的Android 1.5版本的相x?Google Add-ons)Q方法如下:
1)/system/etc/permissions/com.google.android.gtalkservice.xml
2)/system/etc/permissions/com.google.android.maps.xml
3)/system/framework/com.google.android.gtalkservice.jar
4)/system/framework/om.google.android.maps.jar
5)/system/app/Maps.apk (Google Maps v3.1)
Google Mobile
http://www.google.com/mobile/
HTC Developer Center
http://developer.htc.com/index.html
Building Android 1.5 – Google Apps and audio files
http://www.johandekoning.nl/index.php/2009/07/12/building-android-1-5-google-apps-and-audio-files/
Google Voice Search Wiki
http://en.wikipedia.org/wiki/Google_Voice_Search
Using Google Maps in Android
http://mobiforge.com/developing/story/using-google-maps-android
Android Add-ons(Map API)
http://android.nanshapo.com/topic/view/812.html
某些手机厂商的J2ME虚拟机是UL的SUN公司开源授权的PHONEME虚拟?https://phoneme.dev.java.net/)Q南京某公司(CM)也开发了J2ME虚拟机,具体情况不详?/p>
phoneME Feature software is an open source development effort
addressing the market and technical requirements of “feature phone”
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.
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 “optional packages” that come
in the form of JSRs (Java Specification Requests).
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. more...
下面是三相关的文档资料Q?/p>
http://blog.csdn.net/lzf_china/archive/2009/10/16/4676111.aspx
思\无非3U:
1, 提供一个android下的j2me虚拟机,让j2meE序q行 如OPhone下的癑֮?br />
2, 提供一个{换工Pj2me的jar攑օapk中,重新用apt制作成apk安装E序Qƈ允许Q如netmite
3, 提供cd中间层,android中没有的j2mecd用android的程序实现出来,q用android sdk重新~译成apk 如J2AB
JavaME无法满Android,只有设计Dalvik
http://blog.chinaunix.net/u2/85805/showart_1421638.html
AndroidZ么不使用Native C/C++Q?br /> AndroidZ么不使用Sun JavaMEQ?/strong>
Dalvik和J2ME相比先进C哪里Q?/strong>
http://blog.chinaunix.net/u2/85805/showart_1421644.html
分析了Dalvik和J2ME的区别。首先Dalvik虚拟机是Google自己开发的 Java虚拟机,q行在Androidq_上。J2ME是Sun公司的移动^台Java VM?/p>
一、运行环境对?br />
二、模拟器
三、兼Ҏ?br />
四、运行效?br />
五、安全?br />
六、类库完整?/span>