android平台_android平台的体系结构 - CSDN
  • Android 平台搭建

    千次阅读 2010-07-21 12:33:00
    Android 开发平台搭建:1.安装环境:OS :windows 7旗舰版JDK :jdk 6.0Eclipse :eclipse-java-helios-win32 ADT :ADT-0.9.7,Eclipse IDE 进行 Android 开发的一种插件Android SDK : android-...

    Android 开发平台搭建:

    1.安装环境:

    OS windows 7旗舰版

    JDK jdk 6.0

    Eclipse eclipse-java-helios-win32

     ADT ADT-0.9.7Eclipse IDE 进行 Android 开发的一种插件

    Android SDK : android-sdk_r06-windows.zipAndroid Sdk包含开发用模拟器和API

    2.安装过程

    下面是我的安装过程:

    2.1安装JDK

    2.1.1下载jdk-6u18-windows-i586.exe

    安装在目录:D:/jdk1.6.0_18

    2.1.2 建立环境变量 

    新建 JAVA_HOME 

    计算机——属性——高级系统设置——高级——环境变量

    在  系统变量 下点击  新建 

    设置

    变量名:JAVA_HOME

    变量值:D:/jdk1.6.0_18

    点击 确定

    2.1.3 设置 path

    点击 编辑 (如果不存在path,则新建 path) 在变量值最后加上 :

    ;%JAVA_HOME%/bin  

    注意:分号)为英文分号,分号为变量间的分割符(如果已有分号就不必再添加),如下图:

    点击  确定

    2.1.4 设置 classpath (如果已存在则点击编辑)

    设置 

    变量名:classpath

    变量值:.;%JAVA_HOME%/bin/tools.jar;%JAVA_HOME%/lib/dt.jar

    注意:第一个分号前是英文句号( 

    点击 确定——确定——确定

    2.1.5 测试JDK

    添加完后,可以在命令行下用分别命令测试:javac java,如果出现JDK一大串文字就说明配置好了。
    2.2 下载Eclipse

    我使用最新Eclipse 3.6 eclipse-java-helios-win32 

    解压后则可使用,我的解压路径为:E:/android/eclipse-java-helios-win32

    2.3 下载并正确放置ADT 

    ADT的安装可参照官方教程:

    http://developer.android.com/sdk/eclipse-adt.html#installing

    打开以上链接找到 ADT-0.9.7.zip

    点击链接下载,解压得到:

    featuresplugins 里面的 jar 文件复制到Eclipse 安装路径下对应的文件夹,重启Eclipse即可

    以上正确配置后工具栏出现androidlogo,说明设置成功,如下图:

     

    2.4  下载安装SDK

    下载android-sdk_r06-windows 解压即完成安装(^_^

        但是还要设置 SDK,根据上文设置JDK的方法设置SDK。计算机——属性——高级系统设置——高级——环境变量。

    2.4.1设置SDK环境变量

    在  系统变量 下点击  新建 

    设置:

    变量名:ANDROID_HOME

    变量值:E:/android/android-sdk_r06-windows/android-sdk-windows

    注意:变量值为SDK 解压路径

    点击 确定

    2.4.2  设置 path

    点击 编辑  在变量值最后加上 :

    ;%ANDROID_HOME%/tools 

    注意:分号)为英文分号,分号为变量间的分割符(如果已有分号就不必再添加),如下图:

    点击 确定——确定——确定

    2.5  测试SDK环境

    添加完后,可以在命令行下用命令测试:android --help,如果出现android的帮助命令就说明配置好了。
    2.6  Eclipse 配置SDK路径

    打开Eclipse 选择Windows->Preferences->Android 

    点击选择Browser 选择Android SDK解压位置

    我的是解压路径:E:/android/android-sdk_r06-windows/android-sdk-windows  

    选择完毕点击 Apply—— OK退出

     

    2.7  创建Android Virtual Device
        刚下载的 SDKplatforms目录是空的

    运行cmd 进入到E:/android/android-sdk_r06-windows/android-sdk-windows/tools 目录下

    输入命令获得Android可用的虚拟设备android list target

    看到Available Android targets为空,如下图:

        进行如下设置:

    选择Window- > Android SDK and AVD Manager- > Available Packages 

    点开右边的树选择需要的SDK PlatformAndroid APIs

        这里我选择2.1版本,这里可以点击安装多个版本,因为我打算入手一台android2.1系统的手机,然后点击 Install Select如图所示:

     

     

     

    点击 Install

    安装过程如下,给个美图,呵呵,文件大概几十MB,耐心等等……

    点击close完成安装

        安装完后,选择Vitual Devices 右边点New,输入

    name: android21  (模拟器名称)

    Target: android 2.1-API Level 7 (如果之前你点击安装了多个版本,你可以选择不同的版本,我这里只能选择这个)

    SD Card: 256M 输入你想要的大小

    其他默认就可以了,完后点Create AVD

    如下图:

        这时,再命令行下进入到E:/android/android-sdk_r06-windows/android-sdk-windows/tools 目录下

    输入命令android list target

    可以看到Available Android targets了:

    至此环境搭建已经完成。

    3. 启动模拟器。
    运行cmd

    进入到E:/android/android-sdk_r06-windows/android-sdk-windows/tools

    输入命令:emulator -avd android21

    如图:

    这里用到你刚才命名的模拟器名字android21 作为参数运行后看到模拟器了,我顿时内牛满面!

     

     

     

    点击开机键

     

    令人激动的android之旅开始了……

    4.应用经典程序 HelloWrold

        在android里如何编写Helloworld?

    File->new->Project

        然后选择Android->Android Project

    点击 Next

        工程信息如下:

    Project name:可以随意

    Application name:可以随意

    Package name:可以随意

        注意:package name 必须是两层目录以上,否则出现错误:Package name must have at least two identifiers.

    Create activity:可以随意

     

     

    然后点击 Finish

        编辑代码:

    package pds.android.dev;

     

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.TextView;

     

     

    public class HelloAndroid extends Activity {

        /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            TextView tv = new TextView(this);

            tv.setText("Hello, World!");

            setContentView(tv);

        }

    }

        运行程序:

    Run->run ->Android Application->OK

    可以看到控制台有信息显示,然后看看模拟器,你会有惊人的发现(要首先解屏幕锁,向右拖动即可)

    贴士:

    每次运行模拟器都要运行cmd 编辑路径,非常麻烦,这是可以编写一个批处理文件命名为 android.bat ,放在桌面双击即可运行模拟器,代码如下:

    start "android" "E:/android/android-sdk_r06-windows/android-sdk-windows/tools/emulator.exe" "-avd" "android21"

    exit

     

     

     

     

     

    展开全文
  • Android 平台的Python——第三方库移植

    万次阅读 多人点赞 2019-04-25 22:58:25
    前面写了三篇关于将Python3嵌入Android项目的博客,后来一直有人留言问怎么移植Python的第三方库,包括说调用标准库报错等等问题,我之前一直以为这些是Python的基本常识,没想到很多人都不知道。之前的三篇博客,...

    Android 平台的Python——基础篇(一)
    Android 平台的Python——JNI方案(二)
    Android 平台的Python——CLE方案实现(三)
    Android 平台的Python——第三方库移植
    Android 平台的Python——编译Python解释器

    之前一段时间一直比较忙,导致很多想研究想写的博客没写,现在有时间正好补充一篇。前面写了三篇关于将Python3嵌入Android项目的博客,后来一直有人留言问怎么移植Python的第三方库,包括说调用标准库报错等等问题,我之前一直以为这些是Python的基本常识,没想到很多人都不知道。之前的三篇博客,大概是写给会一点Python的Android工程师看的,并不是完全定位写给小白看,这样一来我会默认看客已经知道哪些知识,很多细节没有详细解释,另一方面,我写博客的初衷是对自己知识的一个整理,等于是写给自己看的笔记。但是从另一个角度讲,最好的学习方法是把自己学会的知识立刻教授他人,这就是所谓的学习金字塔原理,有兴趣的人可以去了解学习金字塔。那么以后写博客,我会尽可能关注到一些细节,提升博客的水准,这也是对自己的一个升华提高。

    Python 的模块加载路径

    在讲库移植之前,先提下Python的基础知识,当我们自己编写了一个好用的库时,我们希望每次创建Python工程时都可以引入这个库,那么最简单的办法就是把它拷贝到Python标准库的路径下,但是不建议这样做,弄脏了标准库的目录,更好的做法是放到Python第三方库路径下,作为一个第三方库引入工程。这个路径是
    ...\python\Lib\site-packages
    路径中的python就是你安装的Python的根目录。说到这里,其实就引出了另一个话题,Python的模块加载路径,我们可以在解释器中输出这个路径

    import sys
    print(sys.path)
    

    以上代码输出的是一个列表,列表里面就是Python解释器去搜索模块的路径,一个一个去找,最后还是找不到,就会报错,说没有这个模块。知道了这一点,我们只需要修改这个列表,把我们自己写的模块的路径加到这个搜索列表,这样就可以成功引入我们自己编写的模块了。这种方法解决了一个问题,就是我想引入某个模块,这个模块或者是我们自己写的或者是从网上下载的某个库源码,但我不想把这些源码拷贝到Python解释器的库路径下面,而是存放在某个目录,更方便管理,比如是个git库目录,这个时候我们就可以在脚本的开始加上以下代码,动态将源码路径添加到Python模块搜索路径列表中

    import sys
    sys.path.append("my code path")
    

    CLE框架下导入Python第三方库

    前面的博客已经讲过了怎么使用CLE框架,在Android项目中嵌入Python解释器,但是有一些细节,很多人还不清楚

    • Android 工程的ibs目录中放的libpython3.4m.so是什么?
      要回答这个问题,首先要了解Python解释器的源码结构。Python解释器源码可以从官网下载,也可以从Github上下载 Python解释器源码
      在这里插入图片描述
      划去一些无关的内容,具体说一下结构
      • Include:包含Python提供的所有头文件,如果需要自己使用C/C++编写自定义模块扩展Python,就需要用到这写头文件
      • Lib: 由Python语言编写的所有标准库
      • Modules:包含了标准库中所有使用C语言编写的模块
      • Parser:对Python代码进行词法分析和语法分析的部分
      • Objects:所有Python的内建对象
      • Python:Python运行的核心。解释器中的Compiler和执行引擎部分
        如果对源码学习感兴趣,推荐一本书《Python源码剖析》,看过之后会受益匪浅,特别是对想自己改写Python解释器的人

    那么回到我们的话题,libpython3.4m.so实际上只是Parser、Objects、Python以及一小部分Modules编译出来的动态库,只是提供了Python解释器的核心功能。如有时间,在以后的博客,我会详细讲解,如何手动用NDK,使用Android.mk文件以及Makefile文件,分别在Windows系统和Ubuntu系统上交叉编译出完整的在Android上运行的Python so库。

    • 为什么使用CLE框架集成Python解释器后,有些标准库报找不到错误?
      看博客不细心的人,可能没有注意到一张图,这里面放的so是什么?
      在这里插入图片描述
      我们打开下载的CLE文件starcore_for_android.2.6.0,进入里面的python.files目录下面,一路下去找到一个叫lib-dynload的目录
      在这里插入图片描述
      可以看到,里面放了一堆so库,这个就是上文讲的Modules里面编译出来的Python标准库,这些Python的标准库都是用C语言写的,CLE框架中,将Modules里面的标准库模块都编译成了一个个小的so,这样做的好处就是可以按需集成,我们知道Android的Apk文件都是要尽可能小的,你没有用到的模块,可以不用集成到apk中,否则全部打包到libpython.so中,无端增加了apk大小。

    好了,到此铺垫都讲完了。现在具体谈一下装载Python库的思路

    1. 将需要的Python库打包到工程的assets目录下,在适当的时候,将assets目录下的文件都拷贝到手机存储中,这个存储可以是sdcard,也可以是内部的/data/data/package-name下
    2. 在需要引入这些库的时候,使用我们一开始讲的方法,将路径添加到Python的模块搜索列表——sys.path列表,让解释器能搜索到它们。

    下面我们以一个实例来具体说明,这次我们需要移植的是爬虫需要用到的两个库,requests和BeautifulSoup,有了这两个库,我们瞬间就能将废旧的Android手机制作成Python爬虫机,老机器焕发新生命,怎么样激不激动?

    1.打包库

    如果我们本地Python环境中已经安装了这些库,可以直接去Python的库目录打包,因为这些库基本是纯Python代码,是跨平台的,当然,别把Python2.x和Python3.x搞混。如果没有安装,去相关的官网下载它们的源码打包。
    在这里插入图片描述
    在这里插入图片描述

    很多人可能不知道,Python本身就是支持导入zip格式的包的,不信的同学可以自己在本地实验一下,将自己写的库压缩为zip,然后依然可以愉快的import。以上包中,python3.5.zip是纯Python代码的标准库,在CLE里面已经提供了,唯一需要说明的地方,是certifi库为什么没有打包,而是以目录形式提供呢?这里也正是我采坑的地方,之前试验一直报错没有成功移植requests库,就是因为打包了certifi,后来反复测试定位到该包,发现里面有一个cacert.pem文件,不是.py文件,在压缩包中无法被读取,因此只能以文件夹形式提供了。
    另外还有一个小点说一下,相信绝大部分人不会犯错,但总有粗心大意的。打包的时候,要打包这个库的源码父目录,就像certifi一样,是打包这个certifi目录,而不是进到certifi里面,选中所有文件压缩。之前一个同事就是犯这种错误,一直和我说不成功。

    2.递归拷贝

    在工程的assets目录创建python文件夹,将所有包复制进该目录,在app启动的适当时候,调用以下代码拷贝assets中的所有文件到手机存储

    		// Extract python files from assets
            AssetExtractor assetExtractor = new AssetExtractor(this);
            assetExtractor.removeAssets("python");
            assetExtractor.copyAssets("python");
    
            // Get the extracted assets directory
            String pyPath = assetExtractor.getAssetsDataDir() + "python";
    

    AssetExtractor类在Android 平台的Python——JNI方案(二)一文已经提过了,这里再次给出开源库中的
    链接 这里只有一点需要特别说明,在刚开始的时候我准备剪裁lib-dynload文件夹提供的C语言部分的Python标准库,结果试验性的放了几个so,一直报各种找不到错误,最后不想浪费时间试错,直接将lib-dynload中的所有so拷贝到了assets/python文件夹,有时间的朋友可以精心剪裁出真正需要的so,减小apk体积。

    3.添加库到搜索路径中

    还没看过CLE使用的那篇博客,请先浏览CLE的使用一文Android 平台的Python——CLE方案实现(三)
    另外需要注意的是在Android清单文件中,网络权限别忘了
    <uses-permission android:name="android.permission.INTERNET" />

    protected void init() {
            final String appLib = getApplicationInfo().nativeLibraryDir;
            AsyncTask.execute(new Runnable() {
    
                @Override
                public void run() {
                    loadPy(appLib);
                }
            });
        }
    
        void loadPy(String appLib){
            // Extract python files from assets
            AssetExtractor assetExtractor = new AssetExtractor(this);
            assetExtractor.removeAssets("python");
            assetExtractor.copyAssets("python");
    
            // Get the extracted assets directory
            String pyPath = assetExtractor.getAssetsDataDir() + "python";
    
            try {
                // 加载Python解释器
                System.load(appLib + File.separator + "libpython3.5m.so");
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            /*----init starcore----*/
            StarCoreFactoryPath.StarCoreCoreLibraryPath = appLib;
            StarCoreFactoryPath.StarCoreShareLibraryPath = appLib;
            StarCoreFactoryPath.StarCoreOperationPath = pyPath;
    
            StarCoreFactory starcore = StarCoreFactory.GetFactory();
            //用户名、密码 test , 123
            StarServiceClass service = starcore._InitSimple("test", "123", 0, 0);
            mSrvGroup = (StarSrvGroupClass) service._Get("_ServiceGroup");
            service._CheckPassword(false);
    
            /*----run python code----*/
            mSrvGroup._InitRaw("python35", service);
            StarObjectClass python = service._ImportRawContext("python", "", false, "");
            /* 设置Python模块加载路径 即sys.path.insert() */
            python._Call("import", "sys");
            StarObjectClass pythonSys = python._GetObject("sys");
            StarObjectClass pythonPath = (StarObjectClass) pythonSys._Get("path");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"python3.5.zip");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"requests.zip");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"idna.zip");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"certifi");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"chardet.zip");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"urllib3.zip");
            pythonPath._Call("insert", 0, pyPath+ File.separator +"bs4.zip");
            pythonPath._Call("insert", 0, appLib);
            pythonPath._Call("insert", 0, pyPath);
    
            python._Set("JavaClass", Log.class);
            service._DoFile("python", pyPath + "/test.py", "");
            Log.d("callpython", "python end");
        }
    

    test.py文件

    import imp  #test load path
    import requests
    from bs4 import BeautifulSoup
    
    def log(content):
        JavaClass.d("formPython",content)
    
    
    def testGet():
        log('Hello,World from python')
        r = requests.get("https://www.baidu.com/")
        r.encoding ='utf-8'
        bsObj = BeautifulSoup(r.text,"html.parser")
        for node in bsObj.findAll("a"):
            log("---**--- "+node.text)
    
    testGet()
    

    日志:
    在这里插入图片描述

    在Crytax-NDK的Python中集成第三方库

    有了CLE,我为什么仍然执着于Crytax-NDK中的Python解释器了?说实话,我并不是特别喜欢CLE,因为它封装了太多细节,且源码并未开源,具体实现代码不知,性能就无法掌控,特别是无用代码,导入一些非必要的so和jar,增加了apk体积,因为这个框架并不是专门针对python的,还可以集成其他的很多脚本语言到Android中,为了通用性,往往就需要很多对我们来说无用的代码,性能也会有牺牲。但是它的优点也很明确,那就是使用简单,不需要你会Ndk开发,技术成本低。

    使用Crytax-NDK实现,具体思路和上面讲的是一样的,直接参看Android 平台的Python——JNI方案(二)一文,然后将需要的第三方库源码打包安装到手机存储,需要注意的地方就是在调用的Python脚本的开始处,加上以下代码,也可以使用其他更优雅的方式,完成这个搜索路径添加,这里只是一个简单的demo代码演示。

    import sys
    sys.path.append("你拷贝到手机上的路径/assets/python/urllib3.zip")
    sys.path.append("你拷贝到手机上的路径/assets/python/chardet.zip")
    sys.path.append("你拷贝到手机上的路径/assets/python/certifi")
    sys.path.append("你拷贝到手机上的路径/assets/python/idna.zip")
    

    但是,但是……

    HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))
    

    这里有一个极其操蛋的问题,使用requests访问https的地址时,会报错,只能访问http地址。因为Crytax-NDK库的Python解释器编译得有问题,没有支持openssl,真不知道Crytax-NDK的作者怎么想的,由于Crytax-NDK是开源的,我好不容易找到了其源码,查看了他们编译Python解释器的脚本,真让人无语,不能访问https的Python有什么用?
    在这里插入图片描述
    可以看到,在编译ssl模块时,加了一个OPENSSL_HOME属性控制,即有ssl源码时,就编译这部分,否则跳过,然而Crytax-NDK里面openssl的目录是空的,所以最后生成的Python一系列so中,唯独没有ssl的so。尝试从其他地方拷贝一个ssl的so是不可行的,因为他们的Python解释器里,ssl的属性是没有enable的,你拷贝了解释器也并不会去链接,然并卵,看来只能手动重新编译这个Python解释器了,但是手上没有搭建环境,光环境搭建就得折腾一番,下次博客在写吧,下次的博客我主要讨论一下,自己手工编译解释器,然后运用cython模块编译pyjnius库,实现纯手动在Android搭建一个python.so+ pyjnius.so的环境,实现简便的Java与Python的互操作,有了它,CLE基本可以扔掉了。如果不知道pyjnius,请谷歌。

    最后,如果您觉得我的博客对您有用,看过之后,麻烦点个赞,毕竟顶一下又不会怀孕,因为很多人看过之后,也没有一点表示,不管怎么说,写博客既花时间,也耗费一点精力,毕竟也是在分享知识啊,在这个知识付费的时代,免费分享也不易,点个赞,只是鼠标一抖的事而已,谢谢!

    关注个人公众号:编程之路从0到1

    编程之路从0到1

    展开全文
  • Android平台介绍

    2019-06-25 09:49:20
    一、Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件、游戏、导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称。 智能手机操作系统 ...

    一、Android平台介绍

    什么是智能手机

    具有独立的操作系统,独立的运行空间,可以由用户自行安装软件、游戏、导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称。

    智能手机操作系统

    Android、IOS、Windows Phone、BlackBerry、Symbian

    什么是Android

    Android是一种基于Linux的开源操作系统,主要使用于移动设备,例如智能手机、平板电脑、智能手表、智能电视等等。由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资,逐渐扩展到平板电脑及其他领域上。

    Android发展历史

    Android 4.1Jelly Bean(果冻豆):2012年6月28日

    新特性:更快、更流畅、更灵敏;特效动画的帧速提高至60fps,增加了三倍缓冲;增强通知栏;全新搜索;搜索带来全新的UI、智能语音搜索和Google Now三项新功能;桌面插件自动调整大小;加强无障碍操作;语言和输入法扩展。

    Android 4.2Jelly Bean(果冻豆):2012年10月30日

    Photo Sphere全景拍照功能;键盘手势输入功能;改进锁屏功能,包括锁屏状态下支持桌面挂件和直接打开照相功能等;可扩展通知,允许用户直接打开应用;Gmail邮件可缩放显示;Daydream屏幕保护程序;用户连点三次可放大整个显示频,还可用两根手指进行旋转和缩放显示,以及专为盲人用户设计的语音输出和手势模式导航功能等;支持Miracast无线显示共享功能

    Android 4.3 Jelly Bean

    提升了性能,更加流畅,提升反应速度。新增脱机语音输入、更多的平板优化(主要针对小尺寸平板)、强化Voice Search语音搜索。大幅改变用户界面设计。增强恶意软件的保护措施。

    Android 4.4 KitKat“奇巧”

    在阅读电子书、玩游戏、看电影时支持全屏模式。优化存储器使用,在多任务处理时有更佳工作的表现。支持Google Cloud Print服务,让用户可以利用户中或办公室中连接至Cloud Print的打印机,打印文件。全新的原生计步器。全新的NFC付费集成

    全新的非Java虚拟机运行环境ART(Android Runtime)

    什么是Dalvik:

    Dalvik是Google公司自己设计用于Android平台的Java虚拟机。dex格式是专为Dalvik应用设计的一种压缩格式,适合于内存和处理器速度有限的系统。Dalvik允许同时运行多个虚拟机的实例,并且每一个应用作为独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

    什么是ART:

    在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这一机制并不高效,但让应用安装比较快,而且更容易在不同硬件和架构上运行。

    ART完全改变了这种做法,在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。

    Dalvik与ART的区别

    1. 在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

    2. ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法"。

    3. 预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗。

    Android 5.0 Lollipop

    采用全新Material Design界面。支持64位处理器。全面由Dalvik转用ART(Android Runtime)编译,性能可提升四倍。预载省电及充电预测功能。新增自动内容加密功能。新增多人设备分享功能,可在其他设备登录自己账号,并获取用户的联系人、日历等Google云数据。强化网络及传输连接性,包括Wi-Fi、蓝牙及NFC。强化多媒体功能,例如支持RAW格式拍摄。提供低视力的设置,以协助色弱人士。

    Android 6.0 Marshmallow(棉花糖)

    新系统的整体设计风格依然保持扁平化的MeterialDesign。Android6.0在对软件体验与运行性能上进行了大幅度的优化。Doze电量管理,Android6.0可使设备续航时间提升30%。锁屏下语音搜索、指纹识别、更完整的应用权限管理、Now on Tap功能、Android Pay进一步强化移动支付。

    Android 7.0 Nougat(牛轧糖)

    分屏多任务,全新下拉快捷开关页,通知消息快捷回复,通知消息归拢,夜间模式,流量保护模式,全新设置样式,改进的Doze休眠机制,系统级电话黑名单功能,菜单键快速应用切换

    Android各个版本对自动化测试的支持

    1.0 instrumentation (android.test)

    2.2 robotium

    2.3 monkeyrunner

    4.1 input text 更新

    4.4 uiautomator

    几种操作系统的对比

    Android智能手机操作系统。基于Linux平台的开源手机操作系统。它包括操作系统、用户界面以及应用程序

    优点:目前大部分软件及游戏不花钱,系统可以自定义,自由度较高。开发可扩展性非常好。

    缺点:硬件使用效率不高,优化的不够。游戏软件质量没有IOS高,安全性稍差。

     

    IOS操作系统是苹果操作系统,用iPhone可以一键登录App Store,轻松下载到你需要的应用程序。

    优点:IOS优化好,很流畅,兼容性好,人性化,上手简单,易于操作,安全性相对来说较高。

    缺点:比较封闭,自定义程度不高,不能对系统进行深层次的改造。

     

    Window Phone是微软发布的一款手机操作系统,他将微软旗下的游戏、音乐与独特的视频体验整合至手机中。

    优点:流畅性稳定性好(相对安卓而言)

    缺点:硬件配置高、耗电量大、电池续航时间短、硬件成本高,目前应用App、游戏都比较少。

     

    Android平台优势

    比Symbian更先进

    全新开源系统,系统发展更具前景

    快速增长的海量第三方免费软件

    无“证书”限制,安装软件更自由

     

    比IOS更开放

    风格更自由,简洁

    开源系统,更多第三方免费软件

    软件安装卸载更方便,无需第三方平台软件

     

    Android系统的结构

    Linux内核层

    硬件和其他软件之间的一个抽象隔离层

    提供安全机制、内存管理、进程管理、网络协议堆栈、驱动程序等

     

    中间件层

    由函数和Android runtime构成

    函数库主要提供一组基于C/C++的函数库

    Surface Manager,支持显示子系统的访问,提供应用程序与2D、3D图像层的平滑连接

    Media Framework 实现音视频的播放和录制功能

    SQLite 轻量级的关系数据库引擎

    OpenGL ES 基于3D图像技术

    FreeType位图与矢量字体渲染

    Webkit浏览器引擎

    SGL 2D图像引擎

    SSL 数据加密与安全传输函数库

    libc标准C运行库 Linux系统中底层应用程序开发接口

     

    Android runtime

    核心库提供Android系统的特有函数功能和Java语言函数功能

    Dalvik虚拟机实现基于Linux内核的线程管理和底层内存管理

     

    应用程序框架

    Resource Manager 允许应用程序使用非代码资源

    Location Manager 管理与地图相关的服务功能

    Notification Manager 允许应用程序在状态栏中显示提示信息

    Package Manager 管理应用程序安装包

    Window Manager 管理应用程序窗口

     

    应用程序

    系统出厂自带的一些应用程序

     

    Android 对测试的挑战

    混乱的Android

    2013年的某统计数据

    开发者95万

    机型3500种

    用户4亿

    应用150万

     

    设备屏幕分辨率不同

    厂商对API的实现不同

    手机的性能差异化

    底层功能潜在的问题

     

    1.同一API的不同体现----crash、ANR(55.8%)

    2.严重的功能性问题,如联网、短信、蓝牙等(20.7%)

    3.设备屏幕分辨率(18.9%)

    4.其他问题(4.6%)

     

    结语:了解每一个操作系统新版本的新功能,根据新版本的特性更新测试用例以及测试侧重点。

    二、Android功能测试

    需求

    以产品需求为导向和前提开展测试工作

    启动和停止

    首次启动:

    欢迎界面、启动时间、信息拉取

    二次启动:

    启动时间、各种入口、再启动状态、信息拉取、登录

    退出应用:

    各种退出的方式(手动、被动)、收拾残局、再次启动

    程序功能模块

    文本输入:

    正常输入、非正常输入、边界值,特殊字符

    事件触发:

    满足需求、尝试点击非点击区域、检查debug后门

    权限安全

    需要用户确认的权限没有授权,权限默认关闭

    联网权限被管家、系统安全类软件限制情况下的联网操作

    权限敏感度,如通讯录等为系统的绝密权限谨慎获取

    使用安全软件进行安全漏洞、病毒扫描,看被测APP是否会被这些安全软件提示有问题而影响用户的对被测APP的使用或者印象

    文件存储

    APP使用过程中产生的临时文件存储路径、命名方式等

    APP中涉及的下载操作产生的文件存储方式

    存储的文件被锁、占用

    有外置SD、内置SD卡都要考察APP产生的文件是否正确

    APP被安装在SD卡或者手机存储空间

    磁盘空间不足、磁盘无权限(如读、写操作)

    网络与流量

    网络提示

    网络信号,尤其是弱网络环境下应用的表现

    不同运营商网络:电信、联通、移动,2G/3G/4G

    网络中断、网络恢复场景的逻辑处理(如重试)

    首次启动应用的流量是否符合预期

    统计、异常上报对流量的影响

    基于流量安全的特殊业务,如仅wifi联网

    接口容错

    前端测试后台接口测试覆盖不到的内容

    请求网络层错误:http response返回非200的状态

    请求业务层错误:接口返回内容为空、超长、字段类型不匹配

    中断测试

    锁屏中断:停留在程序操作界面进行锁屏,恢复后检查操作是否正常

    前后台切换:停留在程序操作界面,通过Home键,进行程序的前后台切换

    加载中断:页面接口请求、界面框架加载时,通过Home键、返回键、快速切换操作进行中断

    系统异常中断:如关机、断电、来电

    声源占用:比如导航正在规划完路线在导航,这时插入了U盘,程序将播放u盘里的歌曲声源优先级设置为最高,当拔掉u盘,导航的声源占用优先级应恢复。

    机型适配

    分辨率适配:UI结构、对话框基于分辨率、屏幕大小进行适配

    OS版本适配:涉及API调用如获取SIM卡信息、外置SD卡设置等等

    CPU硬件配置:X86机型、V5、V6、V7、V8

    系统配置

    进程管理:省电管理、后台进程驻留管理

    显示管理:字体大小、字体类型

    语言环境:语言环境

    横竖屏配置:是否支持横竖屏自适应处理

    升级覆盖安装

    逐步升级:用户数据、设置、状态的保留,特别注意新版本已去掉的状态或设置

    跳级:即隔开版本覆盖安装(容易出现问题)

    降级:覆盖安装更低版本

    卸载安装: 卸载安装,安装目录清理,SD卡存储数据不被清理

    省流量升级:有些助手提供省流量升级的方式

    在没有更新或者网络时,需要给予用户正确的信息表达

    强制升级

    不升级无法使用

    性能测试

    性能: 核心操作的性能指标:如CPU/内存、响应时长、电量、流量

    稳定性: 选择某些场景做持续反复操作:Monkey稳定性操作,持续多个小时

    流畅度: 列表滑动、返回进入、快速点击

    兼容性测试

    通用软件:例如输入法

    安全软件:例如各种管家

    竞品软件、同类软件,是否出现冲突

     

    三、Android专项测试

    专项测试

    根据测试过程中凸显的问题,可以成立专项测试。通常专项测试有:内存、CPU、FPS、弱网络、电量、流量、流畅度、加载速度、成功率、内存、响应速度、稳定性、规划时间、内容推荐精准度、声源验证、竞品对比测试、支持视频格式

    工具:GT

    GT:在Android平台上,可以下载GT的APK、安装后直接使用,GT的APK提供了GT的绝大部分基础功能;例如,基础性能测试、日志查看、网络数据包抓取等等。

     

    GT SDK:在Android平台上,如果希望使用GT的高级功能,如“插桩”等,就必须将GT的SDK嵌入到被调测的应用的工程里,再配合安装好的GT使用。

     

    adb常用命令

    adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序,说白了就是debug工具。

     

    adb install xxxx.apk安装一个apk到电脑连接的默认手机

    adb uninstall xxxx.apk卸载

    adb devices 当前电脑连接了几台手机

    adb kill –server杀掉服务

    adb start –server启动服务

    adb reboot 重启手机

    adb shell 进入手机系统

    am

    pm

    pm clear 清理app相关的信息恢复到刚安装的状态

    service list 当前系统中运行的系统级的服务

    dumpsys

    input text

     

    内存测试

    命令:dumpsys meminfo [package name]

     

    CPU

    命令: dumpsys cpuinfo | grep<packagename>

     

    流量

    方法:从文件中获取

    /proc/uid_stat/<uid>/tcp_snd

    /proc/uid_stat/<uid>/tcp_rcv

     

    流量(抓包)

    方法:

    tcpdump–p –s 0 –vv–w filename

    -s 0: 按包长,截取数据

    -vv输出详细的报文信息

     

    FPS

    命令:

    service call SurfaceFlinger 1013

    adb shell dumpsysSurfaceFlinger --latency <window_activity>

    SurfaceFlinger是一个系统服务,管理Android帧缓冲区

    note: 需要root

     

    电量

    命令:/sys/class/power_supply/battery/uevent

     

    电量(5.0系统之后手机)

    命令:

    adb shell dumpsysbatterystats> xxx.txt 

    adb shell dumpsysbatterystats> com.package.name > xxx.txt

    结果分析:

    python historian.py xxx.txt > xxx.html

     

    稳定性测试

    Monkey Test

    运行在模拟器或设备上的一个工具,模拟用户按键输入,触摸屏输入,手势输入等。看手机多长时间会出异常

    Android Monkey Test?

    • 对软件进行漫无目的,随机的,非常理的胡乱操作,以测试软件的稳定性和健壮性
    • 应用程序开发者验证自己应用的健壮性
    • 设备制造商对自己设备施行压力测试,看设备能坚持多久
    • 集成adb shell里面的一个命令,命令参数包括:

    l  基本配置选项,如设置尝试的事件数

    l  运行约束选项,如设置只对单独的一个包进行测试

    l  事件类型和频率,调试选项

    弱网络

    所谓弱网环境简单来说就是网络质量较差导致丢包和延迟等现象

    工具:fiddler等限速工具

    四、bug根因分析

    界面适配

    问题:

    1、手机分辨率为1920x1080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形;

    2、因用户设置的特殊字体导致列表的字母条不显示;

    3、某些 banner 图片在部分机型只能显示一半。

     

    预防方法:

    1、文字或者图片需要适配不同分辨率的机型时,建议使用dp方式进行开发,即使是使用dp,也需要考虑特殊分辨率的机型显示;

    2、适应宽度/适应高度/高宽均适应的;

    3、针对程序需求,设定合适的适配机制。

     

    系统适配

    问题:

    调用高版本API,导致某些机型进入主页显示空白页面。

     

    预防方法:

    调用高版本API,需要考虑兼容性,开发团队需要制定程序API调用规范。

     

    交互适配(1)

    问题:

    1、在输入框操作时,调出系统输入法软键盘后,没有有效启用键盘上的“下一项”、“确定”、“搜索”等按键;

    2、系统软键盘,在关闭当前页面时没有及时收起软键盘。

     

    预防方法:

    1、需求设计过程中需要考虑输入法操作键的使用细节,确保所有软键盘的输入键可使用;

    2、设计规范:程序/页面设计针对输入法操作键的使用制定规范。

     

    交互适配(2)

    问题:

    APP界面的“返回”操作与手机系统的“返回”按键操作效果不一致;或界面未提供“返回”,在无系统“返回”按键的手机上,无法返回。

     

    预防方法:

    设计规范:程序设计针对手机返回键制定使用规范;在设计中要综合界面需求设定是否提供“返回”操作。

     

    界面风格

    问题:

    1、对话框标点、英文字符出现全角、半角的不统一;

    2、对话框、提示浮动框提示语风格不同,显示位置均不同,产品友好度下降;

    3、字体和字号要在app中是不同的风格。

     

    预防方法:

    建立统一的界面风格/语言文字提示规范(可参考微软的标准)

    全角字符和半角字符都要使用一个空格分开

    英文和数字之间要有空格分开

    汉字和英文、数字要有空格分开

    带有汉字的话要使用全角字符

    语言中不要混用全角和半角标点

    字体和字号要保持统一的风格

     

    性能优化(1)

    问题:

    1、进入一些列表,若数量较多则会出现卡死;

    2、界面显示对象数量较多,某些会导致页面操作卡顿,用户体验很差;

    3、处理大量数据时,用户等待时间过长,无进度条提示进度。

     

    预防方法:

    1、程序对耗时较多的操作逻辑、判断逻辑,不放入UI主线程;

    2、对数据库记录较多的操作,可以改成数据库批量操作,或者调用批量接口;

    3、程序在后台处理用户的输入,则提供进度条或对话框。

     

     

    性能优化(2)

    问题:

    1、后台播放内存泄露;

    2、程序后台运行的时候,手机一直处于占用CPU的运行状态;

    3、页面中的动态效果(如:马灯滚动)次数无限制,导致界面不断刷新消耗资源。

     

    预防方法:

    1、使用静态分析工具或代码检查方式检查内容的分配和释放;

    2、WakeLock机制是防回收技术,当没有播放、下载等操作时,应该主动关闭后台的唤醒锁,减少耗电。当再次需要使用播放、下载功能时才去开启唤醒;

    3、对刷新消耗资源类操作,要有次数限制。

     

    多服务、多进程

    问题:

    1、某些功能操作后,app 无法连接网络;

    2、进程被杀死后重启,通知栏中显示的信息不正确,没有显示正确的信息;

    3、app未启动,通过其他第三方app的调用入口调用app ,无法正常使用某些功能;

    4、服务停止后,无法被启动;

    5、程序被手动退出后,进程仍然在后台存在。

     

    预防方法:

    1、重新初始化时获取值时读取到空值,因此赋予一个默认值;

    2、服务重启被回收重启时,初始化对象时要判断当前是否已存在,若存在则复用并更新内容;

    3、任务独立,需要创建不同的服务,生命周期不会互相影响,服务独立可以避免某个服务结束会影响到其他功能的正常使用;

    总体,对有启用多服务、多进程的程序,有需要做好服务、进程的一致性管理。

     

    外部调用

    问题:

    1、某些机型启动app之后一直在调用某些外部服务(通过后台服务可以看到其他服务进程,退出app后,有些服务进程消失);

    2、某些功能模块被扫描成存在木马病毒;

    3、安全管家告警程序获取绝密权限(通讯录权限)。

     

    预防方法:

    调用第三方功能作为统计或者监控作用时,需要考虑该sdk是否会一直唤醒app导致耗电或者程序无法真正关闭问题,调用外部第三方SDK,要考虑被安全工具(上次有广告被扫描到病毒)扫描的设计需求、及时关闭不需要的服务进程,在能满足需求的情况下,尽量减少使用敏感的系统权限。

     

    网络机制(1)

    问题:

    1、网络重试操作机制不统一,导致页面超时体验风格不统一;

    2、某些应用页面,访问响应慢。

     

    预防方法:

    1、对底层网络重试机制做统一封装后,供上层调用;

    2、固定好每次重试间隔(建议10s重试)和重试总次数(建议3次);

    3、为使页面提示可以区分网络层与业务解析层不同错误,需对不同错误类型做分类的异常处理,并提示用户原因或让用户重试;

    4、对多个网络请求的界面,网络接口并行请求有利于提高响应速度。

     

    网络机制(2)

    问题:

    1、未加载完图片时切换到相似tab,切回不再加载图片;

    2、进入一个tab,该页面已经加载完成,选择点击某个详细信息页面返回时,页面会闪一下。

     

    预防方法:

    1、一个页面有多个tab页时,用户切换tab可不轻易取消线程,取而代之使用暂停线程,退出页面时才回收清除;

    2、启动负载分摊机制的请求,可先保存请求地址,供返回时判断避免重复加载。

     

    网络机制(3)

    问题:

    1、iOS弱网络下获取不到配置,导致启动卡死;

    2、sim卡未激活,无移动网络,某些功能卡死;

    3、断网下启动,登录状态丢失,某些功能信息未正确显示。

     

    预防方法:

    1、启动逻辑中的网络类请求不能阻塞UI主线程,即网络请求数据可不即时响应(可在下次启动时生效);

    2、按钮的点击事件不跟接口关联,做成异步处理不管是否有返回,都可以正常进行点击操作;

    3、离线操作类,不因与当前网络状态有影响。

     

    下载空间有效性判断

    问题:

    1、空间不足时,无法保存信息时,没有提示和提前判断;

    2、本地存储空间不足时,保存文件时没有相应提示;

    3、空间不足时,文件下载不成功,导致重复不停下载,浪费用户流量。

     

    预防方法:

    1、对磁盘剩余空间的判断和自动清理逻辑可以做统一封装,提供各不同下载业务使用;

    2、可结合系统硬件配置的10%作为有效剩余空间阀值;

    3、针对手机内外置SDCard,可以在空间不足情况下做分区切换机制。  

     

    下载文件完整性判断

    问题:

    1、换肤图片未下载完,就触发换肤操作,导致换肤效果错误;

    2、图片无法下载完全,导致图片展示不完整;

    3、文件下载完成后,由于网络错误与源文件不符,导致下载后无法播放;

    4、上传文件功能,目标物理文件不存在(界面缺显示存在),导致传送文件页面一直处于等待中。

     

    预防方法:

    1、通过判断下载前后文件的size或者文件内容签名,确保下载文件完整后再触发文件使用相关的逻辑;

    2、文件传输时检查文件是否存在,若不存在则视为传输失败,不阻塞后续传输。

     

    阻断连续操作

    问题:

    1、连续快速切换界面,或者频繁触发某些功能操作,导致程序卡死;

    2、连续多次点击同一张图片,导致该图片下载错误。

     

    预防方法:

    使用间隔响应、延迟响应的方式,达到多次相同操作只的触发一次有效逻辑,

    操作一次后,可将按钮等元素设定为禁用状态,防止用户多次点击和请求。

     

    有效统计逻辑

    问题:

    操作页面某些元素,也会导致发送页面使用的统计信息。    

     

    预防方法:

    为确保统计数据上传的有效性,只针对真正展示的界面做上报统计,对于展示不完整、非针对性展示不做统计上报。

     

    程序健壮性判断(1)

    问题:

    1、分享到新浪微博(手机未装新浪微博客户端),app崩溃;

    2、后台接口变更(返回值和类型发生变化),客户端不兼容新格式判断,抛出崩溃异常;

    3、搜索默认操作崩溃;

    4、使用外部第三方数据,出现空数据或者非标准格式,则app崩溃;

    5、输入框没有限制字符长度,保存时导致溢出崩溃。

     

    预防方法:

    1、客户端针对接口返回需做容错处理,如返回为空、返回数据类型不一致;

    2、任何文本框类型的需要限制输入长度。

     

    程序健壮性判断(2)

    问题:

    1、某些功能的初始化逻辑没有加入启动逻辑,导致功能使用失败;

    2、退出重启app,无法自动登录。

     

    预防方法:

    1、制定启动加载逻辑规范;

    2、对于重要的业务建议加入启动逻辑,并在业务实际使用时再根据状态多一层判断和加载;

    3、产品人员需要考虑是否需要保存自动登录功能,并明确告之开发和测试人员。

     

    安全机制

    安全考虑:

    1、在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中;

    2、即使要传递密码参数也不要使用pwd、passpord这样的参数名称来进行传递,防止被截获;

    3、要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。

     

    预防方法:

    建立标准的数据传输和命名规范,并制作一些网页开发模板或者规范供参考。

     

    日志调试管理

    问题:

    上线以后,调试日志没有关闭,影响程序性能。

     

    预防方法:

    1、日志统一开关,编译正式包需要关闭;

    2、再程序界面有入口可以检查是否关闭,方便及时校验;

    3、方便定位问题,可以做日志动态开启的隐藏开关;

    4、方便收集问题,可以对问题类型做上报处理(典型如崩溃日志上报)。

     

    Bug预防总结

    分析问题à找到具体原因à解决问题à总结问题à建立预防方法à规范流程和制度à监督执行

    五、课堂练习用例汇总

    序号 测试类型 测试项 测试点
    1 功能测试 启动和停止 首次启动打开一个聊天窗口,再次启动保留聊天窗口
    2 退出从新登录,聊天窗口是否保留
    3 进程被杀掉后重新开启程序聊天窗口是否保留
    4 功能 内容(文本、语音、图片、视频、表情、位置、红包、转账、卡券、名片、收藏)测试(正常输入、非正常、边界值、特殊字符)
    5 聊天记录的保留机制是否符合预期
    6 消息撤回机制是否符合预期
    7 语音转文字是否符合预期
    8 语音听筒模式与扬声器模式互相转换是否符合预期
    9 免打扰功能是否符合预期
    10 同账号不同设备信息同步是否符合预期
    11 账号异地登录的处理符合预期
    12 更换设备后登录原账号,聊天窗口是否保留,聊天记录是否可以从服务端获取
    13 同一账号先后登录处理机制是否符合预期
    14 编辑完信息未发送,信息的草稿保存机制是否符合预期
    15 复制粘贴是否符合预期
    16 UI 界面、输入框、易用性、流畅性、用户体验
    17 权限安全 拍照、读取相册、位置、存储等功能是否申请权限
    18 无权限时使用相关功能是否符合预期
    19 无权限时应有友好提示并引导用户如何授权
    20 文件存储 存储空间不足给予有好提示,并引导清理文件
    21 保存文件(图片、语音、视频等)
    22 存储空间不足或无读写权限聊天功能是否符合预期
    23 网络与流量 流量消耗是否符合预期
    24 断网时(友好提示)、网络恢复时是否符合预期
    25 wifi/非wifi(全网通 2g/3g/4g)是否符合预期
    26 弱网表现是否符合预期
    27 非wifi环境下是否有“是否允许4g使用”开关
    28 发送文件时是否对不同的网络情况作了不同处理
    29 因网络问题发送失败的消息重新发送是否符合预期
    30 接口容错 接口返回错误时,反馈给用户的信息是否符合预期
    31 中断测试 来电、闹钟、提醒、其他推送造成的系统中断表现是否符合预期
    32 锁屏、解锁后表现是否符合预期
    33 前后台切换表现是否符合预期
    34 断电、通电、关机、开机表现是否符合预期
    35 造成发送中断后重新发送是否符合预期
    36 机型适配 指定品牌型号适配
    37 指定分辨率适配
    38 指定os版本适配
    39 系统配置 修改系统的字体、字号设置后表现是否符合预期
    40 改变系统语言环境后表现是否符合预期
    41 横竖屏切换是否符合预期
    42 修改当前系统时间为错误时间,表现是否符合预期
    43 升级安装 逐步升级后表现是否符合预期
    44 跳级后表现是否符合预期
    45 降级后表现是否符合预期
    46 卸载重新安装表现是否符合预期
    47 性能测试 cpu/内存、响应时间、电量等是否符合预期指标
    48 典型场景长时间操作稳定性是否符合预期指标
    49 整体操作的流畅度是否符合预期
    50 兼容性 不同os交叉使用、不同os版本交叉使用是否符合预期
    51 对常用输入法的兼容
    52 对常用安全软件的兼容
    53 对竞品软件的兼容
    54 信息安全 敏感词机制是否符合预期
    55 用户重要信息加密是否符合预期
    56 数据库加密是否符合预期
    57 专项测试 随机应变 根据测试过程中凸显的问题,判断是否需要成立专项测试。
    58 测试项 内存、CPU、FPS、弱网络、电量、流量、流畅度、加载速度、成功率、内存、响应速度、稳定性、规划时间、内容推荐精准度、声源验证、竞品对比测试、支持视频格式

    转载于:https://www.cnblogs.com/zqq521/p/7472615.html

    展开全文
  • Android系统介绍及平台特性

    万次阅读 2013-08-08 16:46:16
    本文关键字:android操作系统,android是什么意思,android平台,android培训, Android系统下Java编程详解 Android简介 Android一词英文本义指“机器人”,它是由Google公司于2007年11月推出的基于Linux平台的...

    本文关键字:android操作系统,android是什么意思,android平台,android培训,
    Android系统下Java编程详解

    Android简介

    Android一词英文本义指“机器人”,它是由Google公司于2007年11月推出的基于Linux平台的开源手机操作系统,依靠Google公司的强大开发和媒体资源,Android成为众多手机厂商竞相追逐的对象,逐渐发展成为当下流行的手机开发平台,图1所示为Android系统的Logo。

    Android系统的Logo
    图1 Android系统的Logo

    Android是一个包括操作系统、中间件、用户界面和关键应用软件的移动设备软件堆。换言之,Android是基于Java并运行在Linux内核上的轻量级操作系统,其功能全面,包括一系列Google公司在其上内置的应用软件,如电话、短信等基本应用功能。图2所示为Android的模拟器,从中可以大概了解Android的运行界面。

    Android的模拟器
    图2 Android的模拟器

    Android平台特性

    随着科技的发展,移动电话(Mobile Phone)正朝着智能化的方向发展,逐步成为多种工具的功能载体,而Android就是这样一个智能手机的平台、一个多种工具的功能载体。

    1.通信工具
        移动电话的最基本功能为通信功能,因此使用运营商提供的通信网络进行语音通话也是Android平台的最基本功能。除了传统的语音通话功能外,Android平台还具有短消息功能,以及通常移动电话都具有的个人信息系统管理方面的功能(如电话本等)。

    2.网络工具
        随着数字业务使用的普遍化,移动电话通常被作为网络工具使用,即移动电话可以完成电脑的部分功能。而Android平台在网络方面的功能主要包括浏览器、IM(即时信息)、邮件等。

    3.媒体播放器
        随着多媒体技术的发展应用,在移动电话上进行音频和视频播放已经成为经常使用的功能。由此,Android平台具有支持更多的音频/视频格式,支持更高分辨率的视频,可更流畅地播放视频,以及支持网络流媒体等功能。

    4.媒体获取设备
        随着移动电话与媒体获取设备的集成日益增强,Android平台提供了照相机、录音机、摄像机等功能。

    5.多类型的连接设备
        Android平台提供了多种连接方式,如USB、GPS、红外、蓝牙、无线局域网等。

    6.具有友好和绚丽的用户界面
        Android平台具有友好的用户界面,使用户容易学习和操作;同时具有绚丽的用户界面,具有良好的视觉效果。

    7.可以个性化定制的平台
        Android平台针对于用户的个性化需求,提供了全面自定义手机的功能。

    除了上述介绍的Android平台的功能以外,其在技术上还具有以下几个方面的特性:
        全开放智能移动电话平台。
        支持多硬件平台。
        使用众多的标准化技术。
        核心技术完整、统一。
        完善的SDK和文档。
        完善的辅助开发工具。

    本文选自华清远见android开发培训教材《Android系统下Java编程详解》

    展开全文
  • Android平台特性

    千次阅读 2018-08-17 11:15:22
    Android平台采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。下面我把Android的特性及其架构体系结构总结一下。 一、Android的平台特性  Android平台有如下特性:  1. 应用...
  • Android平台简介

    2011-08-23 17:20:01
    3.1、Android 平台简介 什么是AndroidAndroid一词本意是指“机器人”,是一个移动设备,是基于Linux平台,由操作系统,中间件、用户界面和应用软件组成。   Android是基于Linux开放性内核的操作系统,是...
  • 什么是Android——Android平台简介

    万次阅读 2011-03-10 17:52:00
    什么是Android ——Android平台简介 <br /> <br />Keyword: Google Android,Linux内核,开源,应用领域,开放手机联盟(Open Handset Alliance) <br />   在网上看到有“Android平台”和...
  • Android平台架构及特性

    千次阅读 2016-11-11 22:28:59
    1.Android系统的底层建立在Linux系统之上,采用软件叠层(software stack,使得层与层之间相互分离)的方式进行构建。 2.Android系统的体系结构 Android运行时由两部分组成:Android核心库集和Dalvik虚拟机。其中...
  • Android平台与SDK Tools版本以及ADT版本的对应关系在android的开发中,我们接触很多不同版本的SDK Tools,以及很多版本的ADT,在面试的时候,面试官也是很喜欢问,请说一下你使用过的android版本之间的不同等。...
  • 一般项目版本管理,会有多个svn分支,拉新的svn分支后,打开工程默认以PC为平台,如果工程比较大的话,需要等好长一段时间,等所有资源都编译完之后,然后再手动在BuildSettings中切换成Android平台,然后又要等好长...
  • Android平台手机 5大优势和劣势

    千次阅读 2016-05-24 17:14:05
     在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性...
  • Cordova添加android平台时选择安装版本

    万次阅读 2016-12-16 23:55:05
    我使用的Cordova版本是6.4.0,在进行添加android平台是它给我选了6.0.0版本,当我使用 cordova platform add android 的时候它是成功的帮我创建了android平台的相关代码,但是它报出了一个错误,告诉我说,需要jdk...
  • Android平台ffmpeg的硬解库生成

    千次阅读 2015-09-02 11:35:41
    一直想写一篇文章记录我近几天摸索ffmpeg在Android平台生成硬解码库遇到的问题。马上就要放假,再不写估计就更没有思路写下去。这只是我的一些个人研究,失误之处在所难免,如果您觉得有不对的地方还请留言指正! ...
  • android平台现状分析

    千次阅读 2009-06-12 10:52:00
    由于工作原因,开始关注、学习android平台。经过半个月的熟悉、学习,先写写自己对android这个平台的一些分析吧。(以下节选自己写的一个可行性分析报告) 1.1破局者—android(现状分析)1.1.1 原有的手机平台格局...
  • 为什么选择Android平台来研发手机

    千次阅读 2010-01-28 21:57:00
    为什么选择Android平台来研发手机引言这是笔者作为一个一线手机开发者对《为什么选择Android平台来研发手机》问题的思考。一.开源开源的手机开发平台,基于Linux操作系统。二.开放Android是一个开放式的移动电话...
  • Android平台OCR工具之Tess-two使用

    万次阅读 2016-02-26 09:05:30
    Android平台下使用Tesstwo进行OCR识别
  • [019] Android平台调用WebService详解

    万次阅读 多人点赞 2011-11-24 21:37:29
    上篇文章已经对Web Service及其相关知识进行了介绍(Android...本文将通过一个简单的示例讲解和演示Android平台的Web Service开发。 Ksoap2-android简介  在Android平台调用Web Service需要依赖于第三方类库ksoap
  • Android 平台的Python——基础篇(一)

    万次阅读 多人点赞 2019-10-05 14:15:09
    要想在Android平台运行起Python,也有方案实现,其实质就是在Android系统上搭建Python环境。对此Google已经提供了SL4A(Scripting Layer for Android )方案,支持多种脚本语言,除此之外,还可以使用一个
  •     Android+JNI+OpenGL开发自己的美图秀秀 2016-01-18 16:39 阅读(5116) 评论(19) ...Android平台Camera实时滤镜实现方法...Android平台Camera实时滤镜实现方法探讨(十)--代码地址以及简介(20160118更新)...
  • Android平台架构简介

    万次阅读 2017-10-21 19:30:15
    应用层Android系统介绍Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件四层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建。这各软件叠层结构使得层与层之间...
1 2 3 4 5 ... 20
收藏数 330,738
精华内容 132,295
关键字:

android平台