㈠ 有谁知道android里的Path类中的quadTo()方法是怎么实现贝塞尔曲线的吗
/**
* 画曲线(核心代码)
*
* @param startp
* 开始点
* @param endp
* 结束点
* @param canvas
* 画布
* @param paint
* 画笔
*/
private void drawCurve(Point[] points, Canvas canvas, Paint paint)
{
Point startp = new Point();
Point endp = new Point();
for (int i = 0; i < points.length - 1; i++)
{
startp = points[i];
endp = points[i + 1];
int wt = (startp.x + endp.x) / 2;
Point p3 = new Point();
Point p4 = new Point();
p3.y = startp.y;
p3.x = wt;
p4.y = endp.y;
p4.x = wt;
// 确定曲线的路径
path = new Path();
path.moveTo(startp.x, startp.y);
path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y);
canvas.drawPath(path, paint);
}
}
㈡ Adobe Flash Player 11的最新功能
通过Adobe®Flash®Player运行时交付极具吸引力的用户体验,支持本机64位操作系统和浏览器,加速图形渲染、异步位图解码、高分辨率位图支持等等。
本机64位支持
FlashPlayer现在可利用linux®、MacOS和Windows®上对64位操作系统和64位网页浏览器的本地支持。
Stage3D加速图形渲染*
探索Adobe高性能2D/3DGPU硬件加速图形渲染的新架构,为应用程序高级渲染提供了低级Stage3DAPI,带来互动体验类的框架开发。
*个人计算机的初始支持。
鼠标控制
针对新的内容类别制作身临其境的全景游戏,其中包括需要利用无限滚动、鼠标锁定、相对坐标以及右键和中键事件的第一人称视角游戏。
三次Bezier曲线
轻松创建复杂的三次Bezier曲线,无需通过cubicCurveTo绘制API自定义ActionScript®API。
增强的高分辨率位图支持
可以开发使用大量位图的应用程序。BitmapData对象不再局限于16兆像素(16,777,215像素)的最高分辨率,最大位图的宽度/高度不再局限于8,191像素。
异步位图解码
通过解码初始加载而非点播加载的图像,提高应用程序的响应,提供更流畅的动画。图像视需要缓存。
创造令人赞叹的媒体体验
借助FlashPlayer的高级音频和视频功能创造令人赞叹的媒体体验。
相机的H.264/AVC软件编码
来自您的计算机摄像头的美丽流媒体视频,具有更高的压缩效率和行业广泛的支持,实现高品质的实时通信(例如,视频聊天和视频会议)和视频直播节目。
受保护的HTTP动态流化(HDS)
跨设备保护流视频,同时取消部署复杂的许可证服务器。
多线程视频解码
提供流媒体和实时交互视频,改进了播放性能并提高了Windows、MacOS和Linux系统上运行的高比特率内容的帧速率。
回声消除(仅限桌面)
向游戏、企业和其他类型应用程序添加实时VoIP功能,而无需用户佩戴降噪耳机。用户可以使用台式机或便携式计算机内置的喇叭进行聊天。
高质量视频编解码器
通过渐进式下载、HTTP流或RTMP流,提供高达1080p的高清(HD)质量视频,足以媲美当今最佳的视频编解码器,包括网络上最流行的视频格式On2VP6、On2VP6-S和行业标准H.264。
Speex音频编解码器
充分利用高清晰、开放源代码Speex语音编解码器,它为语音编码提供了等待时间较短的备选方案。FlashPlayer还支持ADPCM、HE-AAC、MP3和Nellymoser。
内容保护
回放使用FlashPlayer中的AdobeFlashAccess保护的媒体可支持各种业务模型,包括用于流化和下载的视频点播、租赁和电子售出。
HTTP动态流化
使用标准HTTP基础结构和SWF级回放组件,交付视频点播和实时多位速率流化。交付直播和录制媒体,包括对FlashAccess的HTTP流媒体视频的全面内容保护。
电话的G.711音频压缩
通过FlashMediaGateway(FMG)和其他第三方客户端(通过开放RTMP协议),支持与传统电话系统的互操作性,而无需转码。
StageVideo硬件加速
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
InternetExplorer9硬件加速渲染支持(仅限桌面)
充分利用InternetExplorer9中的硬件加速图形,借助硬件渲染表面提高图形性能并实现无缝合成。
H.264视频硬件解码
跨支持的设备以最低的开销交付顺畅的高品质视频。硬件解码卸载CPU任务、改进视频回放、降低系统资源的使用、维持电池寿命。
快速切换
借助根据不断变化的网络条件自动调整的流显示出众的视频效果。FlashPlayer经过增强,缩短了位速率之间的切换时间。
AdobeFlashAccess®
利用关键旋转支持、V3许可证链接、域名支持、增强输出保护以及设备过滤功能。
流重新连接
即使连接中断时,也可以通过缓冲区播放RTMP流。在ActionScript中加入重新连接逻辑,重新建立服务器连接并在不中断视频的情况下继续流化。 延伸FlashPlayer的运行时功能,在浏览器中实现前所未有的用户体验。
图形多核支持
借助利用最多四个CPU的多核支持加快矢量、位图、滤镜和视频呈现,其中包括真正的1080p视频。
矢量数据类型
使用类型化数组类实现更高的数据性能、效率和错误检查效果。
ActionScript3.0
实现卓越的性能,通过:复杂的应用程序;大型数据集;基于ECMAScript标准(ECMA-262)的ActionScript3.0面向对象的可重用代码库。
全局错误处理
编写一个处理程序就可以处理之前不属于try/catch语句的所有运行时错误。通过捕捉和处理意外运行时错误和显示自定义错误消息,改善应用程序可靠性和用户体验。
麦克风访问(仅限桌面)
访问来自麦克风的实时和连续波形的二进制数据,以创建新类型的音频应用程序。
动态生成声音
使用增强的声音API生成音频并创建新的音频应用程序类型,如混音器和音序器、游戏实时音频、甚至音频观测仪。实时处理、过滤和混合音频。
绘制API
借助可重新设置样式的属性、3DAPI以及无需逐行编码即可绘制复杂形状的新方式,更轻松地完成运行时绘制。
文本引擎
使用新的、极其灵活的文本布局引擎创建新颖的文本控制,该引擎与TextField并存,后者提供对文本布局和交互API的低级访问,用于创建组件级文本对象。
二进制文件支持
借助对二进制数据的直接字节访问,增强您的网络应用程序。通过为新的文件和数据类型添加支持等新方式控制和访问数据,或实时处理声音数据以创建新的声音效果。
缓冲的流追赶
处理位图、将矢量数据复制到位图中以及在运行时使用位图效果。
上下文菜单
通过对常见文本字段上下文菜单项使用支持纯文本和富文本的ActionScriptAPI,控制上下文菜单中可以显示的内容。剪贴板菜单以安全、受控方式提供对剪贴板的访问。
音频硬件解码
借助硬件加快音频解码、避免CPU密集型分析和解压缩,从而降低了移动设备的CPU负载和延长电池寿命。
硬件加速
利用图形卡的硬件处理能力将SWF文件绘制到浏览器中并加快位图、滤镜、混合模式和视频叠加的合成计算,与软件处理相比速度更快。
全屏、硬件加速模式
为用户提供硬件加速、多核增强、全屏视频回放功能,实现跨主要操作系统和浏览器的高分辨率观看。
图形呈现
在运行时享受快速、高质量的按比例图像缩减。通过位图缓存减少矢量和图形呈现,提高性能。.
消除锯齿引擎(Saffron3.1)
借助增强的Saffron和消除锯齿引擎,享受消除锯齿后更高的文本性能和质量,对于亚洲字符呈现尤为明显。笔触字体支持降低了内存要求。
ActionScriptVirtualMachine2
充分利用ActionScript3.0以及为富Internet应用程序优化的AVM2。AVM2包含一个JIT编译器,它可以将ActionScript字节代码转换为本机代码,从而实现最高执行速度。
优化的SWF管理(仅限移动)
优化移动CPU和内存限制的SWF载入和回放,以提供更好的用户体验。不查看时会自动暂停SWF回放,从而降低CPU、电池和内存使用。
睡眠模式(仅限移动)
通过在移动设备转入屏幕保护程序或类似模式时减慢FlashPlayer定时器,降低移动设备上的CPU和电池消耗,并且不中断音频/视频回放。来电使FlashPlayer暂停。
FlashPlayer高速缓存
使用开放源代码Flex框架等公用平台组件构建应用程序,缩小SWF文件大小并缩短应用程序下载时间。FlashPlayer可以将公用组件放入本地高速缓存,然后供任何域的SWF文件使用。
周期定时器
通过消除对不同浏览器定时器实时的依赖性,实现一致的跨平台行为,降低CPU使用并延长电池寿命。以任意帧速率回放视频,增加回放保真度。
轻量级应用程序大小
轻量级、二进制SWF文件格式使您能以较小的文件提供引人入胜的内容。
渐进式应用程序加载
缩短启动时间,实现快速的用户体验。FlashPlayer在下载时执行SWF内容。
硬件加速视频演示
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。 降低跨不同设备、软件、网络和用户环境创建、测试和部署内容的成本,最终提高经营业绩。
跨平台和浏览器一致性
创建能以一致、可靠、向后兼容并且安全的方式访问的内容,并且可以跨主要操作系统和浏览器访问它们。通过重用代码、资源、框架、工具和服务,为桌面和移动平台创建应用程序、内容和视频。
快速采用
使用最新功能设计内容,并在几个月内瞄准主体用户。快速采用FlashPlayer的新发行版使开发人员能借助尖端技术获得更多用户。
安装简单
为用户提供了顺畅的上下文升级体验。FlashPlayer包含快速安装和自动更新通知功能,实现FlashPlayer新发行版的快速采用,开发人员可以自信锁定这样的目标。
FlashPlayer后台更新
借助此次针对Windows系统进行了功能增强的更新机制,现在可以向终端用户更有效率地提供新版本的运行时。 利用Android™、BlackBerry®Tablet和iOS操作系统的本机文本输入控件,开发移动应用程序。
移动平台支持
向移动设备提供内容。目标移动操作系统包括Android和BlackberryTabletOS。合作伙伴可以获得一个移植工具包和基于Linux®的参考实施,用于将FlashPlayer移植到其他平台。
StageVideo硬件加速
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。
加速计输入
将加速计输入用于用户输入控制以及控制屏幕方向。从本机设备加速计传感器读取x、y、z轴的加速值,指定计算机的更新速度以节省电池寿命。
H.264视频硬件解码
跨支持的设备以最低的开销交付顺畅的高品质视频。硬件解码卸载CPU任务、改进视频回放、降低系统资源的使用、维持电池寿命。
音频硬件解码
借助硬件加快音频解码、避免CPU密集型分析和解压缩,从而降低了移动设备的CPU负载和延长电池寿命。
优化的SWF管理(仅限移动)
优化移动CPU和内存限制的SWF载入和回放,以提供更好的用户体验。不查看时会自动暂停SWF回放,从而降低CPU、电池和内存使用。
睡眠模式(仅限移动)
通过在移动设备转入屏幕保护程序或类似模式时减慢FlashPlayer定时器,降低移动设备上的CPU和电池消耗,并且不中断音频/视频回放。来电使FlashPlayer暂停。
硬件加速视频演示
在嵌入式和全屏模式下,享受网络上高清晰度H.264视频的优美、流畅回放。AdobeFlashPlayer利用StageVideo硬件加速视频管线,具备更高的帧速率和更低的功耗。
本机文本输入UI(移动)
移动应用程序现在可以利用Android、BlackBerryTablet和iOS操作系统上的本机文本输入控件,包括特定平台的用户交互行为,例如放大倍率和文本选择。
与Android浏览器渲染引擎更进一步的集成(需要Android3.0.1或更高版本)
由于FlashPlayer与增强的Android3.0浏览器进一步集成,您可以充分利用丰富的交互式网络内容更快、更好的渲染实现更顺畅、响应更快的浏览体验。
智能手机
您可以感受到为充分利用新款智能手机和Tablet中的下一代处理器而度身定制的性能提升。FlashPlayer以智能方式利用多核和GPU技术流畅地交付FLV文件。
自动软键盘支持
在与丰富内容交互、需要键盘输入的触摸屏设备上享受更出众的体验。简化需要键盘输入的应用程序开发,使其易于优化移动设备的桌面应用程序。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。 通过本机javaScript对象表示法(JSON)、套接字进度事件、JPEG-XR支持、增强SWF压缩、垃圾收集API和删除容器的子组件,提高您的开发马力。
本机JSON(JavaScript对象表示法)
ActionScript开发人员现在可以利用高性能本地解析和生成JSON格式数据。开发人员可以将现有数据无缝集成到他们的项目中。
垃圾收集通知
GC通知API对垃圾收集进度提供了额外的控制,使垃圾收集过程不会破坏用户体验。
JPEG-XR支持
支持JPEG-XR高级图像压缩标准(国际标准ISO/IEC29199-2),具备比JPEG更高效的压缩,同时支持有损和无损压缩,并增加对alpha通道透明度的支持。
高效率SWF压缩支持
利用LZMA压缩减少SWF文件大小高达40%,通过缩短下载时间和减少带宽消耗,使用户能够从更丰富的体验中受益。
新的removeChildrenAPI
DisplayObjectContainer现在实施了removeChildrenAPI,使开发人员能够运用单一API调用,快速删除容器的所有子对象。
新的MovieClip属性
利用新的MovieClip.isPlaying特性,返回MovieClip的当前播放状态。
套接字进度事件
通过确定写入缓冲区剩余字节数的新特性以及数据发送至网络层的新事件,改进数据传输管理。新的API允许应用程序轻松跟踪进展情况并提供反馈。 通过FlashPlayer中的本机设备功能实现高度创新的电影体验来吸引用户。
3D效果
从2D开始,然后将您的动画转换为3D。AdobeFlashProfessional软件简单易用的API和3D工具实现动态动画,原先只是有经验的ActionScript®用户或自定义第三方库才能实现。
MacOS自动更新通知
添加实时动态效果,如模糊、投影、发光、斜角、渐变发光等。使用混合模式、径向渐变以及与通过PixelBender技术创建的自定滤镜和效果结合的笔触增加创作选项。
自定义滤镜和效果
创建电影体验实时效果。借助PixelBender,效果既可用于AdobeAfterEffects®CS5软件的作品制作,也可以与FlashPlayer一起实时使用。将独特的滤镜、效果和混合模式应用于所有显示对象。
子像素文本渲染
FlashPlayer中的文本可读性得到改进,尤其对于基于复杂字符的语言。
高级文本支持
充分利用灵活的文本引擎,它为网络带来了印刷级出版。借助开放源代码文本布局框架获得对文本布局更高的控制力,这是一个用于创建多语言网络应用程序的可扩展库。
移动文本输入
如果未检测到物理键盘,可以借助TextField支持使用本机设备虚拟键盘输入文本。在移动设备上编辑文本时,会自动升起和降下一个虚拟键盘,从而实现无阻、直观的文本编辑。
本机自定义鼠标光标
定义自定义本机鼠标光标,从而增强用户体验和提高性能。
多触和手势
借助面向多触和本机手势事件的全新ActionScript3.0API,充分利用最新的硬件和操作系统用户交互功能。为广泛的设备创建多触感知内容。
加速计输入
将加速计输入用于用户输入控制以及控制屏幕方向。从本机设备加速计传感器读取x、y、z轴的加速值,指定计算机的更新速度以节省电池寿命。
动画与合成
借助Alpha通道、蒙版和图层支持等动画及合成功能为设计注入活力。创建与图像及视频集成、令人赞叹的动态图形。
图像导入
动态导入GIF、渐进JPEG和PNG文件。
颜色校正
交付颜色准确的网络应用程序,令喜爱的网络目标外观如您所愿。颜色校正可以与显示器的ICC颜色配置文件配合,允许您将SWF文件转换为标准RGB。
3D效果
可处理高达16,777,216像素(4096x4096)的大型位图,每侧最大长度可达8191像素。 利用新的隐私功能为用户提供更多的安全性和存储控制,带来更加透明和可信的体验。
安全随机数生成器
开发人员现在可以利用加密安全随机数生成来构建更安全的算法和协议。
TLS安全套接字支持
利用客户端/服务器应用程序对安全通信的全新支持。
简化本地存储管理
以简单与集成的方式进一步控制用户隐私,通过浏览器隐私设置界面清除本地存储,就像现在用户清除他们的浏览器cookie一样。
本地设置管理器
借助简化的控制更轻松地管理FlashPlayer隐私、安全性和存储设置。用户可以从Windows®、Mac和Linux®计算机的控制面板或系统首选项直接访问FlashPlayer设置管理器。
MacOS自动更新通知
由于MacOS上支持软件更新自动通知,您可以更轻松地随时使用最新的新增功能。 创建各种应用程序,它们与浏览器密切集成、充分利用本地系统资源并为用户提供了更安全的体验。
异步位图解码
通过解码初始加载而非点播加载的图像,提高应用程序的响应,提供更流畅的动画。图像视需要缓存。
二进制套接字
充分利用与现有自定协议的互操作性,借助紧凑的数据表示法提高数据传输性能。
共享对象
在本地计算机或服务器上的SWF文件之间实时共享数据。
二进制数据访问
借助开放、紧凑的ActionMessageFormat(AMF)交换二进制数据。通过ActionScript对象序列化,保持和检索 应用程序状态。
本地连接
在同一客户端上运行的应用程序之间传输和共享数据。
全球化支持
使用操作系统区域设置首选项或与当前选定区域设置无关的特定格式处理文本和列表,并根据位置环境显示信息。
文件上载和下载API
允许用户从您的网络应用程序上载并保存文件,为他们带来真实体验。新的文件参考运行时访问无需往返服务器,即可实现本地数据处理。
输入法编辑器
通过从您的应用程序中访问操作系统IME,实现本地化输入。
读/写剪贴板访问
允许用户通过剪贴板菜单以安全、受控的方式访问剪贴板,以便您编写用于粘贴文本的处理函数。
浏览器专用模式(仅限桌面)
使用主机浏览器的“专用浏览”模式,因此不会在本地保留本地数据和浏览活动,为SWF和HTML内容提供了一致的专用浏览机制。在Firefox、Chrome和InternetExplorer中受支持。
内存不足管理
当SWF文件尝试分配的内存超出设备上的可用内存时,通过关闭相应实例,自动防止内存不足浏览器崩溃。
外部API
通过外部FlashPlayerAPI与基于HTML、DHTML和Ajax的网络应用程序集成。
提供一致的网络体验
Adobe致力于通过采用开放技术推动创新,提供一致、与众不同的网络体验。
开放规范
创建产品和技术,它们实施了SWF、FLV/F4V、RTMP和AMF规范。Adobe使开发人员能轻松访问这些规范。
开放源代码支持
利用Adobe对开源活动的支持,包括Tamarin开源项目的ActionScript虚拟机,提供一个开源Flex框架,并支持Linux版FlashPlayer。
公共缺陷库
通过FlashPlayer公共缺陷和问题管理系统请求新功能、报告缺陷、为缺陷投票和追踪状态。
SWF搜索
依赖于动态网络内容和RIA大幅改善的搜索结果。Adobe通过向主要合作伙伴提供经过优化的FlashPlayer技术,与搜索行业的领先公司合作。
OpenScreenProject
充分利用OpenScreenProject™,这是一个行业联合的项目,旨在帮助用户跨多个屏幕顺畅访问和共享丰富的内容,而无论所使用的设备、操作系统、浏览器或网络。
㈢ android 怎么编译so文件
android NDK编译多个so文件
android编译系统的makefile文件Android.mk写法如下
(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下
Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径。
(2)Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始
以include $(BUILD_XXX)结束。
include $(CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,
如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。
include $(BUILD_STATIC_LIBRARY)表示编译成静态库
include $(BUILD_SHARED_LIBRARY)表示编译成动态库。
include $(BUILD_EXECUTABLE)表示编译成可执行程序
(3)举例如下(frameworks/base/libs/audioflinger/Android.mk):
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) 模块一
ifeq ($(AUDIO_POLICY_TEST),true)
ENABLE_AUDIO_DUMP := true
endif
LOCAL_SRC_FILES:= \
AudioHardwareGeneric.cpp \
AudioHardwareStub.cpp \
AudioHardwareInterface.cpp
ifeq ($(ENABLE_AUDIO_DUMP),true)
LOCAL_SRC_FILES += AudioDumpInterface.cpp
LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP
endif
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_CFLAGS += -DGENERIC_AUDIO
endif
LOCAL_MODULE:= libaudiointerface
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_SRC_FILES += A2dpAudioInterface.cpp
LOCAL_SHARED_LIBRARIES += liba2dp
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_C_INCLUDES += $(call include-path-for, bluez)
endif
include $(BUILD_STATIC_LIBRARY) 模块一编译成静态库
include $(CLEAR_VARS) 模块二
LOCAL_SRC_FILES:= \
AudioPolicyManagerBase.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmedia
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudiopolicybase
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_A2DP
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
include $(BUILD_STATIC_LIBRARY) 模块二编译成静态库
include $(CLEAR_VARS) 模块三
LOCAL_SRC_FILES:= \
AudioFlinger.cpp \
AudioMixer.cpp.arm \
AudioResampler.cpp.arm \
AudioResamplerSinc.cpp.arm \
AudioResamplerCubic.cpp.arm \
AudioPolicyService.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase
LOCAL_CFLAGS += -DGENERIC_AUDIO
else
LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy
endif
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudioflinger
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_SHARED_LIBRARIES += liba2dp
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif
endif
ifeq ($(BOARD_USE_LVMX),true)
LOCAL_CFLAGS += -DLVMX
LOCAL_C_INCLUDES += vendor/nxp
LOCAL_STATIC_LIBRARIES += liblifevibes
LOCAL_SHARED_LIBRARIES += liblvmxservice
# LOCAL_SHARED_LIBRARIES += liblvmxipc
endif
include $(BUILD_SHARED_LIBRARY) 模块三编译成动态库
(4)编译一个应用程序(APK)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory-->直译(建立在java子目录中的所有Java文件)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build-->直译(创建APK的名称)
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK-->直译(告诉它来建立一个APK)
include $(BUILD_PACKAGE)
(5)编译一个依赖于静态Java库(static.jar)的应用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
(6)编译一个需要用平台的key签名的应用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
(7)编译一个需要用特定key前面的应用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)
(8)添加一个预编译应用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Mole name should match apk name to be installed.
LOCAL_MODULE := LocalMoleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
(9)添加一个静态JAVA库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
(10)Android.mk的编译模块中间可以定义相关的编译内容,也就是指定相关的变量如下:
LOCAL_AAPT_FLAGS
LOCAL_ACP_UNAVAILABLE
LOCAL_ADDITIONAL_JAVA_DIR
LOCAL_AIDL_INCLUDES
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE
LOCAL_ASFLAGS
LOCAL_ASSET_DIR
LOCAL_ASSET_FILES 在Android.mk文件中编译应用程序(BUILD_PACKAGE)时设置此变量,表示资源文件,
通常会定义成LOCAL_ASSET_FILES += $(call find-subdir-assets)
LOCAL_BUILT_MODULE_STEM
LOCAL_C_INCLUDES 额外的C/C++编译头文件路径,用LOCAL_PATH表示本文件所在目录
举例如下:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
LOCAL_CC 指定C编译器
LOCAL_CERTIFICATE 签名认证
LOCAL_CFLAGS 为C/C++编译器定义额外的标志(如宏定义),举例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS install应用程序时需要复制的头文件,必须同时定义LOCAL_COPY_HEADERS_TO
LOCAL_COPY_HEADERS_TO install应用程序时复制头文件的目的路径
LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp为文件后缀,你可以通过LOCAL_CPP_EXTENSION指定C++文件后缀名
如:LOCAL_CPP_EXTENSION := .cc
注意统一模块中C++文件后缀必须保持一致。
LOCAL_CPPFLAGS 传递额外的标志给C++编译器,如:LOCAL_CPPFLAGS += -ffriend-injection
LOCAL_CXX 指定C++编译器
LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
LOCAL_FORCE_STATIC_EXECUTABLE 如果编译的可执行程序要进行静态链接(执行时不依赖于任何动态库),则设置LOCAL_FORCE_STATIC_EXECUTABLE:=true
目前只有libc有静态库形式,这个只有文件系统中/sbin目录下的应用程序会用到,这个目录下的应用程序在运行时通常
文件系统的其它部分还没有加载,所以必须进行静态链接。
LOCAL_GENERATED_SOURCES
LOCAL_INSTRUMENTATION_FOR
LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME
LOCAL_INTERMEDIATE_SOURCES
LOCAL_INTERMEDIATE_TARGETS
LOCAL_IS_HOST_MODULE
LOCAL_JAR_MANIFEST
LOCAL_JARJAR_RULES
LOCAL_JAVA_LIBRARIES 编译java应用程序和库的时候指定包含的java类库,目前有core和framework两种
多数情况下定义成:LOCAL_JAVA_LIBRARIES := core framework
注意LOCAL_JAVA_LIBRARIES不是必须的,而且编译APK时不允许定义(系统会自动添加)
LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
LOCAL_LDFLAGS 传递额外的参数给连接器(务必注意参数的顺序)
LOCAL_LDLIBS 为可执行程序或者库的编译指定额外的库,指定库以"-lxxx"格式,举例:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl,-z,origin
LOCAL_MODULE 生成的模块的名称(注意应用程序名称用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)
LOCAL_MODULE_PATH 生成模块的路径
LOCAL_MODULE_STEM
LOCAL_MODULE_TAGS 生成模块的标记
LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILE
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME APK应用程序的名称
LOCAL_POST_PROCESS_COMMAND
LOCAL_PREBUILT_EXECUTABLES 预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用,指定需要复制的可执行文件
LOCAL_PREBUILT_JAVA_LIBRARIES
LOCAL_PREBUILT_LIBS 预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用, 指定需要复制的库.
LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE 是否需要预连接处理(默认需要,用来做动态库优化)
LOCAL_REQUIRED_MODULES 指定模块运行所依赖的模块(模块安装时将会同步安装它所依赖的模块)
LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION
LOCAL_SHARED_LIBRARIES 可链接动态库
LOCAL_SRC_FILES 编译源文件
LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_LIBRARIES 可链接静态库
LOCAL_UNINSTALLABLE_MODULE
LOCAL_UNSTRIPPED_PATH
LOCAL_WHOLE_STATIC_LIBRARIES 指定模块所需要载入的完整静态库(这些精通库在链接是不允许链接器删除其中无用的代码)
LOCAL_YACCFLAGS
OVERRIDE_BUILT_MODULE_PATH
㈣ 如何在android画分析图(例如 柱状图、趋势图、饼图)
目前android上图标引擎并不少见,像aChartEngine就能很好的完成绘图:
aChartEngine支持:1、linechart(折线图)2、areachart(面积图;分区图,对比图)3、scatterchart(散点图)4、timechart(时间图;进度表)5、barchart(条形图;柱状图)6、piechart(饼图)7、bubblechart(气泡图)8、doughnutchart(圆环图)9、range(high-low)barchart(范围条形图)10、dialchart/gauge(拨号盘/压力表)11、combined(anycombinationofline,cubicline,scatter,bar,rangebar,bubble)chart(组合图)12、cubiclinechart(立方折线图)
上述所有支持的图表类型,都可以包含多个系列,都支持水平(默认)或垂直方式展示图表,并且支持许多其他的自定义功能。所有图表都可以建立为一个view,也可以建立为一个用于启动activity的intent.
下面是一个饼状图的源码事例:
package org.achartengine.chartdemo.demo.chart;
import org.achartengine.ChartFactory;
import org.achartengine.renderer.DefaultRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
public class BudgetPieChart extends AbstractDemoChart {
public String getName() {
return "Budget chart";
}
public String getDesc() {
return "The budget per project for this year (pie chart)";
}
public Intent execute(Context context) {
double[] values = new double[] { 12, 14, 11, 10, 19 };//饼图分层5块,每块代表的数值
int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.CYAN };//每块饼图的颜色
DefaultRenderer renderer = buildCategoryRenderer(colors);
renderer.setZoomButtonsVisible(true);//设置显示放大缩小按钮
renderer.setZoomEnabled(true);//设置允许放大缩小.
renderer.setChartTitleTextSize(20);//设置图表标题的文字大小
return ChartFactory.getPieChartIntent(context, buildCategoryDataset("Project budget", values),
renderer, "Budget");//构建Intent, buildCategoryDataset是调用AbstraDemoChart的构建方法.
}
}