当前位置: 首页 > news >正文

Android软硬整合技术(HALFramework)

[ back ]

Android软硬整合技术:

    HAL&Framework&App 架构设计与实战开发


 by 高煥堂 


第1步: 自学在线微课:<Android的HAL驱动框架和API>

              wKioL1XYQdOgxUDsAAGWitB5F3M601.jpg 微课-1(请点击此图,立即体验)

 听完了,可深入理解HAL的产生背景、角色、功能,及其代码写法和范例。

 对于孰悉Linux和C/C++的工程师而言,了解HAL及其设计,是开发 Android产品的第一门课。基于Linux驱动开发的既有基础经验,透过分析HAL 的设计,建立基础的Android框架知识。顾名思义,框架(Framework)就是基于既定架构的接口(API)来协助应用开发、并框住应用的行为。HAL框架也不例外,具有上述的角色和功用。


第2步: 自学在线微课:解析Linux驱动框架(初步) >

              wKiom1XafSKDaDALAAF6_lYJIIQ434.jpg  微课-2(请点击此图,立即体验)

 听完了,可深入理解Android框架与Linux密切的关系,非常有助于HAL-based驱动开发工作

☆ Android是基于Linux OS的智能终端平台(platform),此平台内含多层框架(framework),而框架又内含许多设计模式(patterns)。如果我们也能将设计模式和框架观念,应用于Linux的驱动开发上。就能基于一致的概念来看待上层的Android软件开发和底层的Linux驱动开发了,而达到一个完美的境界:概念一致性(conceptual integrity)。

    

第3步: 自学在线微课:JNI開發初步 >

              wKioL1Xaf7Kwe-FpAAEnQF_as0o354.jpg微课-3(请点击此图,立即体验)

 听完了,可深入在Android架构里,Java与C/C++如何密切的结合在一起,非常有助于HAL-based驱动开发工作。

☆ 从框架(Framework)角度来看,Android平台里含有两层框架。上面是Java层的应用框架,而下面是C/C++层的系统框架。这两层框架之间会有密切的沟通。此时JNI(Java Native Interface)就扮演双方沟通的接口了。藉由JNI接口,可将Java层的基类或子类别的函数实作部份挖空,而移到JNI层的本地C函数来实作之。这个JNI本地(Native)C函数,再衔接到底层的C/C++系统框架。      


第4步: 自学在线微课:Android的Java层系统服务与API >

              wKioL1XagubhFGkVAAFxWIiKIEQ524.jpg 微课-4(请点击此图,立即体验)

 听完了,可深入理解Android系统的核心部分,包括其架构、API和开发要点。

☆ 为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架最接近Linux/Driver 的部分。为充分发挥硬件设备的差化特性,系统服务是让上层Java 应用程序使用Driver/HW Device 特色的重要管道。在开机过程中,就可以启动核心服务(如汉字输入法服务等),让众多应用程序共享之。由于共享,所以能有效低 Java 应用程序的大小(Size)。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。


第5步: 自学在线微课:App框架(Framework)初步 >

               wKioL1XamYrgBFtKAAG7c3gc1n4281.jpg  微课-5(请点击此图,立即体验)

 听完了,可掌握框架(Framework)的基本知识和技术,对于深入理解Android系统的多层框架体系,是非常有帮助的。

☆ Android是基于Linux的多层框架(framework)体系,而框架又内含许多设计模式(patterns)。如果我们也能将设计模式和框架观念,应用于Linux的驱动开发上。就能基于一致的概念来看待上层的Android软件开发和底层的Linux驱动开发了,而达到一个完美的境界:概念一致性(conceptual integrity)。让该领域中的程序员们,依共同结构来发展程序,使程序间具有一致性,增加了程序的清晰度,以降低程序的设计与维护费用。

  

第6步: 恭喜初阶课程毕业了,

             请继续=> 学习高阶课程

 

~ End ~


相关文章:

  • httpry 升级版本 secihttp 发布了
  • 认为最重要的是:不要说自己正在「创业」(转)
  • 第一章 词汇陷阱
  • 在我的眼里,生产主管(1)——如何做竞争分析
  • Linux用户和组管理
  • Intellij idea 与 eclipse 常用快捷键对比(Shortcuts to compare : Intellij idea VS Eclipse)
  • 银行之前的转账和支付宝银行间的转账
  • 决解linuxmint17终端字体重叠问题
  • 学习利用帮助文件的查看,并通过帮助命令学习基本命令
  • 大话设计模式第二章---商场促销简单工厂模式、策略模式 PHP实现及对比
  • linux运维实战练习-2015年8月27日课程作业
  • 《NoSQL For Mere Mortals》书评与作者问答录
  • django 1.8 官方文档翻译: 13-1-1 Django 中的用户认证
  • Linux 日志
  • iOS开发之如何修改导航栏的内容
  • 分享一款快速APP功能测试工具
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ES10 特性的完整指南
  • ES2017异步函数现已正式可用
  • es6(二):字符串的扩展
  • Octave 入门
  • orm2 中文文档 3.1 模型属性
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue-router的history模式发布配置
  • yii2权限控制rbac之rule详细讲解
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 两列自适应布局方案整理
  • 码农张的Bug人生 - 初来乍到
  • 新版博客前端前瞻
  • 用Visual Studio开发以太坊智能合约
  • 做一名精致的JavaScripter 01:JavaScript简介
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ionic入门之数据绑定显示-1
  • linux 淘宝开源监控工具tsar
  • raise 与 raise ... from 的区别
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #if和#ifdef区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • #pragma multi_compile #pragma shader_feature
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (状压dp)uva 10817 Headmaster's Headache
  • .Net - 类的介绍
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 中创建支持集合初始化器的类型
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET轻量级ORM组件Dapper葵花宝典
  • .net与java建立WebService再互相调用
  • .net知识和学习方法系列(二十一)CLR-枚举