Android技术(精选12篇)
Android技术 第1篇
动态加载[1](Dynamic Loading)是一种程序运行机制,能让计算机程序在运行时(而不是编译时)装载库(或者其他二进制对象)到内存中,然后检索库中函数和变量的地址,并执行这些函数或访问这些变量,且能在不需要时将库从内存中卸载。与静态链接相比,动态加载具有增加程序灵活性、节约内存空间的优点。Android动态加载[2]是指应用在运行的时候通过加载一些本地不存在的可执行文件实现一些特定的功能,而且这些可执行文件是可以替换的。Android中动态加载的核心思想是动态调用外部的dex文件,极端的情况下,Android APK自身带有的dex文件只是一个程序的入口(或者说是空壳),所有的功能都是通过从服务器下载最新的dex文件完成[3]。
Android动态加载技术能够解决Android应用开发到一定规模时APK安装包过大,功能模块过多,没有办法选择性加载所需模块的问题,达到不安装新APK就升级APP的目的,既可以显著提高应用新版本的覆盖率,也可以减少服务器对旧版本接口兼容的压力,同时也可以用来修复一些紧急BUG。国内百度、腾讯、阿里巴巴等大公司均对此有深入的研究和应用,但一般仅在内部使用,而且这种开发方式不是官方推荐的,也不是目前主流Android开发方式,相关文档及开发较少,大部分开发者实现较为困难。
目前,Android项目中动态加载技术按照加载的可执行文件的不同大致可以分为两种:动态加载so库和动态加载dex/jar/apk文件。动态加载so库一般用来完成对一些性能比较有需求的工作,比如Bitmap的解码、图片高斯模糊处理等;动态加载dex/jar/apk文件即在Android中动态加载由Java代码编译而来的dex包并执行其中的业务逻辑[4],相比前者较为容易实现,大部分Android动态加载技术均使用此种方式,本文也采用此种方式实现Android动态加载。
本文介绍了Android动态加载技术的原理实现,提供一种合理的Android动态加载实现方式,解决部分开发者因无相关资料文档而无法实现动态加载的问题。
2 动态加载技术的原理与实现
2.1 动态加载技术原理
Android动态加载技术基本原理是在程序运行时加载一些外部的可执行的文件,然后调用这些文件的某个方法执行业务逻辑。因为文件是可执行的,出于安全问题,Android并不允许直接加载手机外部存储这类noexec(不可执行)存储路径上的可执行文件[5]。在Android应用中调用它们前,都要把这些可执行文件拷贝到data/packagename/内部储存文件路径,确保库不会被第三方应用恶意修改成拦截,然后再将这些可执行文件加载到当前的运行环境并调用需要的方法执行相应的逻辑,从而实现动态调用。流程图如下:
2.2 动态加载技术的实现
首先需要获得想要动态加载的可执行文件。通过JDK的编译命令javac把Java代码编译成.class文件,再使用jar命令把.class文件封装成.jar文件,再用Android SDK的DX工具把.jar文件优化成.dex文件,即需要的可执行文件。
与JVM不同,Android的虚拟机不能用Class Loader类直接加载.dex,而是需要用Dex Class Loader类。Dex Class Loader类是Class Loader类的子类,可以加载jar/apk/dex,可以从SD卡中加载未安装的apk。但Dex Class Loader并不能直接加载外部存储的.dex文件,而是要先拷贝到内部存储里。实际使用Dex ClassLoader的代码如下:
运行此段代码即可把.dex文件成功加载进来。然后需要调用.dex里面的代码。使用Dex Class Loader加载进来的类,因为本地并没有这些类的源码,所以无法直接调用,不过可以通过反射的方法调用,实现代码如下:
调用成功后,就可以成功从外部路径动态加载一个文件,并执行里面的代码逻辑,但是还不能直接启动插件(指经过处理的dex或者apk)的Activity[6]。Activity等组件需要在Mani-fest中注册后才能以标准Intent的方式启动,通过Class Loader加载并实例化的Activity实例只是一个普通的Java对象[7],能调用对象的方法,但是它没有生命周期,而且Activity等系统组件是需要Android的上下文环境的(Context等资源),没有这些东西Activity根本无法工作。想要使用插件里的Activity需要解决两个问题:如何使插件APK里的Activity具有生命周期;如何使插件APK里的Activity具有上下文环境(使用R资源)。首先要处理插件Activity的生命周期,因为一个Activity的启动,如果不采用标准的Intent方式,没有经历过Android系统Framework层级的一系列初始化和注册过程,它的生命周期方法是不会被系统调用的。可以通过在主项目里创建一个Proxy Activity,再由它去代理调用插件Activity的生命周期方法。用Proxy Activity(一个标准的Activity实例)的生命周期同步控制插件Activity的生命周期。同步的方式既可以在Proxy Activity生命周期里用反射调用插件Activity相应生命周期的方法,又可以把插件Ac-tivity的生命周期抽象成接口[8],在Proxy Activity的生命周期里调用。然后在插件Activity里使用R资源,因为res里的每一个资源都会在R.java里生成一个对应的Integer类型的id,APP启动时会先把R.java注册到当前的上下文环境,在代码里以R文件的方式使用资源时正是通过使用这些id访问res资源,然而插件的R.java并没有注册到当前的上下文环境,所以插件的res资源也就无法通过id使用。想要解决此问题,可以通过获取一个Asset Manager实例,使用其“add Asset Path”方法加载APK里的资源,再使用Display Metrics、Configuration、Compatibility Info实例一起创建所需要的Resources实例。访问插件APK里res资源的关键代码如下:
3 结束语
本文分析了Android动态加载的原理、过程以及实现,解决了Android动态加载中遇到的如何使插件APK里的Activity具有生命周期、如何使插件APK里的Activity具有上下文环境(使用R资源)等关键问题。将此技术应用到Android应用中,可以解决Android应用开发到一定规模时APK安装包过大,功能模块过多,没有办法选择性加载所需模块的问题,达到不安装新APK就升级APP的目的,既可以显著提高应用新版本的覆盖率,也可以减少服务器对旧版本接口兼容的压力,同时也可以用来修复一些紧急BUG。
参考文献
[1]David A.The Linux Documentation Project[EB/OL].http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html.
[2]任玉刚.Android开发艺术探索[M].北京:电子工业出版社,2015.
[3]Bill Phillips,Brian Hardy.Android programming:the big nerdranch guide[M].北京:人民邮电出版社,2014.
[4]Meier R.Professional Android 4 Application Development[M].北京:清华大学出版社,2013.
[5]HervéGuihot.Pro Android Apps Performance Optimization[M].北京:人民邮电出版社,2012.
[6]林学森.深入理解Android内核设计思想[M].北京:人民邮电出版社,2014.
[7]Horstmann C S,Cornell G.Core Java V[M].北京:人民邮电出版社,2013.
Android技术 第2篇
1.安装下载编译器和链接器软件.Sourcery G++ Lite Edition for ARM.
arm-none-linux-gnueabi-gcc.exe是编译命令
bin/arm-none-linux-gnueabi-ld.exe是链接命令
2.编写C代码
为了演示方便编写最简单的代码,输出hello,world,例如:我在d:/temp目录写建立hello.c文件
#include
int main{
printf(“helloworld ”);
return 0;
}
3.编译hello.c文件
cmd---d:/---cd temp进入temp目录下arm-none-linux-gnueabi-gcc hello.c -static -o hello,在目录中生成hello二进制文件
4.将hello文件push到手机
启动模拟器---adb push hello /data/data/hello
5.修改属性
adb shell
cd /data/data/
chmod 777 hello
将hello修改为可执行文件
6.执行文件
./hello
7.显示
Android技术 第3篇
摘要:从人们对智能家居的需要出发,在对智能家居控制系统进行深入研究后,该论文提出了基于 Android 和 ZigBee 的智能家居控制系统,硬件部分以ARM和ZigBee为主体构建网络,采用Android来开发客户端APP,用户可以通过手机客户端APP来对家居进行控制。
关键词:ARM Android ZigBee 智能家居
1 概述
随着科学技术的迅速发展,生活水平的不断提升,人们越来越注重家居生活的安全与便利,从而推动了智能家居走入了人们的生活。智能家居是以住宅为平台,利用先进的计算机技术、网络通讯技术、综合布线技术、自动控制技术等技术,融合家庭需求,将家中的各种设备(如照明系统、窗帘控制、家电控制等)全部接入到网络当中,对家居状态进行远程的监控和管理,优化人们的生活方式[1]。
2 总体设计
本文结合用户需求,从功耗、经济、操作等方面入手[2],提出了基于Android和ZigBee的智能家居控制系统,系统总体设计,如图1所示。本系统由ARM家庭网关模块、ZigBee 模块和Android客户端组成。其中ARM家庭网关模块为中心控制单元,通过ZigBee 模块收集各个传感器采集的各项数据,将数据通过网络实时反馈到Android 客户端,同时用户可经过Android 客户端远程控制家电设备。
■
图1 系统总体结构图
3 系统硬件设计
该系统硬件主要分为ARM家庭网关模块、ZigBee 模块。
3.1 ARM家庭网关模块
ARM家庭网关模块作为系统的核心,用来连接ZigBee网络和外部Internet网络。采用Cortex-A8处理器,加上SDRAM、Flash和串口等基本模块,外加Internet模块及ZigBee模块,使网络通信性能更为强大,家庭网关结构如图2所示。一方面负责连接ZigBee网络,并利用ZigBee网络获取各种传感器采集到的数据信息;另一方面将传感器采集到的数据信息,打包成网络数据流,通过外部Internet网络发送至手机端,同时对遇到的紧急情况如煤气泄漏、漏水等,将进行声音报警并发送短信给手机客户端,并执行相应地操作[3]。
■
图2 ARM家庭网关模块结构图
3.2 ZigBee模块
ZigBee模块采用采用TI公司推出的新一代SOC芯片CC2530芯片,该芯片包括了极好性能的一流的RF收发器,工业标准增强型8051MCU,系统中可编程的闪存,8KBRAM等功能[4]。ZigBee 网络由一个协调模块以及多个路由模块和多个终端设备节点模块组成。
ZigBee协调模块是ZigBee网络模块的核心,负责启动整个网络,包括无线传感器网络的建立、连接、退出以及网络地址的分配。协调模块主要涉及网络的启动和配置,一旦这些都完成后,它又成为路由模块,允许其他设备加入网络,扩大信号传输范围的作用。ZigBee设备节点模块主要负责对传感器节点的数据进行采集和处理,并控制各种家电设备。
4 系统软件设计
本系统软件是采用Android开发的APP,包括家居控制、家居检测、音乐系统、生活模式设置等模块。家居控制模块可以对家电设备,如空调、电视等进行控制,还可以进行对灯光、插座、窗帘、遥控等进行控制,界面如图3所示;家居检测模块可以通过各传感器获取到室内与室外的温湿度,光照度,烟雾等数据,界面如图4所示;音乐系统是为家居系统提供背景音乐,无论在哪个房间,哪个位置都能听到优美的音乐;系统支持4种常见生活模式设置,普通模式、会客模式、外出模式、睡眠模式等,通过不同生活模式的简单设置,使系统智能实施场景布置、报警联动等功能。
■
图3 家居控制界面
■
图4 家居监测界面
5 总结
本文将ZigBee无线技术与Android智能操作系统紧密结合,运用到智能家居中,有很高市场应用价值。但是本系统只是依据一个住宅模型进行设计,还没有应用到实际的家庭中,研发技术还有待于进一步的提高,在物联网技术与4G网络技术不断发展的今天,如何将这些技术应用到智能家居控制系统上来,提高系统的高应用性和高可用性,使之能更好地为人们的家居生活提供便利,是需要我们继续深入研究的[5]。
参考文献:
[1]王芳.Android平台和ZigBee 技术在智能家居系统中的应用[J].电子世界,2014.11.
[2]屈伟明.基于物联网的智能家居远程控制系统设计与实现[J].电子技术与软件工程,2014.4.
[3]朱祥贤.基于Android和ZigBee的智能家居系统设计[J].数字技术与应用,2014.9.
[4]陶在红,杨宇,常建华.基于ZigBee的智能家居控制系统设计[J].现代电子技术,2014.12.
Android技术 第4篇
随着移动设备的不断普及与发展,相关的软件开发技术也越来越受到人们所重视。2007年Google正式发布Android平台以来,短短几年内Android成为全球最受欢迎的移动智能终端平台。图形图像处理技术在Andriod中非常重要,特别是在开发益智类游戏或者22DD游戏时,都离不开图形图像处理技术的支持。
2 常用绘图类
在Android中,绘制图像时最常用的是paint、Canvas、Bitmap和Bitmap Factory类。
1)paint类表示画笔。用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用paint类时,首先需要创建该类的对象。然后通过该对象调用相关常用方法改变画笔的设置。例如可以改变画笔的颜色、笔触宽度等。
2)Canvas类表示画布。通过该类提供的方法可以绘制各种图形(如矩形、圆形和线条等通常情况下,要在Android中绘图,需要先创建一个继承View类的视图,并且在该类中重写on Draw(Canvas canvas)方法,然后在显示绘图的Activity中添加该视图。
3)Bitmap类表示位图。使用该类不仅可以获取获取图像文件信息,对图像进行剪裁、旋转、缩放等操作,而且还可以指定格式保存图形文件。
4)Bitmap Factory类是一个工具类。用于从不同的数据源来解析、创建Bitmap对象。
3 二维图像绘制
Android提供了非常强大的二位图形库,用于绘制2D图像。比较常用的是绘制几何图形、文本、路径和图片。
1)绘制几何图形。常见的几何图形包括点、线、弧、圆形、矩形等。在Android中,Canvas类提供了丰富的绘制几何图形的方法,通过这些方法,可以绘制出各种集合图形。
2)绘制文本。在Android中可以通过Text View或图片显示文本。但是在开发RPG类游戏时,会包含很多文字,Canvas类提供了绘制文本的方法,主要由ddrraaww TT eexxtt(())和ddrraaww PP ooss T Teexxtt(())方法。
3)绘制路径。绘制一条路径可以分为创建路径和将定义好的路径绘制在画笔上两部分。要创建路径可以使用android.graphics.Path类来实现。Path类包含一组矢量绘图方法。如画圆、矩形、弧、线条等。而要将定义好的路径绘制在画布上,可以使用Canvvaass类提供的ddrraaww P Paatthh(( ))方法。
4)绘制图片。绘制图片可以使用Canvas类提供的方法draw Bitmap( )将Bitmap对象中保存的图片绘制到画布上即可。
4 图形特效
在Android中,不仅可以绘制图形,还可以为图形添加特效。如对图形进行旋转、缩放、倾斜、平移和渲染等。
4.1 图像旋转、缩放、倾斜和平移
Android提供的Android.graphics.Matrix类的set Rotate()、post Rotate()、pre Rotate()方法可以实现对图像进行旋转。这三个方法除了方法名不同外,语法格式等均相同。创建Matrix的对象并对其进行旋转后,还需要应用该Matrix对图像或组件进行控制。在Canvas列中提供了一个draw Bitmap()方法,可以在绘制图形的同时应用Matrix上的变化。对图像的缩放、倾斜和平移技术和旋转类似,只是使用的方法不同。如表1所示。
4.2 图像渲染
在Android中,提供的Bitmap Shader类主要用来渲染图像。比如可以将一张图片裁剪成椭圆形或圆形等形状并显示到屏幕上。使用Bitmap Shader来渲染图像的基本步骤如下:
1)创建Bitmap Shader类对象。
2)通过Paint的set Shader()方法来设置渲染对象。
3)在绘制图像时,使用已经设置了set Shader渲染图像。
5 动画
Android中动画通常可以分为逐帧动画、补间动画和属性动画三种。下面分别介绍这三种动画的技术。
5.1 逐帧动画(Drawable Animation)
逐帧动画就是顺序播放事先准备好的静态图像,利用人眼的“视觉暂留”原理,给用户造成动画错觉。实现逐帧动画主要步骤:(1)在Android XML资源文件中定义一组用于生成动画的图片资源,必须以<animation-list>为根元素,以<item>表示要轮换显示的图片,duration属性表示各项显示的时间。XML文件要放在/res/drawable/目录下。(2)使用定义的动画资源,通常情况下,可以将其作为组件的背景使用。
5.2 补间动画(View Animation)
补间动画主要是通过对场景里的对象不断进行图像变化来产生动画效果。在实现补间动画时,只需要定义动画开始和结束的关键帧,其它过渡帧由系统自动计算并补齐。View animation只能应用与View对象,而且只支持其一部分属性。在Android中,提供了4种补间动画:1)透明度渐变动画(Alpha Animation):通过View组件透明度的变化来实现View的渐隐渐显效果。它主要通过为动画指定开始时的透明度、结束时的透明度以及持续时间来创建动画。2)旋转动画(Rotate Animation):通过为动画指定开始时、结束时的旋转角度以及持续时间来创建动画。在旋转时,还可以通过指定抽心点来改变旋转的中心。3)缩放动画(Scale Animation):通过为动画指定开始时的缩放系数、结束时的缩放系数以及持续时间来创建动画。在缩放时,还可以通过指定轴心点坐标来改变缩放的中心。4) 平移动画(Translate Animation):通过为动画指定开始时的位置、结束是的位置以及持续时间来创建动画。
5.3 属性动画(Property Animation)
在View Animation中,改变的是View的绘制效果。真正的View的属性保持不变,而在Property Animation中,改变的是对象的实际属性。Property Animation不止可以应用于View,还可以应用与任何对象。Property Animation只是表示一个值在一段时间的改变,当值改变时产生的行为由个人决定。
6 结束语
Android图形图像处理技术是从移动媒体图形图像技术发展出来的技术之一。随着Android平台越来越普及。梳理和综述Android平台的图形图像处理技术,有利于我们对Android平台的深入了解。
摘要:介绍了Android图形图像处理的相关技术,包括2D图像、图形特效以及动画等技术。在阐述2D图像的绘制时,主要介绍了如何绘制几何图形、文本、路径和图片等技术。在分析动画技术时,重点分析了补间动画。
Android技术 第5篇
摘 要:根据Android的平台特性以及WiFi的技术特点,建立基于Android平台、WiFi以及智能手机等技术为核心的签到系统,能够有效防止签到过程的“代签”、“漏签”、“排队”等现象,可以应用于校园考勤、公司管理、小型会议等。
关键词:WiFi;签到系统;Android;系统设计
中图分类号:TP39 文献标识码:B
概述
考勤签到管理是一项工作量大而又十分繁琐的工作,要求工作人员反复的查找、登记,不仅耗时费力,而且可能出错,不便于管理。随着技术的发展,使用眼球识别、指纹识别的签到技术已经出现,但是其部署需要花费大量的人力物力资源,公司和个人往往难以承受。本文所要实现的是基于Android使用WiFi技术的签到系统,可以充分利用如今已经普及的Android手机和成熟的Android应用开发技术,花费极少的成本,即可获得一个高可靠性的签到系统。Android系统介绍及WiFi技术简介
Android是由嵌入式Linux和Java构成的开源操作系统,有较高的市场占有率,主要使用于移动设备。选择Android平台,可以充分利用其硬件资源,同时便于软件的升级维护,节约成本。
WiFi(Wireless fidelity)是Wlan网络中使用的一个主流技术标准,由IEEE制定。其突出优势有:无线电波的覆盖范围广,覆盖半径可达300英尺;传输速度非常快,可达11Mbps;安全可靠,其发射功率不超过100毫瓦。系统设计
3.1 系统优势
相比于耗费大量人力物力资源的传统手工签到和使用眼球识别、指纹识别等新技术的签到系统,本系统具有以下优势:
首先,Android智能手机已经广泛应用,硬件水平相当成熟了,且大都具有WiFi模块,所以部署本系统仅仅需要少量的软件成本。其次,WiFi覆盖半径的限制再配合“手机绑定”机制,保证签到人员必须到达指定地点才能签到,防止“代签”。最后,使用基于socket的通信机制和WiFi较高的传输效率保证了签到人员的“零等待”;使用数据库存取数据、软件辅助管理,防止了“漏签”现象。
3.2 应用开发实例――校园签到系统
3.2.1 系统功能划分
整个系统分成学生端和老师端,系统功能划分为“建立连接”,“签到”,“学生信息检查”,“发起签到”,“访问学生信息数据库”,如图1。
3.2.2 主要用例描述
3.2.2.1【用例】签到
【小结】学生打开系统学生端,选择签到,填写信息后上传给老师端。
【参与者】学生
【前置条件】老师端发起签到。
【描述】学生通过学生端输入WiFi密码与老师端进行连接,连接成功后填写姓名、学号等信息,按“发送”向老师端发送,老师端接受到信息后进行验证,验证通过,为该学生增加签到信息,并返回签到成功信息,否则,返回签到失败信息。
【异常】签到失败:如果老师端WiFi热点断开或达到连接上限、学生输入了错误的WiFi密码、姓名、学号或者学生没有使用本人手机,系统会提示签到失败原因并返回初始界面。
【后置条件】系统返回初始界面。
3.2.2.2【用例】发起签到
【小结】老师端开启WiFi热点服务,等待学生连接并上传签到信息。
【参与者】老师
【前置条件】老师端开启且WiFi空闲。
【描述】老师启动系统老师端,点击“开始签到”,待WiFi热点始初化完成,公布系统提示的WiFi密码,等待学生签到。
【异常】初始化失败:如果系统提供权限不够或硬件不支持,系统就会提示“WiFi热点初始化失败”并返回初始界面。
没有可用班级列表:如果老师还没有创建班级列表,系统就会提示“当前没有可用班级列表”并进入“访问学生信息数据库”页面。
【后置条件】老师端WiFi热点关闭。
3.2.2.3【用例】访问学生信息数据库
【小结】老师选择创建,查看,更改等方式访问学生信息数据库
【参与者】老师
【前置条件】系统老师端启动,正在等待操作。
【描述】老师进入系统,选择“创建班级列表”、“查看学生信息”、“更改学生信息”等方式访问学生信息数据库。创建班级列表方式会引导老师完成班级列表的创建;查看学生信息可以按照一定排序规则显示学生完成签到的情况;更改学生信息可以修改学生信息和签到情况。
【异常】无法访问:如果系统权限不够或者SD卡未挂载,老师端会提示“无法访问学生信息”并返回系统初始界面。
【后置条件】系统返回初始界面。
结语
限于篇幅,仅采用了交互模型来描叙系统。虽然该系统是基于Android平台实现的,但是修改后也可以移植到ios等系统中。此外,将“人脸识别”等新兴技术应用于本系统,可以大大提高本系统的可靠性;利用互联网及云技术,将能更好的对签到信息进行管理,也能提供更丰富的签到方式。本系统完善后,将有着广阔的应用前景,能够为企业及个人带来便利。
参考文献
Android阅读手机应用 第6篇
ZAKER
对于Windows Phone简洁明了的方块桌面,小编从来都没有抵抗能力。对于这样一款充满个性化定制特色的资讯阅读,小编也是异常喜爱,当然了,这种喜爱也是建立在Windows Phone方块皮肤之上的。
ZAKER会精心为用户挑选新闻资讯、微博、博客、报纸、杂志、美图等上千家内容源。根据内容更换的封面、简洁清新的订阅桌面以及简洁美观的图文混排,都能带来全新的阅读体验。看到有意思的内容,直接通过“一键分享”功能转发到微博,你的粉丝也会感谢你的分享,经营微博也能变得更简单。
豆瓣阅读
喜爱沉浸在文字中的小清新,她们对阅读质量的要求比普通青年高出了许多,因此豆瓣阅读便是她们手机中常驻的阅读应用,最关键的是豆瓣阅读能提供极佳的阅读体验,字体、版式、插图、脚注都经过了精心处理,完全能够按照自己的喜好调整字号、亮度、配色、翻页方式。
通过Web版同步阅读列表中的作品是一个好的方式,同步后就能通过手机阅读,利用文字打发上下班的时间再好不过了。如果你觉得应用程序偏大,那是因为程序中打包了大量的字体文件,为你提供最佳阅读体验。
VIVA畅读
阅读杂志应该是消磨时间的好办法,“VIVA畅读”是Android Market上深受好评的一款手机杂志应用,同时也是用户最多的杂志阅读应用。通过它,用户可以免费阅读数百种中文期刊。
选择在线浏览和下载离线阅读两种方式,如遇到网络不佳或者杂志刷新较慢,可预先使用WiFi网络把感兴趣杂志下载下来,剪切后的一本杂志一般为30页左右,不能提供完整的阅读,如想完整阅读就得购买实体书。
Android技术 第7篇
随着科学技术以及社会经济的发展,现在越来越多的人们通过智能手机来记录自己生活中的点点滴滴并与朋友分享,然而,数码照片通过手机进行手动更名及添加备注信息相对比较麻烦,从而使得数码照片的保存可能会非常混乱,造成一些人无法回忆起照片上的风景拍摄点。带GPS功能的智能手机出现使得高效的照片分类技术成为可能。设计并开发一款基于Android手机平台的应用程序,其主要功能是使用手机的GPS模块获取地理位置信息并以“水印签名”的方式添加到所拍摄的照片上,通过2G/3G/Wi - Fi等无线技术将照片上传至网络服务器。同时,根据用户的喜好,将照片按地理位置或时间段进行分类管理和查询,最后生成一份简单的分析报告供用户分享。本项目的实现将满足现今年轻人对照片及旅行足迹分享的需求,节约大量整理和分析照片的时间。
1 Android智能手机相关技术
Android是Google公司于2007 年11 月宣布的基于Linux的开源开发平台,该平台由操作系统、中间件、用户界面和应用软件等组成,是首个为移动终端打造的真正开放和完整的移动软件。Google重新设计了Java虚拟机和系统,使得Android的Java应用更接近于底层系统,因而效率更高; 另外使用虚拟机技术使得Android应用在被监控的状态下运行,其安全性更高。Android包括移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,具有平台标准化、用户可定制以及服务免费等特色。它是一个对第三方软件完全开放的平台,代码完全开源免费。随着移动平台技术的飞速发展和GPS应用领域的不断扩展,在手机上拓展GPS功能已成为移动应用程序开发的热点,所以在Android平台上开发GPS相关的应用具有巨大的潜力[1,2]。GPS技术定位精度高,误差一般在几米到几十米之内,但GPS定位有其局限性,手机在室内则不起作用; 这时,可利用蜂窝GSM基站定位原理加以补充[3],由于蜂窝基站覆盖密度较大,其定位精度和GPS相比要差些,定位误差大约在150 米~200 米之间,两者可互为补充。
随着网络时代的到来,在网络这个虚拟空间上不仅可以找到海量的信息,同时又可以进行小众化的交流,还能做到个性化的展示和分享。通过将数码照片与个性签名结合,让用户能更加自由多样地使用照片,充分彰显网民个性,现在无论是在论坛、游戏角色扮演、MSN还是QQ上均设有个性签名功能,让网民随时随地能够通过文字、图片等手段表达自己的思想和行踪。本设计希望通过手机对拍照地点的定位信息获取,经过处理成为照片的独特Logo,为用户提供一个新颖特殊的功能,使得处理后的照片可以方便地加以收藏、转载或分享。本文基于对现今手机用户的使用行为研究,利用Android手机照片中地址信息添加技术( 足迹分享应用) 的实现,通过对用户在一定时间段里拍摄的照片进行分类,同时生成足迹图从而满足用户对分享照片的最大需求。
2 系统设计
本系统功能框架主要分为以下6 个模块,如图1 所示。
( 1) 水印设置模块: 本模块将对照片的文字添加技术( 水印模式) 以及地址信息等进行选择和设置。
( 2) 拍照模块: 本模块将调用Android手机的摄像头进行拍照,并将拍出来的照片以数据流的形式返回系统,供其它模块调用。
( 3) 照片编辑模块: 本模块调用Android手机的GPS设备获得经纬度信息,并与Google服务器连接,获取当前的位置信息,并通过简单处理与拍照模块获得的数据流进行整合,生成JPG图片文件加以保存; 同时也可以根据用户个人喜好,将照片进行简单编辑,制作成图片加文字的明信片形式,最后形成JPG图片文件并加以保存。
( 4) 预览模块: 本模块可以检索手机存储器及内存卡中通过本应用程序保存在目录中的图像文件,并由用户手动选择单个文件进行预览。
( 5) 分类管理查询模块: 本模块根据用户偏好选择,对已有照片位置的记录根据地理位置或者时间段进行分析,并生成一份简单的可表达用户旅行足迹的分析报告( 报表或者图片形式) 。
( 6) 上传模块及NFC传输模块: 本模块将由上述其它模块获得的图片上传到预定网络服务器,并根据用户喜好分享到微博/人人等社交网站上。
3 系统功能实现
3. 1 拍照定位功能的实现
拍照定位功能核心代码如下:
在上述代码中,Location Manger是位置管理器,如果想要使用移动设备的GPS定位模块,必须先要定义一个Location Manager并且同时打开系统的LOCATION _ SERVIC - E服务。 而My Location Overlay是一个专门设计的类,它用来在一个Map View中显示当前位置和方向。要使用My Locaiton Overlay,需要创建一个新的实例,并给它传入应用程序的上下文和目标Map View,然后把它添加到Map View的覆盖列表。而String provider = L-ocation Manager. GPS_PROVIDER; Location location = location Manager. getLast-Known Location ( provider ) ; 两句则是通过GPS位置提供器获得相应的位置。
图2 是应用程序的主界面,点击开始就可进入拍照定位等功能。
在拍照结束后,应用软件会对照片进行GPS定位。图3 是拍摄照片的定位展示图。
3. 2 自定义设置个性签名
在主界面的菜单栏中,可以对照片的地址信息( 如经纬度信息和Logo签名等) 进行自定义设置,在内容设置界面中( 如地址信息的排列方向、字体和颜色等) 可以进行自定义个性签名设置,如图4 所示。
3. 3 足迹分享
在拍摄好照片并添加位置Logo后,可将足迹照片上传至相关网站进行分享。
图5 显示了第三方应用授权界面和照片分享界面图。
4结束语
Android技术 第8篇
关键词:Android,安全问题,恶意程序检测,支持向量机
0 引言
Android是Google于2007年11月发布的基于Linux内核的开源手机操作系统。它包括操作系统、用户界面和应用程序(移动电话工作所需的全部软件),而且不存在任何以往阻碍移动产业创新的专有权障碍[1]。目前,Android已经经历了数个版本的更新,市面上采用该系统的移动设备数量也在飞速增长,它已经是一个强大而成熟的系统,从最初的智能手机领域逐渐进入教育、医疗、汽车、军事等重要领域。
随着Android系统的广泛应用,安全问题的重要性呈现逐步上升趋势,已成为制约其发展的重要因素。从2010年8月发现的首个Android木马程序“Trojan-SMS.Android–OS.FakePlayer”,到后来的“Geinimi”、“X卧底”病毒木马等恶意程序的流行,更加剧了人们的担忧。因此,要让用户放心地使用Android系统,就必须全面分析并着手解决Android系统所面临的各种安全问题。本文提出一种分析Android程序运行触发事件的系统调用序列流,并采用支持向量机学习算法对调用序列流进行分类的恶意程序检测方法,可以有效解决此类安全问题。
1 Android系统安全模型
1.1 Android系统架构
Android系统采用分层架构,共分为4层,从高层到低层分别是应用程序层(Applications)、应用程序框架层(Application Framework)、系统运行库层(Libraries&Android Runtime)和Linux内核层(Linux kernel),An droid系统架构如图1所示。
1.2 Android系统安全机制
Android系统拥有多种安全机制,除继承Linux系统的安全机制之外,同时还有针对性地增加了多重安全设计,Android系统架构不同层上相关安全机制如表1所示。
2 Android系统安全隐患分析
虽然Android系统已经拥有众多良好的安全机制,但也存在着一些安全隐患。目前主要存在以下3个方面的安全隐患:
(1)基于硬件的安全隐患。Android系统运行于硬件设备之上,由于硬件的通用性和拥有系统最高权限,且在使用中难以升级和维护,硬件缺陷存在的安全隐患危害很大。另外,移动设备中的SD卡和SIM卡均能脱离移动设备而单独使用,也存在隐私泄露的风险。
(2)基于Linux内核的安全隐患。移动设备往往会禁用一些内核选项用以提高系统有限资源的利用,其中也包括一些安全配置选项,Linux每年都有近百个漏洞被CVE收录,黑客利用这些内核漏洞,获得系统最高权限,造成用户隐私信息泄露。目前,可以通过系统定制SEAndroid(Security-Enhanced Android)对所有的文件、目录类资源的访问进行控制,强制性地限制信息的共享和流动,减轻Linux内核的安全隐患[2]。
(3)基于应用程序的安全隐患。应用程序包括Android系统自带和用户自行安装的应用程序。由于用户自行安装应用程序来源多样,在安装时,用户无法辨识恶意程序和正常程序,而往往选择信任该程序,忽略相关的安全提示,授予其所申明的所有权限,从而大大弱化Android系统核心安全机制——权限控制。恶意程序非法获得特权,利用Linux内核漏洞提升权限,造成隐私信息泄露,非法链接网络消耗资源,被恶意扣费等众多威胁到用户安全的隐患。
3 基于恶意程序检测的安全技术研究
恶意程序是目前Android系统最大的安全威胁[3]。对恶意程序的检测比较常用技术有代码语义分析法和特征码分析法。这两种常用的检测方法被各大反病毒软件厂商广泛使用,他们通过不断更新恶意程序特征数据库来提高检出率,但都需要消耗大量的系统资源来进行运算,而移动设备资源和硬件处理能力有限,手机使用时在一定程度上会影响用户体验。本文通过对Android系统安全模型和安全隐患的深入分析和研究,以低资源消耗为目标,利用Android系统后台监听技术特点,获取目标程序的系统调用序列与特定触发事件时调用序列进行比较分析,研究基于事件的恶意程序检测方法。
3.1 系统设计
程序的动作最终都以系统调用的形式实现,使用的系统调用反映了程序的行为特征,可以作为判断程序是否恶意的依据。基于事件的恶意程序检测方法使用Android系统内核提供的接口,获取目标分析程序的系统调用序列,获取系统调用流,使用系统调用流作为恶意行为匹配的数据。
为减轻Android系统资源的消耗,采用C/S结构,客户端只进行系统监测、程序运行信息捕获,将复杂的分析工作交由服务器端处理,让分析服务器进行恶意程序检测判断。该检测方法的系统运行框架如图2所示。
在服务器端维护一个恶意程序调用序列信息存储库。恶意行为的实现会使用大量的系统调用,良性程序也会包含一部分系统调用,两种程序的系统调用最终会形成一个完整的调用序列。但由于实现目的的不同,恶意程序和良性程序在系统调用序列上会有不同的特征表现。在服务器端,分析服务器预先运行大量的已知恶意程序和良性程序,收集必要的调用序列作为训练样本,利用机器学习算法对这些调用序列进行聚类分类学习,导入APK程序信息存储库,供系统对客户端目标程序进行快速判别。
3.2 数据采集
Android系统有200多种系统调用事件,检测方法需要确定哪些事件可能是恶意行为造成的,在此定义触发事件列表,记录的构成包括:事件编号,可疑事件名称,可疑事件的系统调用模糊序列等,如表2所示。再通过实验对其进行不断的校验和修正。
程序运行将产生大量的系统调用,系统调用以流的形式输出,通过对系统调用流与可疑事件序列进行快速模糊对比,寻找可疑的事件。
3.3 数据分析
分析服务器要对恶意程序的系统调用流进行判断,必须预先运行大量的已知恶意程序和良性程序,收集其调用序列作为训练样本,利用机器学习算法对这些调用序列进行聚类分类学习。
支持向量机(Support Vector Machines,SVM)是由Vapnik于1995年在统计学习理论基础上提出的一种新的机器学习方法[4]。它以VC维理论和结构风险最小化原则为基础,其算法是一个凸二次优化问题,能够保证找到的极值解就是全局最优解,在解决非线性及高维模式识别问题中表现出了许多特有的优势,非常适用于解决小样本问题等。
由于支持向量机具有非常强的分类能力,因此利用支持向量机来作为分类器,进行恶意程序和良性程序的识别。基于支持向量机的恶意程序识别的一般流程如图3所示。
(1)特征的选择及提取
特征选择和提取是支持向量机模式识别系统的必要环节,如果所选取的特征能够比较全面反映类的本质特征,那么分类器就比较容易设计;否则,分类器设计的难度就增加。
构建基于支持向量机的恶意程序识别模型,首先需要确定训练样本。特征提取对于恶意程序的识别效果有着重要的影响,因此这是一个难点和关键问题。本文将程序运行时产生的系统调用流作为检测的原始信号,使用前文数据采集中触发事件对应的模糊序列作为特征信号,对程序运行的特征进行提取。
(2)SVM模式识别
SVM模式识别就是根据特征信号、信息存储库中的标准模式和某种判别准则,由提前训练好的支持向量机模型(支持向量机分类器)自动识别,确定是否存在恶意程序。
SVM的最优分类函数为:
式中:αi0为拉格朗日乘子;K(xi,x)为核函数,可以构造实现输入空间不同类型的非线性决策面的学习机器。核函数K(xi,x)的形式可以是:K(xi,x)=xiTx(线性核);(径向基核)。
3.4 测试分析
已有研究者收集了1 260个程序样本[5],从其中选取40个样本作为恶意程序,从Android市场下载60个良性程序,将这100个程序作为分析服务器的训练样本,选取SVM的核函数为RBF核函数,其宽度参数为2.3,规则化参数为800,有相似系统调用流的程序将会聚成一类,100个训练样本恶意程序和良性程序的分类结果如图4所示。实验另外选取20个恶意程序和30个良性程序在MOTO ME525手机上安装进行测试,分析服务器对程序的系统调用流与前面100个训练样本的分类结果进行比对判别。经过测试:20个恶意程序,其中有19个判别正确,1个判别错误;30个良性程序,其中有29个判别正确,1个被错判为恶意程序。
从实验结果来看,提取程序的系统调用流,使用SVM对系统调用流进行聚类学习,对于解决小样本的恶意程序识别具有特别好的识别效果,误判问题可以通过大量样本学习来改善,该检测方法对恶意程序具有良好的检测能力。
4 结语
本文通过对Android系统安全模型和安全隐患的深入研究分析,提出了基于事件的恶意程序检测方法,通过实验验证,该检测方法对未知恶意程序具有良好的检测能力。本文所采用C/S结构设计,虽然减轻了Android客户端的系统资源消耗,但检测必须在服务器端进行,易受网络速度限制,用户等待检测时间较长,随着Android平台硬件性能的大幅提升,在以后的检测系统设计中,可将恶意程序检测功能模块运行在客户端,适应各种类型用户需求。
参考文献
[1]Anon.What Is Android?[EB/OL].[2012-03-20].http://www.cnblogs.com/activi.
[2]SHABTAI Asaf,FLEDEL Yuval,ELOVICI Yuval.Securing android-powered mobile devices using SELinux[J].IEEE Security&Privacy,2010,8(3):36-44.
[3]ENCK William,ONGTANG Mac Higar,MCDANIEL Patrick Understanding android security[J].IEEE Security&Privacy,2009,7(1):50-57.
[4]VAPNIK V.N.Statistical learning theory[M].New York:John Wiley,1998.
[5]ZHOU Ya-jin,JIANG Xu-xian.Dissecting Android malware:characterization and evolution[C]//Proceedings of IEEE Symposium on Security and Privacy.Washington DC:IEEE Computer Society,2012:95-109.
[6]SHABTAI Asaf,FLEDEL Yuval,KANONOV Uri,et al.Googleandroid:A comprehensive security assessment[J].IEEE Security&Privacy,2010,8(2):35-44.
[7]廖明华,郑力明.Android安全机制分析与解决方案初探[J].科学技术与工程,2011(26):6350-6355.
Android技术 第9篇
光电技术类课程是光电类专业的必修课, 课程的内容涉及面广, 需要光学、半导体物理、电路原理、电磁场理论、电子线路、量子物理等课程为基础, 是一类综合性强的课程。光电技术中的各种探测器在手机里大都可以找到, 这些传感器在智能手机中发挥着巨大的作用, 为我们的生活增添了不少色彩。如果能结合智能手机的功能来介绍探测器的工作原理及应用, 将使学生直观地感受到各种光电探测器。课堂教学中可以直接利用这些探测器开发一些简单的手机应用, 不但有助于理解器件的工作原理, 还可以激发学生学习的热情[1,2,3]。本文从手机摄像头出发, 分析其基本构造和工作原理, 给出了基于摄像头的一个简单应用, 实现光电计数功能。
二、系统设计
(一) 摄像头的工作原理
在较新的光电技术教材中, 都会介绍像探测器, 主要是CCD和CMOS, 单独开设这样的实验教学比较困难, 然而这些探测器在我们身边随处可见, 如数码相机、电脑摄像头、手机摄像头等时刻伴随着我们。而手机上的摄像头还提供了直接开发的可能, 可以帮助我们深刻认识CCD、CMOS等像探测器的工作原理及数据处理方式。摄像头的基本工作原理是景物通过镜头 (LENS) 生成的光学图像投射到图像传感器表面上, 然后转为电信号, 经过A/D (模数转换) 转换后变为数字图像信号, 再送到数字信号处理芯片 (DSP) 中加工处理, 最后通过CPU进行处理后, 通过显示屏 (LCD) 就可以看到图像了[4]。
(二) 软件实现
1. 开发平台。
智能手机中Android系统的开发最为方便, 本文介绍的是Google公司推出的开源平台Android Studio开发环境, 安装过程可参考官方网站说明或网络论坛里的安装教程[5,6]。
2. 计数器工作原理。
利用手机摄像头制作光电计数器的基本原理如下, 首先通过摄像头拍摄一副背景图片, 作为光电计数时对比的依据, 即测量背景噪音。然后摄像头开始每秒拍摄多张照片, 分析每张照片的总体亮度, 并与背景图片的亮度进行对比。当摄像头前面没有遮挡物体时, 所拍摄的照片亮度和背景照片亮度相差不大, 计数器不计数。当有物体从摄像头前面运动过时, 所拍摄的照片亮度与背景照片亮度相差较大, 计数器开始计数。为避免遮挡物体长时间在摄像头前造成一个物体的重复计数, 可以设定一个临时的背景亮度作为对比的依据。
3. 代码实现。
Android应用设计主要分界面设计和后台处理程序, 本应用中的页面只有一个, 处理程序也只有一个, 下面简单介绍一下具体流程。第一步, 界面设计。Android Studio中界面的设计采用所见即所得的形式, 只需将所要的控件拖到页面上, 然后调整大小和位置即可。在新建的页面文件里添加一个Text View文本视图, 用来显示计数, 初始值为0。再添加一个Surface View用来显示照片。最后添加三个按钮, 一个测试背景亮度, 一个开始计数, 一个停止。设计好的页面如图1所示。
第二步, 后台程序处理。后台程序虽然只有一个, 但是要处理页面上多个控件的响应, 就要为每一个控件设计一个函数, 本应用中设计三个Button函数、Text View函数及Surface View函数共四个。
Button1用来测量背景亮度, 一般选择比较亮的背景, 处理函数就一句话, camera.set One Shot Preview Callback (my Preview Callback) , 其中camera.set One Shot Preview Callback () 是系统自带的函数, my Preview Callback是自定义的处理图像的方法, 其功能是计算预览图像中亮度总和, 返回数值g1。
Button2启动计数器工作, 代码为timer.schedule (task, 0, 1000) , 这里用定时器timer不断进行循环, 循环时间设定为1000毫秒, 可自由设定。task为定时器工作的变量, 主要处理定时器时间到了后要处理的事情, 这里主要就是计算预览图像的总体亮度, 其核心代码和Button1的代码一样, 返回数值g2。
Button3停止定时器、摄像头的工作, 释放摄像头资源。
文本视图用来显示计数, 通过一定的逻辑判断是否计数, 如g2>2*g1。
Surface View的处理函数分两部分, 首先要设定摄像头参数, 然后实现拍照存储并计算照片总亮度。相机参数的设定主要是像素大小、每秒拍摄数量[7]。界面中Surface View控件显示照相机中的预览图片, 一般像素大小取相机支持的最小值, 这样数据处理就比较快速, 每秒数量可以从1-10根据需要设定。相机初始化函数主要设置预览图片显示到页面中定义的SurfaceView中。
4. 图像处理。
像探测器的工作原理上面已经提到, 光学图像投射到CCD或CMOS图像传感器上转为电信号, 经过模数转换后变为数字图像信号。在计算图像亮度时可以有两种选择, 一种是计算拍摄到的图片的RGB值, 换算为相应的灰度 (GRAY) 值, 这种方法简单直观, 缺点是运算速度慢。对要实时计数功能来说, 要快速响应摄像头前的运动物体, 因此可以采用第二种方法。第二种方法是直接读取摄像头经模数转换后存储的原始数据, 即像素数据存储的YUV格式, YUV格式经过一定运算可以得到RGB格式, 大部分CCD、CMOS的数据处理都采用此类方法。相比RGB格式, YUV格式数据存储空间要减少一半左右, 这样就可以快速处理。为了适应快速的光电计数功能, 我们直接从摄像头预览过程截取预览图像的YUV数据, 然后计算图像亮度, 省去了拍照、存储、读取过程, 极大的提高了计数响应, 普通的智能手机响应速度都可以达到1/15秒。图2是程序运行后的界面, 使用时先测量一个比较亮的背景, 然后当摄像头被挡住时, 就开始计数。程序中为了防止摄像头一直被挡住而不断计数, 可以在逻辑处理上进行一些设计, 设置背景亮度为当前亮度, 从而有效避免重复计数。
三、结语
针对光电探测器的学习, 介绍了一种利用手机探测器来开展理论、实验教学的新方法, 对像探测器CCD、CMOS的工作原理和实际中的数据处理进行了深入的分析, 实现了利用手机摄像头完成光电计数的功能。在当前科技、资讯发达的背景下开展高等教育工作, 教师要及时了解科技动态, 了解学生的兴趣所在, 然后适当地将最新科技资讯引入课堂教学。
参考文献
[1]王鹰.基于Android应用的移动学习资源设计与开发研究——以“中南大学视频公开课”为例[J].现代教育技术:2014, (3) .
Android技术 第10篇
随着移动设备的普及和发展, 这一市场引起了Google公司的重视。在2008年Google公司推出Android移动终端操作系统, 短短几年内Android系统发展成为全球最受欢迎的移动智能终端平台[1,2,3]。图形图像处理技术在Android软件开发中尤其重要, 特别是在游戏开发中, 更离不开这一技术, 本文将介绍这一技术中绘图及动画部分。
2 常用绘图类
在Android系统中, 绘图方法继承View组件, 常用的绘图类有Paint、Canvas、Matrix和Bitmap类。
Paint类:即画笔, 在绘图过程中主要保存颜色, 样式等绘制信息, 指定绘制文本和图形, 设置相关操作属性。
Canvas类:即画布, 在定义好画笔之后, 所需图形的绘制即在画布上呈现, 设置相关画布属性, 明确画布的状态, 如:颜色、尺寸和save或restore的特殊操作。
Matrix类:即矩阵类, 通过该类可以实现图形的变换操作, 如:平移、缩放和旋转等的特效处理。
Bitmap类:即位图操作类, 用于实现对位图的基本操作。获取图像文件信息, 进行图像的相关操作, 指定格式保存图像文件, 并且在Android不同版本中, Bitmap的对象和其像素数据的存储也是有差异的。
3 二维图像绘制
Android系统提供非常强大的二维图形库, 主要使用Graphics类绘制2D图像。常用的方法有绘制几何图形、文本、图像和Path路径的绘制效果。
绘制几何图形:图形的基本绘制方法有线条、实体矩形、圆形、椭圆、弧形以及文字在2D游戏中的绘制。通过对基本几何图形的绘制应用, 可以转化为任何复杂的图案。
绘制文本:在Android中, 文本的显示主要是通过Text View和Image View, 但对于像RPC包含很多文字的游戏中, draw Text方法成为首选。
绘制图片:Canvas类用于实现绘制图片。通过组合使用Canvas类的成员函数可以实现随心所欲地绘制图片的任何部分。在画布上主要通过Bitmap绘制图片, 然后保存显示在画布上。
绘制路径:路径的绘制主要通过Path类实现, 可以预先在View上将所绘制的N个点连成一条“路径”, 然后调用draw Path即可沿着路径绘制图形。draw Text On Path可沿着Path绘制文本。
4 渲染二维图像
渲染是指对事物的描写、形容和烘托处理, 目的是烘染物象, 增强艺术效果、质感和立体感。在Android中, 提供了Surface Flinger类作为系统的渲染管理器, Shader类专门用于渲染图像以及一些几何图形。Shader类包括5个直接子类, 其中Bitmap Shader用于图像渲染, Compose Shader用于混合渲染, Linear Gradient用于线性渲染, Radial Gradient用于环形渲染, 而Sweep Gradient则用于梯度渲染。
4.1 Android GDI系统之Surface Flinger。
Surface Flinger服务是在System进程中启动的, 负责统一管理设备的帧缓冲区, Surface Flinger服务在启动过程中会创建两个线程, 其中一个线程用于监控控制台事件, 而另一个线程用于渲染系统UI, UI的渲染则通过Open GL库提供的API实现。System进程是由Zygote进程启动, 并且是以Java层System Server类的静态成员函数main为入口。
4.2 Skia引擎。
Android中2D图形的渲染由Skia实现, 即我们在框架图上看见的SGL, 有时SGL也会调用Open GL的内容实现简单的3D效果。Skia是Android核心图形引擎, 毕竟3D受制于过高的硬件要求在手机上使用比较少, Skia也能部分实现3D效果, 因此Skia实现了Android平台上大多数的图形工作。Skia的调用是一个比较经典的调用过程, 应用程序的几个包在SDK中提供, JNI放于框架的JNI目录下的Graphic目录, Skia作为第三方组件放在external目录下。Skia使用Sk Bitmap、Sk Canvas、Sk Paint和Sk Rect进行图形绘制, Skia除了有绘图功能外, 还有图形图像特效处理、动画、界面UI库、性能优化、接口实现和处理XML数据等。Skia区别与Open GL和Direct X的主要优势有: (1) 数据从Video Card中读出, 然后再到另一进程中拷回Video Scard, 这种情况不值得用硬件加速渲染。 (2) 相对而言, Skia实现图形绘制只占用很少时间, 大部分时间是计算页面元素的位置、风格、输出文本, 即使使用了3D加速也不会有明显改善。
5 动画制作
在Android中, 与图像相比动画更具有视觉冲击力。Android平台提供一套完整的动画框架, 帮助开发实现各种动画效果。在3.0版本以前, 主要包括补间动画和帧动画。
补间动画:首先给出两个关键帧, 通过算法将给定属性值在给定的时间内在两个关键帧间渐变。主要提供了旋转、移动、伸展和淡出等效果。通过Animation Set组合渐变方法, 预先定义指令, 这些指令指定了图形的属性, 即:变换类型、触发时间和持续时间等。综合运用Alpha Animation、Translate Animation、Scale Animation、Rotate Animation等方法, 通过对View的内容的一系列的图形变换, 通过平移、缩放、旋转、改变透明度实现动画效果。补间动画的实现效果除了可以用代码的形式展现, 还可使用XML语言定义, 通常XML动画模板文件放于Android项目下的res/anim/目录下。补间动画可节省空间。
帧动画:事先存放好图像, 利用人眼“视觉暂留”的原理, 把每张静态图片收集起来并依此播放, 类似GIF图片, 通过一系列Drawable依次显示来模拟动画效果。使用Frame动画, 首先创建Animation Drawabled F对象表示Frame动画, 然后利用add Frame方法把每一帧显示的内容添加进去, 获取完Animation Drawable对象, 可利用Image View显示出来, 最后通过start方法播放动画, stop方法停止播放。Animation Drawable代表的动画默认是不播放的, 必须在程序中启动。Frame动画一般是通过XML文件配置, 在Android工程的res/drawable/目录下创建XML配置文件, XML配置文件必须以<animation-list>为根元素, 以<item>表示轮换显示图片, duration属性表示各项的显示时间, visible表示drawable初见可见性, oneshot表示播放是否循环, 也可以Java代码实现帧动画效果。
6 结语
图形图像处理技术在Android应用平台有着显著的地位, 对Android的开发起着至关重要的作用。文章主要介绍在Android平台中图像处理的相关技术及方法, 通过利用这些技术更好地了解Android系统图像处理的相关内容, 开发更多出色的应用。
参考文献
[1]Android平台图像处理软件框架的开发与设计[J].软件, 2014, 35 (2) :46-47.
[2]Android图形图像处理技术研究[J].电脑知识与技术, 2014, 8 (2) .
Android 系统优化指南 第11篇
但是囊中羞涩的同学也无需放弃,在Android强大的DIY功能面前,只要我们努力钻研,也可以让自己手中的低端手机发挥出颇为优秀的效果!
“设置”极速滑动
提起手机的优化,首先都会想到各类手机优化软件,然而与电脑不同的是,仅仅优化开机加载程序、优化内存等常规内容并不能让手机的性能提升多少。想让自己的手机运行速度有一个质的飞跃,尤其是以苹果产品那样毫无停歇感的效果为目标时,优化工具是不管用的。其实不需要借助第三方工具的帮助,只需进入系统的“设置”菜单,就能让你的手机优化到令自己满足的速度:
界面优化
许多Android系统的DIY包都会将操作界面设置得十分精美,这对于高端手机用户当然是锦上添花,但是如果用户用的CPU主频不到600MHz的入门级产品,那么欣赏到的就只剩下幻灯片一样的操作了,所以首先要优化的就是手机的画面效果:
进入“设置”菜单后,首先点击“声音和显示设置”界面,把“按键操作音”、“选择操作音”、“触感”这三项的勾选全部取消。接下来再点触“动画”界面,选择“部分动画”(如图),如果想让系统变得更加流畅,那么可以选择“无动画”,不过这样做会严重的影响手机界面美观,不建议大家选择此项。
停止定位
电子地图中“我的位置”功能可以让用户的手机精确定位自己在地图中的位置,简直就是喜欢旅行以及经常迷路者的福音,不过该功能的一个缺点就是一直让手机保持后台运行,同时占用了不少的系统资源,平时不太使用手机定位的朋友可以禁止此功能的后台运行:
进入“设置”菜单的“位置和安全设置”界面,把“使用无线网络”和“使用GPS卫星”两项的勾选去掉。退出到上一层界面后分别点触“应用程序设置/开发”,把“USB调试”和“允许模拟地点”两项去掉(关闭了“USB调试”选项后用户将没办法通过电脑为手机安装软件,所以用户下一次想通过电脑访问手机时,要记得将此项开启)。最后进入“私隐权设置”,去掉“使用我的位置”的勾选。
以上设置只是关闭了地图中的定位功能,并不影响用户使用电子地图的其他功能,如果用户想重新使用手机定位,则重新选中上述所有选项即可。
终止后台运行服务
Android和我们平时在电脑中使用的Windows系统有一个非常大的不同,就是在将程序关闭后,系统的后台仍然还运行着该程序。所以电脑总是有越来越慢的感觉,如果想彻底终止相应的进程,则需要在“设置”内手动将它们关闭:
依次点触“应用程序/管理程序/正在运行”选项即可看到目前运行进程列表,点触想关闭的进程名,并在弹出的新界面内点触“强行停止”即可。
不过,如果使用此方法终止微信、谷歌输入法这样的系统服务进程时,即使将其关闭也会在几秒钟内重新开启。关闭此类进程的方式是在“设置”界面内选择“应用程序正在运行的服务”,点触想停止的服务,并在弹出警告窗口后点触“停止”按钮。
其他优化
通过以上优化,用户再尝试操作手机时会发现流畅了许多,不过还是有许多细节让人并不满意,比如进入拨号界面按键时就会有比较卡顿的感觉,在升级至Android 2.3以后许多程序运行速度明显比以前更慢了。
遇到类似问题的朋友可以在“设置”菜单里选择“高级设置”,并把“触觉反馈”和“兼容模式”两项勾选取消。其中“触觉反馈”能够让用户按下键盘后感觉到震动,关闭该功能后可以明显解决拨号卡顿的现象;而“兼容模式”是Android 2.3开始提供的新功能,此功能默认开启,效果类似于Windows 7的“XP兼容模式”,能够让手机运行旧版本专用的某些软件,不过在运行软件时会消耗更多的系统资源。
小提示:关闭了“兼容模式”后,可能会使某些旧版本的软件出现无法运行的情况(比如熊猫看书),用户只需将其升级到最新版本即可。
TIPS
关闭了“兼容模式”后,可能会使某些旧版本的软件出现无法运行的情况(比如熊猫看书),用户只需将其升级到最新版本即可。
让性能全面提升
通过“设置”对手机进行了一番初步的优化后,相信大家已经可以感受到运行速度明显提升。不过有些产品的配置属于先天不足,经过优化后即使运行速度有小范围的提升,在运行某些软件和游戏时仍然会显得十分吃力。而手机又不是台式电脑,可以随意添加硬件升级,不过好在用户可以通过其他方式调高手机的运行配置:
CPU超频
为CPU超频是在个人电脑刚刚推出时就出现的老话题了,而在智能手机时代用户可以通过setCPU这样的第三方软件为自己的手机实现超频:
运行setCPU后,按下主菜单“MENU”,依次点触“设备选项/自动检测频率”,此时会出现请求setCPU超级用户权限对话框,点触“允许”为软件添加权限并开始检测。当软件检测完CPU后,再一次点触“确定”保存设置,即可进入“主页面”为CPU设置工作模式了。
在“主页面”中用户可以用手拖动两个滑动条,在最大值和最小值之间机动调节CPU工作时的频率,具体调节方式取决于“缩放调节”中的选项,缩放调节各选项说明如下:
performance(高性能模式):按设定最大频率满负荷运转,主要用在运行一些大型游戏时。
powersave(省电模式):按设定最小频率低负荷运行,可以在待机状态下使用。
userspace(用户隔离模式):当setCPU处于非工作状态时控制CPU速度的一种方法,官方建议最好不使用该选项。
除上述模式外,还有ondemand(按需响应模式)和conservative(保守模式),不过这两种模式需要用户拥有较为深厚的CPU知识,并需要根据自己的机型在“高级”界面内手动调节,所以不建议超频的新手使用这两种模式。
接下来进入“配置”界面添加各种特定的情景应用(如电池处于相应电量或屏幕关闭)当满足其条件时,自动启用相应的用户配置。另外,当多个配置同时满足条件时,启用优先级别高的配置(用户配置优先于主页面设置)。
最后勾选“启用配置”复选框以启动setCPU后台服务并使其免遭后台程序拦截。
TIPS
自己的手机CPU主频超到多少合适,需要用户根据自己的机型以及运行的程序酌情考虑,虽然相对而言手机的CPU超频比电脑安全得多,但一旦频率过高手机还是会出现黑屏或死机的现象,这时可以拔出电池,重启手机时CPU就会回到初始状态。
添加虚拟RAM
为CPU超频可以让手机打开原本无法运行的程序,那么接下来要干的就是添加虚拟RAM,让手机加上一个虚拟的“内存条”了。Android系统添加虚拟内存有两种方式,一种是直接对手机存储空间或SD卡重新分区,添加一个SWAP的分区用于虚拟内存,但这样做不仅操作过程繁琐,而且还会对该分区造成很大的损坏。所以最好的方式就是用虚拟内存软件Swapper2创建一个swap文件,并将该文件作为虚拟内存空间:
打开Swapper2后按下手机的“MENU”键,点击“settings”(设置)按钮进入配置界面,然后点掉第一行的“run swapper at startup”(开机时运行Swapper2)项,即使用户点了此项也不会自动开启虚拟内存,所以也就不必再勾选这个选项让程序在后台无用的运行了。
接下来选择“swap place”(虚拟文件位置)设置虚拟内存位置(软件默认使用手机内存地址,需要手动设定SD卡路径)。再点击“swap size”(虚拟文件大小),可以在1MB至256MB之间选择,根据笔者测试一般的SD卡最好不要超过64MB,高速卡可以选择128MB,使用更高的容量并不会提升手机的性能,反而在创建虚拟内存文件时消耗更多的时间。
设置完毕后点触“advanced preferences(高级选项)”界面,将“Recreate swap file(重新创建swap文件)”和“Reformat swap(重新格式化swap)”两项全部选中,在每次重启手机后Swapper2软件会删除并重建swap文件,让虚拟内存访问速度更快。如果用户的SD卡没有分区,那么默认的“Use swap partition(使用swap分区)”勾选需要取消,否则运行软件时将会报错。
最后回到Swapper2主界面,按下“MENU”键后依次点触“Swap/Create”项,大约等15秒左右,当软件提示swap文件创建完毕后,再点触软件左上方“ON”键,等大约5秒钟之后,当屏幕下方界面的提示内容显示“all done”时,虚拟RAM就被开启了。
将手机内存程序移至SD卡
提升了CPU与内存的性能后,虽然可以在一定程度上缓解运行程序过慢的问题,然而存储空间过小也是许多低端手机的通病。手机容量被装满了该怎么办呢?当然是买一个大容量的SD卡并将这些程序转移了。
如果用户选用Android 2.1或以下的固件版本,应该首先将自己的固件版本升级至2.2,因为2.2之前的版本自身并不支持APPtoSD(软件转移至储存卡)功能,虽然有第三方工具可以实现这一效果,但是经过笔者实际测试发现,被转移到SD卡的程序不但运行速度会下降许多,而且经常出现应用程序在系统里集体“失踪”问题。
将系统升级Android 2.2后,用户可以直接将程序转移至SD卡内,并且不对程序的运行有任何影响:依次点触“设置/应用程序/管理应用程序”选中想转移的程序,并在弹出界面内点触“移至SD卡”选项,成功之后此处的选项会变为“移至手机内存”。而用户将SD卡插进手机后,再安装新程序时,软件会询问安装至“内置储存”还是“储存卡”内。
系统深度优化
操作界面被优化了,配置的性能也被提升了,这下可以高枕无忧的用手机上网或者玩游戏了吧?但是为什么玩了一会儿手机的速度就变得越来越慢呢?而且很多大型游戏还是玩不了,难道真的只有换手机了?我们才没那么容易被打败,下面就一起将这些讨厌的麻烦逐一解决:
缓存优化
用户如果一直保持开机状态,那么手机将会变得越来越慢,虽然可以通过前文介绍那样使用“设置”功能关闭后台进程,但每隔一段时间就到任务管理页面逐一点击未免太让人恼火。所以为了方便操作,建议大家选择“内存加速器”这样的第三方优化工具:
首先打开“内存加速器”并进入“任务管理”界面,可以看到系统内存早已经被用户前台关闭的程序占据了,用户要做的当然是选中所有想终止的进程,再点选“终止选中任务”,还在后台运行的进程就被真正的关闭了。用户就会发现运行速度明显快多了,但是每次感觉系统变慢都要跑过去清空一次缓存还是不太方便,好在此程序可以通过“小部件”来实现一键清空缓存效果:
在桌面空白处按住屏幕3秒,在弹出窗口中选择“窗口小部件”,然后选择“内存加速器”。此时在桌面处就可以看到一个内存加速器的小图标,以后每次退出程序后都只需点击一下该图标,软件就真的退出内存了。
关闭系统自带程序
网络上的Android手机系统包普遍都会自带大量应用程序,其中许多程序不但用户根本不会用到(如YouTube、Facebook等),还有许多程序跟随系统自动在后台运行。如果将这些应用程序卸载,既可以节省手机存储空间,又能加快运行速度,不过在应用程序管理中是无法卸载这些程序的,所以我们仍然需要借助第三方软件RootExplorer获取ROOT权限来实现。
打开RootExplorer文件管理器,进入系统程序所在目录“/system/app”,在程序的右上角查看显示的当前可用权限,默认的情况下可用权限为“只读”状态,点击旁边的“挂载读写”按钮来切换至“读写”状态。
在这个目录中存放的APK文件就是所有系统自带的程序,按住想要删除的程序(注意是按住不是点击),在弹出的选项中选择“删除”即可。不过不建议大家这么干,因为我们并不清楚这些程序是否关联了其他系统。为了防止出现意外,最好先更改它们的扩展名再重启手机,系统找不到原来的文件名就不会将其加载了,在确定不会出现其他错误的情况下,再将其删除即可。
降低分辨率
使用性能不太好的手机玩高端游戏是一件颇为痛苦的事情,毕竟手机游戏不像PC那样可以自己设定分辨率、调节特效,在恒定的效果下,如果屏幕卡得像幻灯片也没有什么办法。不过,用户可以通过用第三方工具LCD Density Changer修改屏幕分辨率的方式让游戏以更低的效果运行:
LCD Density Changer的使用方法十分简单:运行软件后可以直接在主界面填写屏幕的分辨率,用户可以在90至280之间选择(值越小分辨率越高,画面也就越清晰),设置完毕后点触“保存”手机将会自动重启,再次启动后用户就可以看到手机屏幕更改后的效果了。
系统降级攻略
作为一个更新较为频繁的手机系统,刷机已经成为许多Android用户最常干的活动。虽然新的系统可以为用户带来更完善的功能和更稳定的环境,但同时许多朋友也发现自己的手机在系统更新后慢得已经影响正常使用了。其实将系统刷回旧的版本是一件很简单的事情,用户在刷机精灵的帮助下,可以实现一键恢复到旧版本:
在降级之前,首先要确定与手机相连的电脑已安装 ADB 驱动,或其他带有ADB 驱动的软件让电脑能够顺利访问手机,并且在刷机精灵运行时确定其他手机工具(如91助手、豌豆荚等)已被关闭。另外需要打开手机“设置”界面中的 “USB调试” 选项,并在连接电脑时选择“仅充电”模式。
设置完毕后,将手机连接至电脑端,并在电脑中打开刷机精灵,在软件第一次运行时会自动检测手机信息。如果检测顺利,在程序的左上角“请选择你要操作的设备”处会显示手机的型号,点击“一键刷入新ROM”,并选择旧版本的固件文件地址,最后在弹出确认窗口中选择“WIPE用户数据”开始刷机。
在刷机完毕后,重启手机,用户就会发现熟悉的旧版系统又一次出现在屏幕中了。
TIPS
虽然刷机精灵是一款很傻瓜化的刷机工具,不过是要在已经获得“ROOT权限”以及“ENG S-OFF”解锁的状态下才能正常工作。所以对于已经经过刷机、升级的系统完全可以一键恢复,但如果用户第一次刷机,则要慎用此工具。
优秀固件推荐
不管我们怎么优化,都是在目前已经安装在手机的系统固件中进行的,如果最开始选择的就是一个广告和Bug齐飞的固件,那么即使我们非常努力优化,手机提升的空间也十分有限。于是笔者就根据自己的实际体验,为同样身为低端机型的用户,推荐一下适合入门级Android手机的固件包:
HTC G1/G2:Android 2.1 CM508JJB-XGB版
由于其可怜的手机内存,使得用户必须把应用程序安装到SD卡中(Android 2.2以上的系统才支持拥有此功能)。而此版固件默认支持app2ext功能,用户只需将SD卡分区就能直接将软件安装在第二个分区内。
原道N3:Android 2.1- 0524黑蓝版
固件优化了DATA和Flash文件夹容量,并附带Mandarava工具箱和RE文件管理器,原版中大量无用程序均被剔除,系统完全运行后,手机平均空闲内存为40MB。
三星 i5700:Android 2.1凤姐8.26版
此版本解决了i5700众多固件存在文件复制到SD卡消失、蓝牙不能传送、死机重启频繁的莫名其妙的现象。同时除了HTC hero黑色主题和谷歌输入法外只安装了一些基本的第三方工具,系统完全运行后,手机平均空闲内存为70MB左右。
zte v880:Android 2.3 极至精简CM 7.1
作为一款CPU主频率只有600MHz的手机,能找到一款流畅程运行2.3版本的固件十分不易,此版本几乎精简除了系统运行的基本功能外的一切工具(包括输入法、浏览器、甚至桌面),是喜欢自己动手的朋友不可错过的神作!
华为C8500:Android 2. 2.1_V6.2桌面流畅版
C8500的入门级别大约也只有历史上第一款Android手机G1能够与之相提并论了,所以此版固件将桌面、任务管理器、地图等功能都替换成了体积小巧但运行速度飞快的迷你版,想体验2.2版本又希望有流畅速度的朋友必备。
固件选择注意事项
每款型号的手机都有只适用自身的固件,所以笔者只对目前固件版本较多的手机进行了推荐。而同样使用CPU主频不到1Ghz的入门级手机的用户,在面对几款号称最完美的固件版本时又该如何选择呢?
用户首先应该考虑的是CM版或是基于CM版少量修改的固件版本(CM:CyanogenMod,目前最稳定的Android第三方固件版本),如果是在机锋这样的论坛寻找资源,在刷机之前可以留意下已安装了该版本的用户反映。
如果选择了一个看上去颇为优秀的固件,但是它同时却又提供了某个自己并不喜欢的第三方程序,可以在刷机之前用解压工具打开安装包,并在“systemapp”文件夹内找到并删除该程序的apk文件。在刷机之前就将讨厌的apk文件“优化”掉了。
Android技术 第12篇
1 课内实践教学现存问题分析
上述高技能应用型人才的培养在很大程度上依赖与实践教学, 按照现有的教学体系, 分为理论教学和实践教学, 在实践教学上分为实验、课设、实习实训等环节。其中, 课内实验教学是与理论课捆绑的教学, 在整个实践教学中占据了很高的比例。以“Android移动开发技术”课程为例, 总学时96学时, 有40学时为课内实验教学时, 占总学时41.67%。课内实验教学所占的比例很高, 因此, 如何真正有效发挥课内实验教学在专业人才培养中的作用是非常重要的。目前实践教学主要存在以下问题。
1.1 实验教学与教学目标不适应
课内实验教学在传统模式下, 较多采用知识或理论为中心的实验教学方法, 通过一些较明确的实验任务并配合详细的实验步骤指导, 让学生通过对所获得实验结果的观察与分析来验证某理论或知识原理, 并在此过程培养学生基本的实验规范与实验技能。可是, 对于培养高技能应用型人才而言, 应突出以工程与技术实践能力培养为中心, 如果沿用这种以知识或理论为中心的实验教学方法, 就会影响课内实验的教学效果和教学质量。这种方法对学生基本技能的培养有一定的作用, 但是对于基于工作过程的综合技能的培养显然是力不从心的。
1.2 实验教学方法难以激发学生主动学习
就学生而言, 以知识或理论为中心的实验教学方法, 只能让学生被动学习, 缺乏主动思考的意识, 淡化了学生分析问题和解决问题的能力, 久而久之, 学生的学习目标变得模糊不清, 学习兴趣下降, 学习主动性受到抑制。
1.3 实验评价考核机制不能体现教学的要求
考核是教学的重要环节之一, 是衡量教学质量与教学效果的主要手段, 同是也是督促学生主动学习的教学方式。在以知识或理论为中心的实验教学方法中, 实验考核主要依据考勤、实验报告和实验效果等方面来评定。显然, 这种考核难以就学生的工程技术实践能力、主动学习能力、团队沟通及写作能力、团队项目实施能力等给出客观有效的评价。
2 实践教学改革的意义
基于以上背景, 并结合建设“智能手机软件应用技术”新专业的需要, 围绕高技能应用型人才的特点进行人才培养方案的制定。因此, 对目前的实践教学进行改革, 以“智能手机软件应用技术”专业核心课程《Android移动开发技术》为载体, 以项目实践能力和表达沟通能力、团队协作和管理能力等专业素质为中心, 引入问题与案例驱动的实践教学分层模式, 并集合实验与评价改革, 全面实施课内实验教学方法改革。
实践教学的改革将有助于克服高技能应用型人才的课内实践教学体系存在的不足, 有利于激发学生的主体意识与主动学习的能力, 有利于学生项目实践能力与专业素质的培养, 有利于提高课内实验教学质量和促进高技能应用型人才培养目标的实现。本项目实施过程中所形成的课内实践教学方法改革理念、实施模式与方案, 以及所积累的经验将可被推广用于本专业的其他相关课程。
3 实践教学分层模式的设计与应用
3.1 问题与案例驱动的分层实验模式
以智能手机软件应用技术专业核心课程《Android开发技术》的实践教学为例进行问题与案例的分层实验模式, 具体分为两个层次:第一层是基本实验到综合设计性实验, 基本实验是掌握某个或某些技能点为目标, 综合设计性实验以课程所涉及的多个或全部技能点的综合应用为目标;第二层是每个基本实验内部的层次, 从相应的问题与案例驱动出发, 按照实验包含的技能点, 通过问题难度分解和分层, 形成“基本技能→进阶技能→创新阶段”分层教学。基本技能以验证操作式的实验教学方法为主, 且提供详实的指导;进阶技能是在掌握基本技能的基础上, 结合所给出的技术要点和技术指导自行设计并完成具有一定难度或复杂度的任务, 从而培养学生主动学习和团队协作的能力;创新阶段着重以初步的综合技能为目标, 要求自主完成, 此阶段内容包括技能拓展, 通过此阶段的学习, 培养学生分析问题、解决问题的能力和学生自主学习以及团体深度合作的能力, 形成链条, 良性循环。
3.2 基于项目小组或项目团队的协同实验模式
上述分层教学中, 不论是基本实验还是综合性实验均已项目小组或项目团队的形式教学, 项目小组成员按照实际项目的岗位分工, 担任相应的任务或角色, 分工明确, 责任到人, 团队内既有分工又有合作。借此培养学生的沟通、协作能力, 团队共同利益、荣誉的观念及项目的实施能力等综合职业素养。
3.3 基于过程与能力相结合的考核机制
该考核机制应充分体现实践教学考核与教学目标相一致的目的。 (见图1)