android告别篇-对于源码我的一些看法

简介: 1.背景         即将结束在sony移动的实习了,在最后的日子有一些伤感有一些感触,对于android这个倾注一年心血的技术有太多话要说。感谢sony移动的各位大牛们给我这个机会,让我彻彻底底的看清了android的本质。没有这次工作经历,我对android的印象可能会一直停留在sdk层。这一年陆陆续续的写关于android方面的博客,算上这一篇应该正好20篇。从最初的介绍一些小

1.背景

        即将结束在sony移动的实习了,在最后的日子有一些伤感有一些感触,对于android这个倾注一年心血的技术有太多话要说。感谢sony移动的各位大牛们给我这个机会,让我彻彻底底的看清了android的本质。没有这次工作经历,我对android的印象可能会一直停留在sdk层。这一年陆陆续续的写关于android方面的博客,算上这一篇应该正好20篇。从最初的介绍一些小控件的使用,到现在写一些简单的源码操作,是时候写一篇总结了。。。

2.需要的资料   

      胡乱扯一下学习android源码所需要的便利条件吧。
    (1)多套android源码
       因为android系统是开源的,所以源码都是比较容易获得的。我这里要说的是我们在学习源码的时候不要光盯着最新版本或是跟我们手机适配的版本来学习。看看以前的版本的源码,我们就知道android的源码的进化过程,在这之中,更可以体会到google的严谨。
       举一个源码进化的例子。在4.2之前的版本,surfaceview的功能都是写在surfaceview这一个类中的,但是在之后的版本对于surfaceview的操作都专门写了一个新的类-surfaceControl。

    (2)linux操作系统
        如果在windows下搞android源码是及其可怕的。因为我们在生成sdk或是手机系统的时候要用到make,mm等指令。。源码中每层的makefile文件将零散的类连接在一起,而这些操作都需要在linux环境下完成。

    (3)opengrok
        不懂的可以google一下,这个软件让你查看源码更方便,上万的文件,总不能一个文件夹一个文件夹找吧。。上个图

                                 2-1 opengrok视图
           
     (4)刷机工具以及一部可刷的root手机
        最低要求是有root权限。因为操作系统级的app这是必须的,而且不root的话也不能用adb shell。

3.adb shell

          搞源码一定会用到的,这个是sdk中自带的google提供的一个操作手机内部资源的工具。具体能使先很多功能,像是抓取log,push/pull一些东西,增加一些service等。有兴趣可以看看这个【android-tips】adb 常用命令汇总(持续更新中)


4.android系统的层次以及之间的关系

    

                                                     4-1   android源码结构

            

       这张图已经看得很清楚了,在源码中有三层:linux kernel(c语言和汇编),native函数(c和c++),framework(java)。

             linux-kernel我没涉及过,不知道怎么改。。一般的操作主要是集中在native层和framework层。

           

        先上一张源码内部文件的组成图。

                                                           4-2 源码文件夹结构

             

       framework层的函数就是在图中的frameworks文件夹中。里面就是平时我们在代码中import的那些包。比如说我们常用的所有view类,都在这里

                                                             4-3 view的位置

                    

                 framework层的大多功能都是从native的函数中来的。只是在framework层做成sdk中可以直接调用的接口,native层函数和framework层函数的桥梁就是jni。


5.ndk

            很多做android的人都知道ndk,ndk的功能可以用一句话概括,就是“越过framework层直接调用native函数”。具体的安装和用法可以参见。android图文介绍NDK安装及简单jni demon的实现


6.关于hook

             hook就是源码钩子,很多人听说过但没有用过。我尝试过搞过一个hook,hook其实就是提取一些源码中没有提供接口的功能。比如说当系统渲染界面的显示的时候,google没有提供方法来得知每个字应该画到哪,我们要想知道每个字的坐标,就要去看它的渲染文件,然后在里面加上自己的方法然后把需要的信息提取出来。



写到最后:对于android系统的理解,我还停留到比较肤浅的水平。不过对于系统再熟,也只是了解一个系统,最重要的是明白它的结构的原理,知道它处理数据的算法,说白了就是设计模式和算法。写给曾经那个停留在app层拿着android入门摆弄各种控件的自己,you are still  too naive too simple!


目录
相关文章
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
【7月更文挑战第28天】在Android开发中,确保UI流畅性至关重要。多线程与异步编程技术可将耗时操作移至后台,避免阻塞主线程。我们通常采用`Thread`类、`Handler`与`Looper`、`AsyncTask`及`ExecutorService`等进行多线程编程。
167 2
|
开发工具 Android开发 git
Windows下载android2.2完整源码(转)
Windows下载android2.2完整源码(转)
195 3
|
6月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
386 2
|
7月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
1149 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
Java 开发工具 Android开发
如何在Eclipse中查看Android源码或者第三方组件包源码(转)
如何在Eclipse中查看Android源码或者第三方组件包源码(转)
160 4
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
543 1
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
2416 1
|
API 开发工具 Android开发
Android源码下载
Android源码下载
2135 0
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
2233 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82

热门文章

最新文章