作者:徐建祥([email protected])
日期:2010/05/06
网址:http://www.anymobile.org
目 录
1.项目简介……………………………………………………4
1.1.移植背景………………………………………………4
1.2.功能介绍………………………………………………4
1.3.软件环境………………………………………………4
1.3.1开发环境………………………………………………4
1.3.2运行环境………………………………………………4
2. 设计思路………………………………………………………………4
2.1.移植目标………………………………………………4
2.2.平台架构………………………………………………5
2.3.移植思路………………………………………………5
2.4.移植流程………………………………………………5
2.5.界面流程………………………………………………7
2.6.性能评估………………………………………………7
3.移植模块…………………………………………………………7
3.1 标准库……………………………………………………9
3.1.1基本类型………………………………………………9
3.1.2字符串操作………………………………………………9
3.1.3文件操作………………………………………………9
3.2 平台相关……………………………………………………9
3.2.1内存控制………………………………………………9
3.2.2线程操作………………………………………………9
3.2.3进程操作………………………………………………10
3.2.4时钟操作………………………………………………10
3.2.5日期时间………………………………………………10
3.2.6环境变量………………………………………………10
3.3网络连接……………………………………………………10
3.4文本相关……………………………………………………10
3.4.1文本输出………………………………………………10
3.4.2字体管理………………………………………………10
3.5多媒体相关………………………………………………11
3.5.1图像输出………………………………………………11
3.5.2声音输出………………………………………………11
3.5.3视频输出………………………………………………11
3.6 用户界面………………………………………………11
3.7数据存储………………………………………………11
4.调试测试…………………………………………………………11
4.1调试方法………………………………………………11
4.2测试框架………………………………………………11
4.3自动化测试………………………………………………12
4.4集成测试………………………………………………13
XXXX软件,在 Android 平台的移植,相对其他的平台的移植,有着很多的特殊性,其中最主要的一个原因,Android 采用 Java 作为应用开发语言,而其他平台的软件,为了性能和跨平台的方便,都采用C或者C++语言,增加了移植的复杂度,考虑采用JNI技术,通过JNI来实现 java 和 C 的互操作和互调用。
本文主要介绍 XXXX软件的移植要点,通过对这些要点的介绍,来了解 XXXX软件的移植过程。
本文面向有一定的手机应用开发经验(S60/Mobile/MTK)和有一定的跨手机平台移植经验的人员,帮助她们了解一个核心库(C/C++)是怎么移植到Android之上的。
Windows XP SP3
JavaSE 1.6
Microsoft Visual C++ 2003
Eclipse 3.5
Android Native Development Kit (NDK) 1.6
Android Standard Development Kit (SDK) 1.5
Android 1.5及以上平台
HVGA (320x480)。。。
将feature phone平台的XXXX框架移植到Android平台,并实现应用入口、窗口的上层UI时间以及中断处理等集成调用,实现Android平台的产品化。
APP(UI; JNI)
平台相关(STD/SYS; GUI; Video/Audio; Network)
适配器
核心应用层(UI; Media; Browser; Protocol)
(架构图略。)
在手机视频点播软件中程序要处理的主要有浏览器界面,按键,数据保存,网络等。MTK平台软件移植到Android上,主要涉及平台相关的具体实现,如网络部分,标准库,系统相关接口,手机窗口界面的按键/触摸屏事件,中断处理等,核心库基本不用改。
1、创建标准NDK应用,NDK_ROOT/apps/XXXX目录;
2、编写两个脚本文件,application.mk & Android.mk;
3、导入核心库libXXXX.so和头文件;
4、导入Windows版本的PC客户端程序,涉及到平台相关的全部注空;
5、编译生成新的动态库libXXXX.so;
6、填入Android平台相关的接口调用,完成底层库的移植;
7、创建Android应用项目,加入平台库;
8、改写上层应用的入口和事件接口,通过JNI调用底层库,画面帧通过java层申请的surface对应的native接口,及时刷新;
9、打包生成apk安装文件。
略。
Java 与 C 的互操作是通过JNI,JNI对性能的损耗相对较大,但是Android的上层Java框架还是为我们移植以及UI提供了很完善的方案,如AsycTask等,所以在移植产品时一定要做好性能评测,并确定是否可接受的范围内。
编译器差异:arm交叉编译
平台差异: 基于Linux的Android平台
文件名 |
描 述 |
xxxx_wrapper.cpp
|
xxxxxxxxxx |
2.0平台定义,统一使用平台定义的类型
标准C库。
标准C库。
标准C库。
使用符合POSIX的pthread,涉及到线程和线程锁,如下:
1、Android版本的pthread,取消了pthread_cancel()等非正常退出接口;
2、pthread的线程优先级,设置值越低,优先级越大,值域在-20~+20,与windows相反(值域0~31);
3、线程的二元锁,使用的是互斥量pthread_mutex_t。
未涉及。
包括两部分:系统平台相关和Kernel相关。
ime_trace 添加了系统自动的log功能,可以通过logcat工具查看。
3.5.1图像
JPEG
AMR
H.264/H.263
屏幕方向:横屏/竖屏
屏幕尺寸:320*480
全屏
隐藏标题栏
绘制窗口
按键->应用级的按键处理
确认键:
方向键:
硬键盘:
软键盘:
点按:
长按:
按下:
松开:
系统中断:
应用中断:
意图中断:
Android 采用的是SQLite 3数据库,以.db的方式存放在各个应用对应的data目录下。
Android 平台除了为应用程序开发提供了丰富的API外,提供了模拟器,方面调试程序,同时也为开展自动化测试提供了多种途径,本项目主要采用基于JUnit的自动化测试。
Android的模拟器和Mobile的模拟器一样是模拟ARM指令的,不像Symbian模拟器一样执行的是本地代码,所以在模拟器上模拟出来的效率会比真实手机上的效率要低。
开发过程中,核心库的移植测试以IDE调试为主,应用程序主要采用模拟器调试,后期的集成测试以手机测试为主,辅以模拟器调试。
trace方法
adb方法
堆栈分析
JUnit是广泛应用于Java程序开发中的单元测试框架。它定义了特定格式的方法做为测试用例,提供TestSuite测试套件和TestRunner测试执行器分别用于组织测试用例和运行测试用例并反馈测试结果。
Instrumentation则是一种操作系统和上层应用程序之间的监控机制。当应用程序运行时,若Instrumentation设置为开启,它将在应用程序运行前初始化,与应用程序运行在同一个进程中,监测应用程序与系统之间的交互,并可以对应用程序进行一定的控制,例如,监控应用中各Activity的调用情况,启动和结束Activity,对Activity生命周期中的各个状态进行切换,甚至可以向Activity发送按键事件和字符。
基于JUnit+Instrumentation的自动化测试框架的架构图如下所示:
JUnit对各个功能模块作单元测试,然后利用Instrumentation模拟用户从图形界面发起的诸如点击或拖拽屏幕、输入字符、选择菜单项等操作,就可以实现自动化功能测试甚至系统测试。与数据库操作和View操作配合使用后,这种自动化测试能够实现与测试人员的手动测试具有同样的效果。
JUnit和Instrumentation相结合,既充分发挥了JUnit在测试用例开发、组织等方面的特点,又提供了对应用程序进行控制的有效途径。
略。