概述
Android系统初识
一、Android SDK 有四大组件:
Activity
Service
Broadcast Receiver
Conten Provider
二、Adroid 系统的5层框架结构(从上到下):
Application :应用程序层。
Application Framework:俗称“Java库”,是为上层应用提供API接口和系统级服务进程的实现。
Librariers & Android Runtime :由C/C++实现,包括WebKit,OpenGL,SQLite等,俗称“C库层”。不需要理解库里的东西,但要知道库与本地的联系。
HAL :降低与硬件的耦合度,避免硬件厂商的驱动程序被迫开源。
Linux Kernel:用现有的开源内核。
三、Android开发的两个方向:
系统移植。
应用程序开发。
四、代码下载:
repo init -u https://android…….
repo initialized in /home/android
repo sync
五、编译:
Source ./build/envsetup.sh :执行 envsetup脚本
lunch xxxxx :编译生成一个用于工程开发目的,且运行与模拟器的系统。如果不知道哪些类型产品可选,就直接敲入 lunch命令。
make -jx / make xxximage / make:可以根据CPU的核心数,选择合适的jx 然后编译。
六、Android 系统映像文件
编译生成的文件会出现在:
out/target/product/[YOUR_PRODUCT_NAME]
常见的image解释:
boot.img :包含内核启动参数、内核等多个元素
ramdisk.img: 一个小型的文件系统,是android系统启动的关键如果没有,则应该是编译进了内核。
system.img:Android系统的运行程序包(framework在这里),将被挂载到设备的/system节点下。
userdata.img:各程序的数据存储所在,将被挂载到/data目录下。
misc.img:即“miscelaneous”,包括各种杂项资源。
cache.img:缓冲区,将被挂载到/cache节点中
RockChip映像文件:
boot.img :Android 的初始文件映像,负责初始化并加载 system 分区。
kernel.img :内核映像。
misc.img :misc 分区映像,负责启动模式切换和急救模式的参数传递。
parameter.txt :emmc的分区信息。
recovery.img :急救模式映像。
resource.img :资源映像,内含开机图片和内核的设备树信息。
system.img :Android 的 system 分区映像,ext4 文件系统格式。
trust.img :休眠唤醒相关的文件。
RK3399MiniLoaderAll_V1.05.bin :Loader文件,引导烧录系统。
uboot.img :uboot文件,引导linux系统也就是kernel.img。也就是俗称的bootloader。
七、OTA系统升级
先生成system.img。
需要进入recovery模式。
八、Android系统的反编译:
反编译过程按照目标的不同分为如下两类:
APK应用程序包的反编译。
Android系统包(如framework)的反编译。
Android编译系统
一、MakeFile 入门
是一种规则的执行者,编译过程的“规划者”。
二、编译系统
MakeFile是一个依赖树,需要一点点摸清楚。
make 的工作原理如下:
A、书写Makefile时要注意规则,注意target的摆放顺序。
B、make指令会对makefile里的内容进行解析即:
1> 变量 赋值、环境监测等初始化操作。
2> 按照规则生成所有依赖树。
3> 根据用户选择的依赖树,从叶到根逐步生成目标文件。
main.mk的解析:有一大半内容是为了完成以下几点:
对 编译环境进行监测 。
进行必要的前期处理,比如 清理,部分工具的安装。
引用其他MakeFile文件。
设置全局变量,这些全局变量决定了编译的具体实现过程。
各种函数的实现。
droidcore 负责生成系统所需的所有可运行程序包,包括system.img,boot.img,recovery.img。
Android.mk文件说明:此文件随处可见,保守估计有一千个以上。
理解一个程序很重要的前提就是读懂它的Makefile。
要理解makefile的语法规则(以后慢慢学)。
Android 原理
操作系统基础
一、计算机体系结构
冯诺依曼:数据和程序指令在一起。
哈佛结构:数据和程序指令分开存放。
二、操作系统:
计算机操作系统是负责管理系统硬件,并为上层应用提供稳定编程接口和人机交互界面的软件集合。 即管理硬件与抽象。
三、进程间通信的经典实现
进程间可以通过访问共享内存的方式进行通信。
通过管道,读写分开。
Android采用的Binder机制,跟linux本身的IPC机制,如,管道、消息队列、内存共享、套接字、信号量、信号,都是IPC(Inter-process commuication);
在Andorid N(android 7.0)上,依然会采用Binder机制(基于客户端 client 和服务端 Server)的架构。
Binder机制,是Android系统上层进程通信的不二选择。
四、操作系统的内存管理基础
需要理解一下几个核心:
虚拟内存
内存分配与回收
内存保护
虚拟内存:把硬盘划分一部分出来做内存。
内存保护:防止非法访问。
内存分配与回收:
智能指针的使用。
五、JNI:是一种运行于JVM(JAVA虚拟机)的JAVA程序,去调用C++/C的编程框架
java本地函数的实现:主要是加上native的声明。
通过JNI编译生成动态链接库,就可以调用C++/C了。
同样,通过JNI,C++/C也可以调用JAVA程序。
六、Android 学习的两大主线
主线:操作系统的体系结构、硬件组成。
辅线:在主线的基础上, 以Android系统的五层框架为辅,逐一解析各层框架中的重要元素,或 拾级而上,或深入浅出,直至问题的根源。
Android系统的进程管理
Android的四大组件其实只是“application”的零件。
APK的运行逻辑。
进程间通信—Binder机制
两个不同的进程是没有办法通过内存地址访问到对方的内部函数或者变量的。 这时候就需要Binder机制了。 有了Binder,Android系统中的形形色色的进程与组件才能地统一成有机的一体。
Binder 驱动->路由器
Service Manager->DNS
Binder Client -> 客户端
Binder Server -> 服务器
一、 Binder的本质其实就是一个进程希望与另一个进程进行互访。
二、 智能指针的设计理念:
使用智能指针是为了,指针没有初始化、new了对象以后没有及时delete、野指针等。
初始化智能指针时置空,然后增加引用计数的功能。而且,引用计数是由被引用的对象拥有,那么在释放时,就是“自己说了算了”。
强指针 SP—StrongPointer
2017年农历年前的完成情况,年后的待续。。。。。。
最后
以上就是包容身影为你收集整理的Android开发学习笔记(一)的全部内容,希望文章能够帮你解决Android开发学习笔记(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复