对于NDK开发学习已经完结,并且成功的做出相应的案例,银行卡/身份证卡号识别,现在呢,伟大的学习路程又要开始了,接下来就是要学习系统源码framework相关的知识。(只做个人学习总结,学过就留点痕迹~~,不做长篇大论,谢谢 ^_^ )

对于android源码学习,最开始肯定要了解以下android系统是怎么启动的,这是对android系统启动流程学习的个人总结,第一次学习源码还是要有个辅助 比如:

  1. 源码系列的书
  2. 源码系列的博客
  3. 相关视频讲解

选择一个学习方式,让我们第一次学习不用像个无头苍蝇一样乱撞,不知从何处学起。

我个人是根据书籍来学习的推荐大家: android进阶xxx  https://pan.baidu.com/s/1li1xj_XUDlpzAi4t79q3lA   提取码: dft9

对于android系统启动还是要有点c/c++基础的,我只做总结,需要详细学习了解的,可以去根据书籍来学习。

学习流程:

  1. 首先跟着书籍走一篇,把某整个模块的流程摸清楚
  2. 在有了方向和大体流程,抛开书籍,自己根据源码网站,再多看几篇
  3. 一定要记住 源码不是看 一篇 两篇 就能懂得 时刻来安慰自己,生怕自己会放弃 ^_^

其实源码在网页上看 也听方便的,可以按住ctrl键去查看索引的,看起来也是挺方便。推荐网站:http://androidxref.com/

根据自己情况去选择源码的版本从 1.6 - xxx 都有。 

 

系统启动流程总结

注释:

[*1] init.rc 文件是一个android初始化语言脚本(android init language),里面保存了service的命令:格式 service + service name + service path + 属性。[*2] 调用init.cpp的main方法创建启动所需要的文件夹和挂载文件,解析init.rc文件,得到启动service的名字/路径/属性等。利用ServiceParser解析service初始化脚本。通过解析init.rc文件的service的脚本(根据class_start main)这句脚本运行do_class_start()-> startifnotdiable() -> service.cpp的start()方法[*3] AndroidRunTime.start ("com.android.internal.os.Zygoteinit", args, zygote);传递java层的Zygoteinit的包名到AndroidRunTime中。[*4] 1.启动虚拟机,2.为虚拟机注册JNI方法,3.利用JNI方法把com.android.internal.os.Zygoteinit 转化-> com/android/internal/os/Zygoteinit并且查找Zygoteinit类并调用Zygoteinit的main方法(这样 Zygote 就从 Native 层进入了 Java 框架层)。根据路径找到jclass,然后根据方法签名利用jni调用main方法。[*5] 等待SystemServer的进程创建完成之后,调用socket的 runSelectLoop(abiList)方法循环等待AMS请求来创建新的应用进程。[*6] 配置SystemServer的参数,handleSystemServiceprocess() -> 创建pathclassloader 反射调用SystemServer的main方法[*7] 调用Looper.prepareMainLooper()创建Looper消息,加载library so,创建system context -> 创建systemservicemanager -> 通过反射创建所有的service,启动引导/核心/其他 服务,

 

更多相关文章

  1. Android(安卓)应用程序开关GPS
  2. android 实现listview动态加载列表项
  3. 调用onSaveInstanceState(Bundle)保存数据的注意事项
  4. Android(安卓)IntentService源码分析
  5. Android(安卓)启动流程
  6. Adapter 要从源头开始适配
  7. Android读写XML(中)
  8. Android(安卓)CountDownTimer 倒计时器的简单使用
  9. Android获取其他包的Context实例,然后调用它的方法

随机推荐

  1. 高级 Android 开发工程师-人工智能
  2. Android 匿名共享内存C接口分析
  3. android Lru图片缓存管理方案
  4. Android 开发笔记(1)——Android SDK下载
  5. Android的性能优化方法
  6. Android数据库操作--greenDAO的入门使用
  7. Android使用KeyStore对数据进行加密的示
  8. Android开发之接收系统广播消息
  9. Android教学大纲(知识体系结构)
  10. Android中的网络管理源码分析--netd