注1:Android7简介
今天给各位分享注1:Android7简介的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
第:章
《深入理解Android内核设计思想(第2版)》
《Android系统源代码情景分析》
前言
Android为何诞生在硅谷
斯坦福大学人才辈出;
交通环境便利,海、陆、空与外界联系良好;
鼓励创新,拥有完善的专利保护机制;
完整、成熟的风险投资体系可以容忍较高的失败率;
版本2和版本1有什么区别
基于Anroid N版本(nougat,意为牛轧糖),也就是Android 7.x版本。市场上太多的Android 书籍都是基于2.x 或4.x 的,我不太喜欢旧版本。
第1章Android系统简介
Android系统有什么特点
开放可扩展、高度自由、可定制;
分层架构合理,整个软件栈组织清晰,分工明确。是一个优秀的开源项目,值得所有程序员长期学习,无论是C/C++/JAVA程序员。
简单易用且功能强大的SDK;
不断完善交互界面,追求用户体验;
生态系统正在逐步完善,但Android平台上软件的盈利能力似乎远不如IOS平台。
Android的免费开源降低了手机开发者的进入门槛,导致Android手机开发者供给良莠不齐。
运行速度比IOS慢,谷歌正在不断提高运行速度。
兼容性问题让Android APP开发者头疼不已。 Android手机型号太多,屏幕尺寸、分辨率各异,开发者难以适应。目前,谷歌还没有很好的解决方案。
Android系统5层框架
从下到上它们是:
内核层(Linux+专用驱动):在Linux内核的基础上,添加了Google编写的Binder和共享内存驱动。
硬件抽象层(简称HAL):硬件厂商不愿意将自己的硬件驱动放到Linux中,因此Android创建了HAL层,可以让硬件厂商将硬件的核心控制逻辑保存在HAL中并允许其关闭源码(即只提供.so库文件,不提供.c文件)。 Linux内核驱动中只提供了最小粒度的操作函数,例如读写寄存器。正是这种旁观的刺激行为,保护了硬件厂商的利益,让他们愿意为Android系统改进硬件驱动。
系统运行时库层(Android Runtime,ART):大部分采用C/C++实现。可以简称为“C库层”。它包含了很多成熟的开源项目:webkit、opengl、sqlite等,我们学习Android的时候应该只需要了解Android是如何使用这些C库的,而这些C库是如何实现的与我们关系不大。
应用框架层: 最好叫“Java库层”。它为上层应用提供API接口,同时也包含了很多系统级服务流程的实现。
应用层:各种系统原生应用和第三方应用。我个人怀疑CPU厂商和手机厂商主要定制这一层。
第二章Android源码下载与编译
参考:
https://developer.android.com/guide/platform/?hl=zh-cn
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
http://wiki.Friendlyarm.com/wiki/index.php/NanoPC-T4/en
https://developer.android.com/studio/releases/platforms
如何管理庞大的Android源码?
Android源代码由许多开源项目组成。对于Google来说,需要长期关注所有Android相关的开源项目。用git管理这么多开源项目太困难了,所以Google用Python写了一个脚本工具repo。对git多加了一层封装,使用这个repo工具可以达到Android中多个子项目正常管理的目的。本质上,repo仍然调用git命令,因此repo的操作与git非常相似。如果你对git不熟悉,建议阅读《pro git》这本书。它有中文版,里面的内容相当简单实用。有了git 的基础,使用repo 会容易很多。让我们简单看一下如何使用该存储库。
上面的命令基本上就够了。即使只是用于个人学习,也可以将Android源代码初始化为单独的git项目。使用repo只是为了方便同步获取最新的Android源码。
嵌入式物联网确实有很多东西需要学习。不要学错路线和内容,导致你的薪资水涨船高!
点此找助手0元获取:添加微信获取信息
如何下载Android源代码
如何下载原始Android源代码
从谷歌。。官网下载Android源代码已经很困难了。清华大学做了Android源码的镜像。第:章
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
首先获取仓库:
$curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
$ chmod +x 回购协议
$ mv 存储库/usr/bin/
下载Android源码包最快的方式就是使用初始化包进行初始化,手动下载初始化包:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
30G左右,下载后查看MD5:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar.md5
$ md5sum -c aosp-latest.tar.md5
aosp-latest.tar: 确定
由于所有代码都是从隐藏的.repo 目录中检出的,因此仅保留.repo 目录。下载后,再次解压并repo同步即可得到完整目录。参考如下命令:
如何确定您当前使用的Android 版本
$ cat.repo/manifest.xml | grep 修订版
清单中跟踪的是android-7.0.0_r1,不同步的是android-7.0.0_r1。也可以查看源码确定:
$ cat build/core/version_defaults.mk | $ cat build/core/version_defaults.mk | grep 'PLATFORM_SDK_VERSION:='
平台_SDK_VERSION:=24
第:章
https://developer.android.com/studio/releases/platforms
24是Android7.0。
如何退出特定版本的Android
如何基于真实开发板下载Android源码
如果你不想使用原生Android源码来模拟运行Android,而是想在开发板上体验Android系统,可以参考这篇文章:
http://wiki.Friendlyarm.com/wiki/index.php/NanoPC-T4/en
文中介绍的开发板是NanoPC T4(基于RK3399芯片)。对应的Android7源码保存在gitlab上。 Android7没有使用repo,而是初始化为git项目,放在gitlab上,以提高下载速度。顺便说一句,相应的编译步骤在WiKi中也有。如果您是开发板爱好者,可以关注WiKi网站中的开发板。品种多,性价比好,资料齐全。
如何编译Android
搭建环境
仅考虑在64 位Ubuntu 14.04 LTS 以上版本中编译Android 7。其他版本Android编译所需环境相同。
硬盘上安装了64Bit Ubuntu14.04 LTS或以上版本。 PC硬件性能越高越好。建议使用以上8G内存+256G SSD的配置。 Android源代码非常庞大,所以不要使用虚拟机来编译Android系统。
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils makepython-networkx zip
$ sudo apt-get install flex curl libncurses5-dev libssl-dev zlib1g-devgawk minicom
$ sudo apt-get install openjdk-8-jdk
$ sudo apt-get install exfat-fuse exfat-utils device-tree-compilerliblz4-tool
不同版本的Android需要不同版本的JDK。 Android7需要open-JDK-8.0。选择JDK 版本:
$ update-alternatives --config java
$ update-alternatives --config javac
如何编译原生Android7
$ cd aosp
$ source ./build/envsetup.sh # 导出环境变量
$ Lunch # 查看可选择的编译目标
$ Lunch aosp_arm64-eng #选择编译目标、arm64架构、eng工程师版本
$ make -j4 # 开始编译,先去吃饭吧,大多数机器要等几个小时才能编译Android。
编译错误:
Android 7.0 上默认使用JACK 编译器。在内存较小的机器上编译时可能会出现上述问题。解决方案:
$ 导出JACK_SERVER_VM_ARGUMENTS='-Dfile.encoding=UTF-8-XX:+TieredCompilation -Xmx4g'
$ ./prebuilts/sdk/tools/jack-admin 杀死服务器
$ ./prebuilts/sdk/tools/jack-admin 启动服务器
然后重新执行source/lunch/make命令。编译完成时的提示信息如下:
#### 成功完成(03:54 (mm:ss)) ####
如果不再source/lunch,而是直接make,就不会提示makecompleteduccessful,但实际上是编译成功了。
如何模拟运行原生Android7
使用Android模拟器Emulator来模拟运行。模拟器是Google基于开源项目qemu定制开发的。它使用的核心技术是虚拟化。对于我们来说,可以简单理解为通过虚拟化技术在基于X86的PC上虚拟出基于ARM的手机。我们根本不需要分析Emulator的源码,只要用它来启动Android系统就可以了。编译系统后,执行以下命令启动Android:
效果如下:
使用的核心文件包括:
这5个文件就可以构成一个完整的Android系统。
第二章内容尚未完,待续……
文章链接:https://mp.weixin.qq.com/s/-4JJn_ibmXChgwJx0sRmTg
文章链接:深入理解Android内核设计思想注1:Android7_Download_Compile_Run简介
用户评论
一直在想学习Android开发,感觉这篇文章写的太棒了!对Android 7 的介绍非常清晰,帮我勾勒出了整个框架的结构。要好好收藏起来慢慢消化。
有14位网友表示赞同!
终于找到一篇关于Android内核设计思想的详细笔记!以前一直摸索着开发,对一些底层机制不太了解,这篇笔记真是太棒了,让我更深刻地理解了Android 7 的架构。
有6位网友表示赞同!
说实话,这篇文章对于我这种初学者来说还是比较难懂的。也许可以稍微降低技术门槛,用更直观的语言讲解一下核心概念?
有8位网友表示赞同!
对Android内核设计思想一直很感兴趣,这篇笔记简直是福音!感觉作者对Android 7 的理解非常深入,每个细节都解释得透彻,期待后面的笔记!
有19位网友表示赞同!
我之前也有学习过Android开发,但很少关注内核的设计思想。这篇文章正好填补了我的知识空白,让我对Android 7 的架构有了更全面的了解。
有13位网友表示赞同!
感觉有些地方描述比较抽象,对于没有编程基础的读者来说可能不太容易理解。希望能补充一些针对不同受众的讲解,更加全面.
有16位网友表示赞同!
这篇文章让我对Android 7 的设计思想有了新的认识!原来内核的设计是这样的,以前总是对它感到困惑,现在终于明白了!
有9位网友表示赞同!
很喜欢文章中对"安全性"和"效率"的强调。我认为这是 Android 7 设计的关键点,也是开发者应该关注的地方。希望能够在后续笔记中更详细地探讨这些方面。
有13位网友表示赞同!
作为一名Android开发工程师,这篇文章很有帮助!让我了解到了一些之前不太清楚的内核设计思想,提升了我的开发能力
有5位网友表示赞同!
希望作者能分享更多关于其他Android版本的设计思想,比如 Android 8 或9 的特点和区别!
有14位网友表示赞同!
我对文章中提到的"用户体验优化"非常感兴趣。我想看看具体的实现细节和案例分析是如何提高用户体验!
有5位网友表示赞同!
Android 7 中引入了很多新的功能,这篇文章讲解得很全面,尤其是关于 "app分层管理” 的描述让我受益匪浅!
有18位网友表示赞同!
这篇笔记太棒了,让我想起来当时学习 Android 7 的时候很多疑问终于得到了解答!感谢作者的精彩分享!
有6位网友表示赞同!
文章的图文并茂,非常易于理解。特别是 "系统服务架构” 的讲解,让我对 Android 7 的整体架构有了清晰的认识。
有9位网友表示赞同!
我觉得这段话不太准确,"多进程运行机制"在Android版本中一直都在被使用吧?希望作者能够修改一下
有18位网友表示赞同!
文章对 "多媒体处理" 的描述很简略,希望后续笔记能够更加详细地阐述其原理和特点!
有15位网友表示赞同!
我很喜欢这种深入浅出的讲解方式,让我更容易理解Android内核的设计思想。期待以后能看到更多关于 Android 系统的笔记!
有9位网友表示赞同!
我觉得对"权限管理机制"的描述不够深入,可以讲述一下它是如何与应用交互的?
有20位网友表示赞同!
这篇文章让我意识到学习 Android 开发不仅要掌握开发工具和技能,还得了解内核的设计思想。非常感谢作者的分享!
有7位网友表示赞同!
虽然文章讲解得很棒,但是对于一些技术细节,可能还需要结合代码阅读才能更加理解。
有20位网友表示赞同!