自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Android 交叉编译Libusb

Android NDK 编译 libusb

2023-11-09 10:33:26 357

原创 Opus 1.4 编译脚本

NDK编译Opus 1.4版本方法

2023-11-09 10:31:05 139

原创 Automotive 添加一个特权APP

路径:packages/apps/Car/MyHvac。

2023-09-05 15:58:28 294

原创 publishBinderService和publishLocalService

路径: frameworks/base/services/core/java/com/android/server/SystemService.java。添加系统服务的时候,你会发现官方使用了publishBinderService和publishLocalService,了解一下它们的作用和区别,: 最终调用了4个参数的方法,将服务添加到了ServiceManager中,普通应用也可以获得。: 给服务加入到了LocalServices中,只能由系统进程访问。

2023-07-21 09:44:39 381

原创 HAL 版本控制理解

官方连接https://source.android.com/docs/core/architecture/hidl/versioning?官方写的有点难理解,这里举例说明先看原文如需定义软件包“是起始 minor 版本”:所有之前的 minor 版本()必须均未定义。以下各项均为 true:必须已定义,并且遵循相同的规则 A(从到均未定义)或规则 B(如果它是从升级而来);“继承至少一个具有相同名称的接口”:存在扩展的接口(如果前一个软件包具有接口);

2023-07-18 15:30:04 245

原创 java 反射及代理模式初步学习

java 反射及代理模式初步学习0. 什么是反射?Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。[摘自百度百科]1. 反射的用途反射通常由需要检查或修改Java虚拟机中运行的应用程序的运行时行为的程序使用。这是一个相对高级的功能,只应由对语言基础有很深了解的开发

2023-05-16 21:55:51 592 1

原创 InputDispatcher 源码分析

版本:android 13。

2023-05-16 21:12:31 185

原创 InputReader源码分析

版本:android 13。

2023-05-16 21:11:40 502

原创 InputManager启动流程

比较关键的三个地方是EventHub,InputReader,InputDispatcher其中EventHub用来读取驱动的原始事件InputReader用来解析事件,包装事件InputDispatcher用来事件分发具体的启动流程跟着代码走一遍就行了。

2023-05-16 21:10:09 519 3

原创 SystemServer 启动流程

​ SystemServer 是android 系统的一个核心服务,它是由Zygote进程fork出来的,负责启动android系统的必要服务,以满足系统和三方应用的基础运行条件。创建SystemServiceManager创建MainLooper启动系统Service将系统service添加到ServiceManager启动Looper接收消息。

2023-05-16 21:09:14 1175 1

原创 Android 系统开发笔记(二)

但是,编译规则中需要条件语句的复杂问题将在Go(在这种语言中,您可以使用高级语言功能,并且可以跟踪条件语句引入的隐式依赖项)中处理,大多数条件语句都会转换为映射属性,其中选择了映射中的某个值并将其附加到顶级属性。每个模块必须有name属性,并且相应值在所有name文件中必须是唯一的,仅有两个例外情况是命名空间和预构建模块中的Android.bp属性值,这两个值可能会重复。Soong 可以让不同目录中的模块指定相同的名称,只要每个模块都在单独的命名空间中声明即可。映射可以包含任何类型的值,包括嵌套映射。

2023-05-16 20:52:59 484 1

原创 Android 系统开发笔记

soong构建系统是在Android 7.0中引入的,旨在取代Make。它利用Kati GNU Make科隆工具和Ninia构建系统组件来加速Android的构建。

2023-05-16 20:35:07 981 1

原创 Zygote 启动流程分析

​ Android 是基于linux的, linux启动的第一个进程是init进程,所有的进程都是它直接或间接启动的,而所有的android apk进程都是运行在java虚拟机之上,zygote被init进程拉起之后,zygote负责初始化android进程所需要的环境,并负责创建apk进程,fock机制决定了所有由zygote进程fock出来的进程都继承了android apk所需要的环境,所以,zygote是android中的重中之重。

2023-05-16 20:20:43 541 1

原创 WMS 窗口添加流程

wms

2023-05-16 09:45:24 621 2

原创 AOSP 模拟器添加新的屏幕

如果需要三块屏幕或更多,可以按照上面的方法添加更多屏幕,以上就是使用模拟器添加多个屏幕的所有内容了。点击如上图的设置,然后点击display->add secondary display,如下图。参数选择custom,dpi去设置里面找,大差不差就行了,要一模一样的就去设置里面去看,如下图。

2023-04-22 21:24:23 279

原创 mmap 基本使用

​ mmap主要用来做内存映射的,可以将虚拟内存和磁盘上的文件直接映射。正常来说我们在写文件读文件的时候是需要使用系统调用api来进行,比如说read/write,这两个系统调用读写文件的方式是需要进行两次拷贝的,从用户空间拷贝到内核空间,然后从内核空间再拷贝到磁盘,而mmap将文件的地址直接映射到虚拟内存,这样,我们直接往这个地址读/写内容,可以像操作malloc申请出来的空间地址一样,写到这个地址,内容就直接在文件中了,减少了一次拷贝,提高了效率。这样一个公共的内存区域,也可以用来进程间

2022-06-06 23:07:16 7567 3

原创 Android studio 使用JDK11无法生成javadoc问题解决

Android studio 使用JDK11无法生成javadoc问题解决一. 背景Android studio 升级到Arctic 后强制使用jdk11了,在通过 Tools->Generate Javadoc 时发现很多Android 系统得类找不到,配置如下:网上基本都这么配置的,用idea生成也没碰到问题,但在Android Studio上点击ok后出现如下错误信息:二. 当前系统环境OS:Windows 11Android studio:Arctic Fox | 20203.

2022-03-29 17:09:24 7303

转载 Android Studio启动模拟器出现问题:Error while waiting…… process for AVD Pixel_XL_API_29 was killed

Android Studio启动模拟器出现问题:Error while waiting…… process for AVD Pixel_XL_API_29 was killed转载地址:https://www.it610.com/article/1281558227279953920.htmError while waiting for device: The emulator process for AVD Pixel_XL_API_29 was killed.问题出现的原因:原因一:.Andro

2021-03-18 12:54:23 3705

原创 Android 虚拟机与类加载机制

Android 虚拟机与类加载机制文章目录Android 虚拟机与类加载机制一. Android 虚拟机版本1.1 概述1.2 基于栈的虚拟机1.2.1 字节码指令1.2.2 执行过程1.3 基于寄存器的虚拟机1.3.1 执行过程1.3.2 和基于栈的虚拟机的区别1.4 ART 和Dalvik的区别1.4.1 ARTx虚拟机执行的本地机器码是从哪里来的1.4.2 安装时进行预编译带来的问题1.4.2 Android N的运作方式二. ClassLoader2.1 常见的类加载器2.2 类加载流程2.3 为

2021-02-18 09:25:57 266

原创 垃圾回收算法机制笔记

垃圾回收算法机制笔记文章目录垃圾回收算法机制笔记一. 复制算法(Copying)1.1 复制算法的实现1.2 复制算法的特点1.3 非标准复制算法比例设定的原因1.4 内存图二. 标记清除算法(Mark-Sweep)2.1 标记清除算法的实现2.2 标记清除算法的特点三. 标记整理算法(Mark-Compact)3.1 标记整理算法的实现3.2 标记整理算法的特点四. JVM中常见的垃圾收集器4.1 分代收集的思想4.2新生代4.3 老年代4.4 新生代和老年代垃圾收集器之间的连线关系4.5 相关参数配置

2021-02-18 09:21:08 228

原创 深入理解对象与垃圾回收机制

深入理解对象与垃圾回收机制文章目录深入理解对象与垃圾回收机制一. 虚拟机中对象的创建过程二. 对象的内存布局三. 判断对象的存活四. Finalize 方法五. 各种引用六. 学习垃圾回收的意义七. 对象的分配策略7.1 对象的分配原则7.2 栈中分配一. 虚拟机中对象的创建过程检查加载当JVM碰到一条字节码new指令的时候会去检查类是否加载(首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用(符号引用 **:**符号引用以一组符号来描述所引用的目标),并且检查类是否已经被加载、解析

2021-02-18 09:18:44 305

原创 Rxjava总结

Rxjava总结文章目录Rxjava总结1. RxJava 操作符调用流程总结2. Rxjava线程切换总结2.1 异步线程切换2.2 主线程切换1. RxJava 操作符调用流程总结// RxJava 操作符调用流程总结Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(@NonNull ObservableEmi

2021-02-18 09:15:03 126

原创 Gson 使用篇

Gson 使用篇开篇:在使用Gson之前,我们先聊一下Json, 虽然大部分人都用过,经常用,但有时候并不会太注意细节,写这篇博客也是为了更清晰的了解Gson是如何解析Json,这篇博客主要讲解Json的语法,以及使用Gson如何解析Json,下篇博客讲解Gson解析Json的主要流程及原理,网上很多类似的博客,这里也算自己学习的一个记录,总结。一. Json 是什么?Json 是诸多序列化方案的一种,是一种轻量级的数据交换格式,主要用于数据的网络传输,本地存储,数据标记使用。二. Json 语法格

2021-02-18 09:14:04 717

转载 【转】C语言的反人类函数:setjmp和longjmp的详细剖析

[转] C语言的反人类函数:setjmp和longjmp的详细剖析文章转自:http://www.21ic.com/tougao/article/3955.html我希望看这篇文章的你对C++的传统异常处理,即try…catch…throw有了解(不是Windows SEH),这样才能方便你最深入的理解这2个C语言的反人类函数。当然如果不了解就先看下面的“C++式的异常处理”,如果感觉自己了...

2019-08-01 15:42:50 325

原创 Android JNI实现fileObserver

Android JNI实现fileObserver记录背景前段时间需要一个文件监听的功能,网上查了一下,Android自带的有一个FileObserver类可以实现此功能,就准备使用它来实现,不知为何有的手机能用,有的手机不能用,而且还不支持递归的监听,所以打算通过jni来实现。思路Android 系统底层核心是linux大家都很清楚,linux系统中有一个叫inotify的东西,它是li...

2019-05-06 23:04:04 429

原创 TCP连接模式下解析RTP包过程记录

TCP连接模式下解析RTP包过程记录注:资料都是网上查的,代码是自己实现的,分享给大家,算是一个记录吧环境: Ubuntu 16.04 64 bit#if 0TCP连接模式下解析RTP包过程记录前提:例程以接收H264 RTP包为基础一、h264基础概念1.NAL、Slice与frame意思及相互关系1 frame(帧)的数据可以分为多个slice(片). ...

2018-07-18 21:41:39 3697 1

原创 arm交叉编译Valgrind

valgrind :Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具下面讲解如何在arm板上使用Valgrind1.获得源码下载源码到本地wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2解压tar xvf valgrind-3.12.0.tar.bz2进入源码目录cd valgr

2018-02-01 17:12:50 368

原创 statfs函数使用

1.功能描述编辑查询文件系统相关的信息。2.用法#include /* 或者 */int statfs(const char *path, struct statfs *buf);int fstatfs(int fd, struct statfs *buf);3.参数path: 需要查询信息的文件系统的文件路径名。fd: 需要查询信息的文件系统的文件描述词

2018-02-01 17:06:34 5743

原创 关于NDK使用预构建库编译找不到依赖库的问题

环境: os:Ubuntu 14.04 64bit使用命令自制交叉编译器 这里指定: API 为21 armeabi指令集$NDKROOT/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/tmp/.tmp-toolchain之后在 /tmp/.tm

2018-02-01 16:38:10 2637 6

原创 Opencv(源码) Ubuntu 安装

Opencv(源码) Ubuntu 安装环境:ubuntu 16.04 64bit 源码地址:https://github.com/opencv/opencv/releases/tag/3.3.0安装:1.更新系统sudo apt-get update sudo apt-get upgrade2 搭建C/C++编译环境:sudo apt-get install cmake git libgt

2017-09-12 23:20:59 2757

原创 sudo 出现unable to resolve host 解决方法

sudo 出现unable to resolve host 解决方法问题:每次执行sudo 就出现这个警告讯息: sudo: unable to resolve host Linux 虽然sudo 还是可以正常执行, 所以就直接从/etc/hosts 设定, 让Linux(hostname) 可以解回127.0.0.1 的IP 即可.sudo vim /etc/hosts 1 127.0.0.

2017-09-12 23:11:51 2290

原创 uboot 2013.01.01 start.S部分分析

uboot 2013.01.01 start.S部分分析#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) /* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */ mrc p15, 0, r0, c1, c0, 0 @ Read CP

2017-02-22 21:30:51 428

原创 Fedora25安装VirtualBox

Fedora25安装VirtualBoxVirtualBox官网下载rpm安装包https://www.virtualbox.org/wiki/Downloads 2.安装找到刚刚下载好的rpm包 执行安装命令 :sudo rpm -ivh VirtualBox-5.1-5.1.14_112924_fedora25-1.x86_64.rpm3.出现错误warning: VirtualBo

2017-02-11 21:45:52 555

转载 Fedora 24下安装Chrome浏览器

Fedora 24下安装Chrome浏览器原文地址:http://www.cnblogs.com/zhangyin6985/p/5635846.html添加chrome源1.su root2.cd /etc/yum.repos.d/ 注意以下步骤要在这个目录下进行。。。下载google-chrome.repo并保存1. wget http://repo.fdzh.org/chrome/

2016-11-18 22:45:33 435

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除