随笔-1  评论-68  文章-98  trackbacks-0

作者:徐建祥(netpirate@gmail.com)
日期: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

 

1.项目简介

1.1移植背景

XXXX软件,在 Android 平台的移植,相对其他的平台的移植,有着很多的特殊性,其中最主要的一个原因,Android 采用 Java 作为应用开发语言,而其他平台的软件,为了性能和跨平台的方便,都采用C或者C++语言,增加了移植的复杂度,考虑采用JNI技术,通过JNI来实现 java  C 的互操作和互调用。

1.2.功能介绍

本文主要介绍 XXXX软件的移植要点,通过对这些要点的介绍,来了解 XXXX软件的移植过程。

本文面向有一定的手机应用开发经验(S60/Mobile/MTK)和有一定的跨手机平台移植经验的人员,帮助她们了解一个核心库(C/C++)是怎么移植到Android之上的。

1.3.软件环境

1.3.1开发环境

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

1.3.2运行环境

Android 1.5及以上平台

HVGA (320x480)。。。

2.              设计思路

2.1.移植目标

feature phone平台的XXXX框架移植到Android平台,并实现应用入口、窗口的上层UI时间以及中断处理等集成调用,实现Android平台的产品化。

2.2.平台架构

APPUI; JNI

平台相关(STD/SYS; GUI; Video/Audio; Network

适配器

核心应用层(UI; Media; Browser; Protocol

(架构图略。)

2.3.移植思路

在手机视频点播软件中程序要处理的主要有浏览器界面,按键,数据保存,网络等。MTK平台软件移植到Android上,主要涉及平台相关的具体实现,如网络部分,标准库,系统相关接口,手机窗口界面的按键/触摸屏事件,中断处理等,核心库基本不用改。

2.4.移植流程

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安装文件。

 

2.5.界面流程

略。
   

2.6.性能评估

Java  C 的互操作是通过JNIJNI对性能的损耗相对较大,但是Android的上层Java框架还是为我们移植以及UI提供了很完善的方案,如AsycTask等,所以在移植产品时一定要做好性能评测,并确定是否可接受的范围内。

3.移植模块

编译器差异:arm交叉编译

平台差异:    基于LinuxAndroid平台

 

文件名

  

xxxx_wrapper.cpp

 

xxxxxxxxxx


 

3.1 标准库

3.1.1基本类型

2.0平台定义,统一使用平台定义的类型

3.1.2字符串操作

标准C库。

3.1.3文件操作

标准C库。

3.2 平台相关

3.2.1内存控制

标准C

3.2.2线程操作

使用符合POSIXpthread,涉及到线程和线程锁,如下:

1Android版本的pthread,取消了pthread_cancel()等非正常退出接口;

2pthread的线程优先级,设置值越低,优先级越大,值域在-20~+20,与windows相反(值域0~31);

3、线程的二元锁,使用的是互斥量pthread_mutex_t

3.2.3进程操作

未涉及。

3.2.4时钟操作

 

3.2.5日期时间

 

3.2.6环境变量

包括两部分:系统平台相关和Kernel相关。

3.3网络连接

 

3.4文本相关

3.4.1文本输出

ime_trace  添加了系统自动的log功能,可以通过logcat工具查看。

3.4.2字体管理

 

3.5多媒体相关

3.5.1图像

JPEG

3.5.2声音

AMR

3.5.3视频

H.264/H.263

3.6 用户界面

屏幕方向:横屏/竖屏

屏幕尺寸:320*480

3.6.1 窗口事件

全屏

隐藏标题栏

绘制窗口

按键->应用级的按键处理

3.6.2按键事件

确认键:

方向键:

硬键盘:

软键盘:

3.6.3触摸屏事件

点按:

长按:

 按下:

松开:

3.6.4中断事件

系统中断:

应用中断:

意图中断:

3.7数据存储

Android 采用的是SQLite 3数据库,以.db的方式存放在各个应用对应的data目录下。

4.调试测试

Android 平台除了为应用程序开发提供了丰富的API外,提供了模拟器,方面调试程序,同时也为开展自动化测试提供了多种途径,本项目主要采用基于JUnit的自动化测试。
Android的模拟器和Mobile的模拟器一样是模拟ARM指令的,不像Symbian模拟器一样执行的是本地代码,所以在模拟器上模拟出来的效率会比真实手机上的效率要低。

开发过程中,核心库的移植测试以IDE调试为主,应用程序主要采用模拟器调试,后期的集成测试以手机测试为主,辅以模拟器调试。

4.1调试方法

trace方法

  

adb方法

  

堆栈分析

  

4.2测试框架

JUnit是广泛应用于Java程序开发中的单元测试框架。它定义了特定格式的方法做为测试用例,提供TestSuite测试套件和TestRunner测试执行器分别用于组织测试用例和运行测试用例并反馈测试结果。

Instrumentation则是一种操作系统和上层应用程序之间的监控机制。当应用程序运行时,若Instrumentation设置为开启,它将在应用程序运行前初始化,与应用程序运行在同一个进程中,监测应用程序与系统之间的交互,并可以对应用程序进行一定的控制,例如,监控应用中各Activity的调用情况,启动和结束Activity,对Activity生命周期中的各个状态进行切换,甚至可以向Activity发送按键事件和字符。

基于JUnit+Instrumentation的自动化测试框架的架构图如下所示:

4.3自动化测试

JUnit对各个功能模块作单元测试,然后利用Instrumentation模拟用户从图形界面发起的诸如点击或拖拽屏幕、输入字符、选择菜单项等操作,就可以实现自动化功能测试甚至系统测试。与数据库操作和View操作配合使用后,这种自动化测试能够实现与测试人员的手动测试具有同样的效果。

 JUnitInstrumentation相结合,既充分发挥了JUnit在测试用例开发、组织等方面的特点,又提供了对应用程序进行控制的有效途径。

 

4.4集成测试

略。

posted on 2010-12-14 22:41 Xu Jianxiang 阅读(840) 评论(0)  编辑  收藏 所属分类: Android

只有注册用户登录后才能发表评论。


网站导航: