Bill's Blog

人如果没有梦想,跟咸鱼有什么分别

Bill's 2024年计划

"Bill's 2024年计划"

1. 上年总结 每年的总结都上年的计划实现得太少了,感觉一年的时间都浪费了,其实不然,学习总归重要,生活也很值得珍惜,不是吗哈哈。 与其把一大堆目标罗列出来,不如将做过的事情记录下来吧,今年争取多学习并转化为博客吧,去年几乎没有什么输出。 2. 今年进度 1月份: 人人都能用英语 深有启发的学英语方法 (50%) 福尔摩斯探案集(100%) BinanceFutureS...

AAOS Audio学习记录

"AAOS Audio学习记录"

1. 背景 默认的Android Audio在Framework层进行混音后输出到音频设备,而在车载场景,往往需要将不同类型的声音,如系统音,导航音,音乐等通过配置在不同设备中分别输出,这个需求与以往Android Audio的实现有所区别,为了研究AAOS是如何实现这个功能,又是如何对接到AudioFlinger/AudioPolicyService,现对AAOS Audio进行通路学习...

AAOS Audio学习

"AAOS Audio学习"

1. 背景 默认的Android Audio在Framework层进行混音后输出到音频设备,而在车载场景,往往需要将不同类型的声音,如系统音,导航音,音乐等通过配置在不同设备中分别输出,这个需求与以往Android Audio的实现有所区别,为了研究AAOS是如何实现这个功能,又是如何对接到AudioFlinger/AudioPolicyService,现对AAOS Audio进行通路学习...

Audio ALSA编程记录

"Audio ALSA编程记录"

1. 背景 去年一直在做Android的音频开发,接触了不少TinyAlsa的接口调用流程。而最近在调试Linux时,面对Alsa的接口时却一脸懵,因此有必要对这两类进行下总结。本文讨论的所有代码均为Android原生代码,Android Code Search中获取。 2. TinyAlsa TinyAlsa是一个轻量级的 ALSA 替代品,专注于提供一个简单且易于使用的 API,用...

WOTD快速查猜词技巧

"WOTD快速查猜词技巧"

背景 某应用每天都会有猜词WOTD(word of today)的活动,规则是这样的: 给出单词包含的字母个数 一共有6次机会左右进行尝试 如果字母不存在,则显示灰色,如果存在但位置不对,显示黄色,如果位置对了,则显示绿色。 作为茶余饭后的消遣,这个游戏深得我喜爱,但是由于词汇量的欠缺,总是需要借助外界的帮助,如问chatgpt4,但是不知道是否训练方式的原因,我提供的...

C++学习记录

"C++学习记录"

1. 基础知识 1.1 编译工具链 编译工具链是一组协同工作的工具集,用于将源代码编译成可执行程序。在C++编程中,这通常包括编译器、链接器和其他一些工具。这些工具处理源代码,进行编译、链接和其他必要的步骤,以生成可在计算机上运行的软件。 常用的C++编译工具链包括: GNU compiler(gcc/g++) : 广泛使用的开源编译工具链,支持多种语言 clang/cla...

有道笔记更新个人博客

"有道笔记更新个人博客"

1. 背景 从最开始搭建博客,是购买海外服务器和域名,开始时需要将仓库拉到本地,本地写完后push到远程仓库,但是由于费用和网速的问题(遇到问题时,需要登录海外服务器调试,前期还需要配置Nginx服务器),于是在近两年将仓库放在了Github上做管理,只需要将域名修改为个人域名即可。但是随着时间的碎片化,没有那么多时间去写长篇的博客,并且写完还是需要像提代码的方式更新博客,于是寻求能否借助...

v4l2-ctl使用快查

"用于调试快速查看指令"

v4l2-ctl使用快查 下载地址 v4l2-utils下载地址 https://github.com/gjasny/v4l-utils 1. 列出所有可用设备 1 v4l2-ctl --list-devices 2. 查看设备支持的格式: 1 v4l2-ctl --list-formats 3. 指定设备的预览支持格式 1 v4l2-ctl --list-format...

LeetCode习题集

"记录LeetCode的刷题"

Easy 1. Two Sum 9. Palindrome Number 13. Roman to Integer 14. Longest Common Prefix 20. Valid Parentheses 21. Merge Two Sorted Lists 26. Remove Duplicates from Sorted Array 27. Re...

Android Codec2框架分析

"Android12后Codec2替代OMX"

[toc] 1. 概述 Codec2.0在Android12需要进行对接,本文以AOSP源码分析,简单分析其运行逻辑,具体代码可参考https://cs.android.com/进行查阅。Codec2的Android架构可如下图所示: 其中Framework层要使用Codec2可通过MediaCodec或者MediaPlayer(使用NuPlayer),Omx在Android12后...

MacOS环境搭建

"记录一些个人MacOS环境搭建记录"

由于需要更换了MacBook Air的SSD(256G), 换上了2T的SSD,现在记录下必要的环境安装和设置,万一以后还换苹果电脑呢?😂😂😂 1. HomeBrew 直接使用官网明令安装,提示如下: 1 2 3 bill@192 ~ % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst...

FFmpeg Experience

"记录一些关于FFmpeg有用的指令"

1. 视频 1.1 分辨率相关 1.1.1 分辨率转换 1.1.2 分辨率拼接 1.2 播放码流 1.3 播放YUV 2. 图片 2.1 格式转换 3. 查看视频包信息 4. 查看视...

Jenkins搭建CTS测试环境

"一种自动化测试CTS的方法"

1. 背景 2. Jenkins 3. 环境搭建 4. 测试脚本示例 5. 邮件通知 1. 背景 最近负责CTS测试工作,但是经常需要手动去测,且由于系统,网络等原因,测试过程中偶会发生异常,然后需要进行重测。于是想到Jenkins可以代替完成这一系列的自动化工作。 2. Jenkins Jenkins的Demo在官网Jenkins可以很方便查阅到,较...

Android Debug总结

"记录一些Android平时使用的工具和调试手段"

1. logcat 2. gdb 3. addr2line 4. systrace 4.1 保存trace到文件 5. 网络ADB 1. logcat 1 2 3 4 5 6 7 8 9 10 logcat -c //清除日志 logcat -b [main|system|events] //选择不同的缓冲区 logc...

C++ Core Guidelines学习

"cpp/c"

1. 背景 2. Philosophy 2.1 P.1: Express ideas directly in code 2.2 P.2: Write in ISO Standard C++ 2.3 P.3: Express intent 2.4 P.4: Ideally, a program should be stat...

Camera API与HAL版本关系

"Camera API怎么和HAL层对应?"

1. 概述 2. Camera API简介 2.1 Camera API1 2.1.1 API1拍照须知 2.1.2 API1录像须知 2.1.3 Camera API1公共方法 2.2 Camera API2 ...

Camera2应用分析

"Camera2 Apk"

1. 概述 2. Camera2初始化 2.1 CameraActivity简述 2.2 Profiler分析器 2.3 CameraActivity启动流程 2.3.1 CamerActivity.onCreateTasks 2.3.2 Camera设备open流程 ...

Android 10.0 HDMI-CEC服务分析

"HdmiControService"

1. 背景 2. 总体概述 2.1 设计架构 2.2 源码结构 3. HDMI-CEC 3.1 HdmiControlService 3.2 HdmiController 3.3 单键休眠 3.3.1 SourceToSink ...

Android10.0电源框架源码分析

"BatteryService And Healthd学习"

1.背景 2.总体概述 2.1 源码结构 2.2 系统框架 3. BatteryService 3.1 BatteryService的启动 3.1.1 SystemServer启动BatteryService 3.1.2 BatteryServi...

Scheme V2 App安装报错

"Apk安装问题"

1.问题现象 当第三方Apk经过Android.mk后编译进系统后,在预安装过程中会出现如下的错误提示: 1 2 3 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates fr om /data/app/vmdl325607430.tmp/base.apk: META-INF/CERT....

Audio初始化流程简析

"Audio"

1. 背景 2. init启动AudioServer进程 3. AudioFlinger::instantiate 4. AudioPolicyService::instantiate 4.1 AudioPolicyService::onFirstRef 4.2 AudioPolicyManager::loadConfig ...

实用Shell技术整理

"A shell script is a computer program designed to be run by the Unix shell, a command-line interpreter"

1. Shell 循环 1.1 类c语言 1.2 in使用 1.3 seq使用 2. 提供选择 3. BASH_SOURCE 4. print red 5. Extract file Name 6. 比较字符(不考虑大小写) 7. 远程登录并执行命令 8.修改文件夹内所有文件 9.替换当前...

Android Binder驱动简析

"Android Binder"

1. Binder 数据结构 2. Binder操作 2.1 binder_init 2.1.1 binder_init 2.1.2 init_binder_device 2.2 binder_open 2.3 binder_mmap ...

Android Binder驱动数据结构图解

"Android Binder"

1.背景 2. Binder驱动数据结构 2.1 binder_proc 2.2 binder_thread 2.3 binder_ref 2.4 binder_node 2.5 binder_transaction 2.6 binder_buffer 2.7 binder_write...

Android Parcel读写流程简析

"Android Parcel"

1. 背景 2. Framework层的Parcel 2.1 Parcel写操作流程 2.2 Parcel读操作流程 3. Parcel小结 1. 背景 Parcel在Binder通信被应用广泛,不仅仅可以传输Primitives数据,也可以传输继承/实现Parcelable接口的对象。本文将以其写/读数据流程,分...

Android 强弱指针简析

"Android Smart Pointer Analysis"

1. 背景 2. LightRefBase 轻量级的引用计数 3. RefBase 目标对象基类 4. wp 弱指针 5. sp 强指针 1. 背景 Android中的Native层代码是使用C++来实现的,一旦涉及C++,就意味着不像Java可以实现自动的垃圾回收机制,不需要操心内存方面的问题。尤其是C++中的指针问题,一旦忘记回收,就可能导致内存泄露问...

C++/C 常见技术点笔记

1. 背景 2. C++类型转换 2.1 static_cast 2.2 dynamic_cast 2.3 const_cast 2.4 reinterpret_cast 3. 常用类型转换 3.1 string与char *转换 1. 背景 受到之前整...

Android Handler线程关系

"handler thread"

1. 背景 2. Thread->Main Thread 3. Main Thread->Thread 4. Thread->Thread 1. 背景 近日在复习Handler的过程中,萌生出写demo的想法,于是把以前的测试又拿出来重新修改了下,旨在弄清楚Handler与主次线程的关系。 测试使用的代码在地址HandlerTest Dem...

Android 匿名内存分析

"anoymous shared memory"

1. 概述 2. AShmem驱动 2.1 ashmem_init 2.2 ashmem_open 2.3 ashmem_mmap 3. AShmem Android实例 3.1 AudioFlinger知识准备 3.2 AudioTrack知识准备 3.3 Audi...

Android P lmkd简析

"low memory killer"

1. 概述 1.1 配置用户空间lmkd 2. lmkd进程 2.1 lmkd的启动 2.2 lmkd的main方法 2.2.1.lmkd属性 2.2.2 mlockall 2.2.3 sched_setscheduler ...

Android P编译简析[三]

"build system"

3. 编译OTA升级包 3. 编译OTA升级包 传统生成OTA包时,只需运行make otapackage即可,如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) \ build/make/tools/releaset...

Android P编译简析[二]

"build system"

2. 固件编译流程 2.1 DroidCore 2.2 systemimage 2.3 boot.img 2.4 files 2.5 vendorimage 2.6 import-products 2. 固件编译流程 2.1 DroidCore 编译固件首先从DroidCo...

Android P编译简析[一]

"build system"

0.前言大纲 1. Makefile编译时序图: 0.前言大纲 大图链接: http://www.cjcbill.com/img/bill/in-posts/2019-04-01/1.png 1. Makefile编译时序图: 下图是Android P编译时涉及的关键Makefile 大图链接: http://www.cjcbill.com/img/...

Android 笔试题目汇总

"Android 笔试"

1.java面试题 1.1 java中==和equals和hashCode的区别 1.2 int、char、long各占多少字节数 1.3 int与integer的区别 1.4 谈谈对java多态的理解 1.5 String、StringBuffer、StringBuilder区别 1.6 什么是内部...

Android JNI Demo

"Android JNI使用例子"

1. JNI简析 2. JNI使用步骤 3. JNI SDK demo 3.1 Apk实现 3.1 静态注册 3.2 动态注册 4. JNI Android Studio demo 5. JNI数据附录 5.1 JNI基础数据类型 5.2 JNI引用数据类型 ...

Android Activity生命周期

"Android Activity LifeCycle"

1.Activity生命周期 Activity的生命周期如下图所示: 正常启动的时候,Activity的启动流程如下: onCreate onStart onResume 其中onCreate负责处理程序初始化工作,如界面资源的初始化,数据初始化等。onStart表明Activity正在启动,此时Activity可见但不在前台,而onResume表示Activit...

Android Activities四种启动模式

"Android Activity有多少种启动模式?"

1. 前言 Android Activities四种启动模式:Standerd、SingleTop、SingleTask、SingleInstance。 Standard(默认标准启动模式):每次启动都重新创建一个新的实例,不管它是否存在。且谁启动了这个Acitivity,那么这个Acitivity就运行在启动它的那个Acitivity的任务栈中。 S...

Android AMS 图解

"Android AMS ActivityManagerservice"

1.前言 2. AMS创建Activity流程 3. AMS创建Service流程 4. AMS 广播接收流程 1.前言 ActivtyManagerService是Android系统的重要服务,它管理着四大组件的Activity,BroadcastReceiver,Services,ContentProvider,本文将以AMS的几个重要流程以图的形式展现,...

Android Studio导入项目说明

"Android Studio"

1.前言 2. 修改gradle插件版本 3.修改SdkVersion 4.修改gradle路径 5.修改工具或依赖库的版本号 1.前言 在实际开发过程中,有时候需要导入其他环境的项目,这时候如果和个人的环境不匹配,编译就会报错,现在简单记录下修改的流程,以便后续能快速开发。 2. 修改gradle插件版本 一般通过AndroidStudio标题即可确...

Android logcat工具简析

"Android log"

1. 前言 2.logcatd 2.1 logcat常用命令 2.2 logcatd.rc 2.3 logcat_main 2.3.1 android_logat_context初始化 2.3.2 android_logcat_run_command 2.3.3 ...

Android Log写日志流程分析

"Android log"

1. 前言 2.Java日志记录接口 3. C++日志记录接口 4. liblog 1. 前言 平时在开发过程中,少不了进行调试打印,Android在为开发者提供了Java,C++的日志接口,开发者通过logcat工具就可以通过串口或者ADB获取应用或这Framework的工作状态。其中Logd负责承上启下,自上与用添加的日志语句向呼应,自下可以在logcat...

Android开发平台区分

"Android platform-distinguish"

1. 背景 2. FrameWork层平台区分 2.1 通过系统属性区分 2.2 通过自定义方法区分 2.2.1 增加宏定义 2.2.2 Native层实现 3. Native层平台区分 4. FrameWork资源文件区分 ...

Android 7.0 Brightness亮度调节流程分析

"Android Brightness"

1. 背景 2. FrameWork调节亮度流程 2.1 亮度相关Service启动流程 2.2 BrightnessDialog调用流程 2.2.1 BrightnessDialog 2.2.2 BrightnessController && BrightnessObs...

Git问题全记录

"Git problems"

1.set Android SDK by time 2.git am while conflict 3.git with proxy 4.使用git diff时配置颜色区分 5.迁移上传gerrit代码 6.修改指定commit的内容 7.Git合并多个提交 8.添加ssh远程地址脚本 9.创建远程tag以及分支 10.上传代码时提示”expec...