FW开发
文章平均质量分 89
Framework开发基础知识、执行命令及常用工具介绍,帮助小白了解Framework开发流程。
优惠券已抵扣
余额抵扣
还需支付
¥59.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
c小旭
Android Framework车载智能座舱开发工程师
展开
-
Ubuntu(乌班图)常用命令
1)切换到上级目录:cd ..2)进入指定(xx)文件夹:cd xx3)进入上次所在目录:cd -4)进入主目录:cd;cd ~;原创 2021-11-09 11:19:31 · 21482 阅读 · 8 评论 -
Gerrit 相关使用教程
根目录执行:repo sync筛选更新:repo sync -c --no-tags -d -j8一般 repo sync 都会加上 -j4、-j8,代表最多可以多少个线程同时执行。主要根据个人电脑配置自行选择(建议 8G 内存使用 -j4,16G 内存使用 -j8)。原创 2022-04-07 09:55:37 · 10170 阅读 · 1 评论 -
通过adb命令安装卸载apk
1、正常安装APK2、覆盖安装APK2、安装测试APK3、组合使用4、安装低版本APK5、安装并授予所有运行时权限6、锁定该应用程序7、安装到sd卡。原创 2021-11-18 14:46:15 · 38835 阅读 · 17 评论 -
车载设备开发中串口工具使用
如果使用配置 minicom 每次启动终端都需要重新修改的情况,可以直接执行上面命令进入指定串口。选择 Serial port setup,按“A”更改串口名称位 /dev/ttyUSB0,保存即可,但是有时存在保存不成功,每次进入都需要重新保存的情况。通常情况下使用上面命令就可以直接进入串口,但有时会出现找不到 /dev/ttyUSB0 的情况,这时就需要对其进行配置。由于开发需要进入 ttyUSB0 串口,但 sudo minicom 找不到,这时可以配置 minicom。O键:打开3中的配置选项。原创 2022-04-29 12:13:17 · 1274 阅读 · 0 评论 -
Android AMS——概述(一)
1、Activity生命周期管理Activity 生命周期是指在 Android 应用中,一个 Activity 从创建到销毁的整个过程。了解 Activity 生命周期非常重要,因为它涉及到应用的状态变化、内存管理以及用户交互等方面。onCreate()当 Activity 第一次创建时,系统会调用onCreate()方法。在这个阶段,可以进行一些初始化工作,例如设置布局、绑定数据等。一般来说,该方法执行完后,Activity 会进入 "Created" 状态。onStart()原创 2023-09-22 15:33:40 · 1381 阅读 · 0 评论 -
Android实战——日志等级设置
仔细观察可能会发现,其实上面的例子中,Java 代码与 C++ 代码设置的属性其实并不相同。log.tag:这个标签是应用程序在记录日志时使用的,用于标识日志消息的来源。每个日志消息都可以有一个与之关联的标签,这有助于开发者在查看日志时区分不同的消息来源。同时决定了该标签对应的日志消息的详细程度(如DEBUG、INFO、WARN、ERROR等)。:如果 persist.log.tag 是一个有效的系统属性,它用于控制特定标签的系统级别日志级别。这种设置通常是持久的,即使设备重启也会保留。原创 2024-05-23 09:16:59 · 885 阅读 · 0 评论 -
Android实战——设置音量默认值
对于车机开发来说,为了方便维护我们也可以定义一套自定义音量值的 xml 文件。原创 2023-12-11 15:16:43 · 221 阅读 · 0 评论 -
Android实战——白天黑夜模式设置
白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。原创 2023-09-15 19:08:39 · 2444 阅读 · 0 评论 -
Android实战——设备关机和重启分析
设备关机和重启分析原创 2023-09-13 18:03:17 · 839 阅读 · 0 评论 -
Android实战——原生内置应用配置
BasicSmsReceiver:基本的短信接收器示例,用于演示如何接收和处理收到的短信。Bluetooth:蓝牙功能的实现,用于管理、配置和控制设备的蓝牙模块。Browser2:浏览器应用,用于浏览网页和进行网页交互,提供基本的浏览功能。Calendar:日历应用,用于管理和展示时间、日期和预定事件。Camera2:相机应用,用于拍摄照片和录制视频。Car:车载娱乐系统(车载应用)。用于构建 Android 操作系统中的汽车应用。原创 2023-09-12 14:51:55 · 516 阅读 · 0 评论 -
Android实战——新增设备支持语言
Android 系统默认支持多个国家语言。实现对整个android系统的语言设置,我们可以通过系统提供的 LocalePicker 里的方法来实现。原创 2024-05-06 13:43:40 · 368 阅读 · 1 评论 -
Android实战——系统默认语言修改
这里我们主要针对可以修改成功的方案进行分析。原创 2023-09-05 16:41:05 · 1321 阅读 · 1 评论 -
Android so库开发——Swig工具使用(五)
SWIG 是一种软件开发工具,它将 C 和 C++ 编写的程序与各种高级编程语言连接起来。这里我们用它来将 C/C++ 转换成 Java。原创 2023-02-01 17:44:33 · 976 阅读 · 0 评论 -
Android so库开发——addr2line查看so异常信息(四)
在NDK开发中经常会出现应用Crash的情况,而JNI层的报错信息,不像Java层报错信息那样可以直接在日志中看到错误的行数,JNI层中出现的错误直接看根本定位不到错误的位置。通常来说,JNI报的基本都是堆栈信息,需要NDK的一些工具进行地址转换,转换后即可看到错误的位置。addr2line就是这些地址转换的工具。原创 2023-01-13 10:36:01 · 2814 阅读 · 0 评论 -
Android so库开发——源码中调用so库(三)
在 vendor/xx/packages/services/ 下创建 SoTest 项目,内部结构如下。原创 2023-01-10 17:23:13 · 1837 阅读 · 0 评论 -
Android so库开发——Android Studio调用so库(二)
在中已经创建了自己的so库,这是一个JNI规范的so库,可以直接将so库放到libs中,并按照上面文章中MainActivity中的调用方法使用。1、build.gradle(app)配置2、加载so库中方法在Sudio中方法名虽然显示红色,但不影响使用。3、Activity中调用方法。原创 2023-01-06 17:37:48 · 6759 阅读 · 4 评论 -
Android so库开发——Android Studio生成so库(一)
1)新建项目选择最下面的 Native C++ 下一步即可2)填写项目信息3)选择C++版本可以直接选择默认。原创 2023-01-06 14:07:58 · 4544 阅读 · 0 评论 -
Android Handler——阻塞与唤醒机制(二)
epoll 高效的原因使用 mmap 减少复制开销、采用回调机制减少耗时。wait 返回只返回了就绪的文件描述符数量,而非文件描述符,也就是说还是要遍历寻找,例如遍历 events 看看都有哪些就绪事件,是读的还是写的,然后接着去真正调用 IO,即阻塞返回了,说明有就绪事件,然后遍历 events,找到自己关注的事件处理。原创 2023-02-17 13:47:45 · 1151 阅读 · 0 评论 -
Android Handler——基础简介(一)
Handler 是一套 Android 的消息传递机制,Handler 主要用于同进程的线程间通信。而Binder/Socket用于进程间通信。线程间通信: Android 应用通常具有主线程(也称为 UI 线程)和后台线程。Handler 允许您从后台线程向主线程发送消息,从而在更新 UI 时避免出现线程安全问题。消息队列: Handler 使用消息队列来存储消息。每个消息都可以包含一个数据包,用于在线程之间传递信息。原创 2022-11-25 16:44:26 · 135 阅读 · 0 评论 -
Android Binder——架构介绍(二)
在 Android 系统中,在各个层次都有和 Binder 有关的实现。其中主要的 Binder 库由本地原生代码实现。Binder 库核心部分的各个头文件结构如下所示:Parcel.h:定义类 Parcel,为在 IPC 中传输的数据定义容器。IBinder.h:定义类 IBinder,是 Binder 对象的抽象接口。Binder.h:定义类 BBinder 和 BpRefBase 分别为 IBinder 类的继承者和服务器端使用的基类。原创 2022-07-15 18:03:43 · 1957 阅读 · 0 评论 -
Android Binder——基础简介(一)
Binder 是 Android 系统中的一种进程间通信(IPC)机制,用于实现不同进程之间的通信和数据传递。它是一种高效、安全和稳定的机制,被广泛应用于 Android 系统中的各种组件和服务,包括 Activity、Service、ContentProvider 等。原创 2022-10-21 17:34:12 · 217 阅读 · 0 评论 -
U盘媒体文件扫描——本地扫描(三)
使用Android MediaScanner扫描U盘,1000首歌大概需要2分钟,那么如何1秒内识别出第一首歌,2秒要识别1000首歌。通过前面分析,无论对 MediaScanner 如何优化修改,还是无法满足2秒扫描1000首歌的需求,于是就有了本篇文章。原创 2022-08-04 16:56:00 · 420 阅读 · 0 评论 -
U盘媒体文件扫描——识别速度优化(二)
测试U盘资源:音频文件1051,总文件数3500左右。未优化前,所有歌曲扫描完成全部显示出来,2分钟左右。原创 2022-06-15 13:51:47 · 403 阅读 · 0 评论 -
U盘媒体文件扫描——源码流程解析(一)
MediaScannerReceiver 接收外部发来的的扫描请求,并通过 startService 的方式启动 MediaScannerService。MediaScannerService 主线程接收到 MediaScannerReceiver 的扫描请求,然后投递给工作线程去处理。工作线程做一些前期处理工作后(例如向系统广播发送扫描开始的消息),就创建 MediaScanner 来处理扫描目标。MediaScanner 扫描结束后,工作线程在做一些后期数据库处理,然后向系统发送扫描完毕的广播。原创 2022-05-26 15:14:57 · 1175 阅读 · 0 评论 -
Framework工具——开发中常用工具软件
在 Win 中我们经常使用 Notepad++,在乌班图中使用 notepadqq 进行替代。Synergy 是一款可让多台电脑共享一个鼠标与键盘的软件,用户可借助 Synergy 操作一个鼠标与键盘控制多个电脑。开发中经常需要对比两个本地文件的差异,在 Ubuntu 上可以使用 meld 软件。在车机开发中,经常只有车机没有屏幕的情况,这时我们就需要使用到投屏软件:scrcpy。上面是对比本地文件使用,gitk 可以用来对比本地文件与 gerrit 上的差异。缓存的目录,如果不设置,则默认缓存到。原创 2023-03-08 11:37:55 · 22 阅读 · 0 评论 -
Framework工具——EA画图
EA 是一个著名的企业架构(Enterprise Architecture)工具,用于绘制和管理企业的架构图和过程模型。该工具提供了多种功能,包括建立业务流程图、数据流图、组织结构图、应用架构图等。EA工具可帮助企业进行战略规划、业务流程改进和系统开发等活动。原创 2023-08-08 14:02:40 · 2421 阅读 · 0 评论 -
Framework基础——Zygote初始化(六)
所有的进程都由 Zygote 创建,Zygote 主要用来孵化 system_server 进程和应用程序进程。在孵化出第一个进程 system_server 后通过 runSelectLoop 等待并处理消息,分裂应用程序进程仍由 system_server 控制,等待 AMS 给他发消息(告诉 zygote 创建进程),如 app 启动时创建子进程。在 ZygoteInit.main 函数中进入 Java 层,主要有4个关键步骤:1)预加载类和资源——preload()原创 2024-03-20 08:57:54 · 294 阅读 · 0 评论 -
Framework基础——Zygote进程介绍(五)
从 AndroidRuntime 到 ZygoteInit,主要分为3大过程:创建虚拟机——startVm():调用JNI虚拟机创建函数;注册 JNI 函数——startReg():前面已经创建虚拟机,这里给这个虚拟机注册一些 JNI 函数(后面 Java 中用到的函数是 native 实现,这里需要提前注册这些函数);原创 2023-08-22 11:22:41 · 70 阅读 · 0 评论 -
Framework基础——系统初始化(四)
上一篇介绍了 init 进程的启动,这里我们详细分析以下 init 进程主要初始化了那些内容。这里我们主要分析 Android 12 的源码。原创 2023-07-26 17:27:39 · 172 阅读 · 0 评论 -
Framework基础——init进程(三)
可以看到,Android 12 主要是是将 Android 9.0 的 init.cpp 中 main() 函数不同功能进行了拆分,分别完成初始化工作。原创 2023-07-25 16:28:32 · 102 阅读 · 0 评论 -
Framework基础——系统和APP启动流程(二)
init 进程由 Linux 内核启动,然后 init 进程负责:挂载文件:识别各类文件,相当于解析硬盘设置selinux -- 安全策略启动属性服务解析init.rc执行脚本中的Linux命令启动进程循环处理脚本 -- *包括启动 zygote 和 ServiceManager(系统服务binder的管家)进程守护系统关键进程:如蓝牙、铃声、拨打电话、安装应用等进程名结尾带“d”的系统进程。原创 2022-09-22 17:32:45 · 149 阅读 · 0 评论 -
Framework基础——简介(一)
上面说了一堆的 Framework 的概念介绍,对出初学者来说啥用没用,还是不理解 Framework 开发到底要干什么。说的直白一些,对于 APP 开发者来说,我们都知道 APP 是运行在 Android 系统中,Framework 其实就是修改 Android 系统进行定制。例如,APP 打开蓝牙调用 openBt() 方法,打开 WIFI 调用 openWifi() 方法。我们的定制机要实现调用一个方法就可以同时打开蓝牙和 Wifi。openBt();openWifi();原创 2023-06-19 18:04:17 · 592 阅读 · 0 评论