自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FeiPeng_的博客

生命不息,奋斗不止,万事起于忽微,量变引起质变

  • 博客(71)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android PackageManagerService(一)启动安装流程分析

一、PMS概述PKMS构造函数的主要功能:扫描Android系统中几个目标文件夹中的APK,从而建立合适的数据结构以管理诸如Package信息、四大组件信息、权限信息等各种信息。抽象地看,PKMS像一个加工厂,它解析实际的物理文件(APK文件)以生成符合自己要求的产品。例如,PKMS将解析APK包中的AndroidManifest.xml,并根据其中声明的Activity标签来创建与此对应的对象并加以保管,文章牵涉到的源码来自Android 8.0。二、系统应用启动安装流程图标题...

2020-07-21 15:38:32 1100

原创 RS232电平和TTL电平有什么不同

接下来,通过几个实际的应用案例,展示了RS232和TTL电平在不同领域的应用,如工业自动化、通信设备和嵌入式系统等。本文将详细介绍RS232电平和TTL电平的差异,包括电压范围、信号极性、传输距离和应用领域等方面。RS232电平使用正负电压表示逻辑状态,通常为正电压表示逻辑0,负电压表示逻辑1;TTL电平使用高低电压表示逻辑状态,通常为高电压(如+5V)表示逻辑1,低电压(如+0.8V)表示逻辑0。RS232电平的信号极性与电压有关,逻辑0和逻辑1的电压极性相反;

2023-09-14 21:36:53 686

原创 如何解析dtb文件 rk3588s

dtc -I dtb 123.dtb -O dts -o xxx.dts // I 大写 i ,表示输入,dtc -h 可以查看各个参数意义。dts文件是由dtc工具编译,其工具在: out/target/product/xxx/obj/KERNEL_OBJ/scripts/dtc/dtc。

2023-06-26 15:36:19 374

原创 Linux分包和合包

就是针对目录进行 压缩+分包,不是针对一个文件进行分包。有时候传递服务器大包老是失败,我们可以分包上传。

2023-04-12 17:41:28 523

原创 Android元注解和自定义注解分析

然后写工具类,在MainActivity中的onCreate中super.onCreate(savedInstanceState)之前初始化。定义:元注解是由Java提供的一套用来注解其他注解的基础注解。主要作用就是替代枚举显示参数范围,减少内存使用。Android常见的元注解。

2023-04-12 16:49:26 588

原创 android不用USB线通过wifi进行adb调试

6、在命令行输入 adb connect ,此后就可以使用adb 来进行调试了。4、在dos窗口输入命令adb tcpip 5555(5555 是端口号,可以自由指定)5、断开usb数据线(此时也可以连接你需要连接的usb设备)本方法通过TCPIP网络进行,也就是通过ADB来连接设备。1、首先确定你的电脑和手机连接的wifi处于同一个网段。2、使用usb数据线连接设备。3、查看手机的IP地址。

2023-04-07 13:46:35 817

原创 Android Framework学习之RefBase,SP,WP解析

LightRefBase仅仅提供了引用计数的方法,具体引用数应该怎么管理,就要通过智能指针类来管理了,每当有一个智能指针指向对象时,对象的引用计数要加1,当一个智能指针取消指向对象时,对象的引用计数要减1,在C++中,当一个对象生成和销毁时会自动调用(拷贝)构造函数和析构函数,所以,对对象引用数的管理就可以放到智能指针的(拷贝)构造函数和析构函数中。sp 管理一个对象指针时,对象的强、弱引用数同时加1,sp销毁时,对象的强、弱引用数同时减1。

2023-04-07 10:07:02 488

原创 Android开发 debug调试framework代码

调试

2023-02-08 15:45:32 543

原创 Linux java定位线程cpu占用命令

1、先用top定位那个进程占用cpu过高2、ps H -eo pid,tid,%cpu |grep 326553、jstack 进程id更具线程id找到有问题的线程,进一步定位到问题代码的源代码行号。

2021-12-21 17:10:49 526

原创 Android 内置可卸载应用报错

Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# Module name should match apk name to be installed$(shell mkdir -p $(TARGET_OUT_VENDOR)/operator/app/CTMPTT/)$(shell cp $(LOCAL_PATH)/*.apk $(TARGET_OUT_VENDOR)/operator/app/CTMPTT/)

2021-12-21 15:53:15 1339

原创 Android 编译不生成odex文件(编译时不优化) LOCAL_DEX_PREOPT := false

在Android.mk中添加配置:LOCAL_DEX_PREOPT := false如果是 Android.bpandroid_app { // 添加下面配置

2021-12-21 14:48:54 3675

原创 jvm之java虚拟机栈

1、每个线程运行时所需要的内存空间,称为虚拟机栈。2、每个栈由多个栈帧组成,对着每次方法调用时所占用的内存。3、每个线程只能有一个活动栈,对应着当前正在执行的方法。4、栈帧:每个方法运行时需要的内存。垃圾回收只针对堆内存回收。...

2021-12-20 17:42:51 441

原创 jvm之程序计数器

程序计数器作用:记住下一条jvm指令的地址。特点:是线程私有的。不会存在内存溢出。

2021-12-20 15:04:58 104

原创 LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别

LOCAL_LDLIBS :链接的库不产生依赖关系,一般用于不需要重新编译的库,如库不存在,则会报错找不到。且貌似只能链接那些存在于系统目录下本模块需要连接的库。如果某一个库既有动态库又有静态库,那么在默认情况下是链接的动态库而非静态库。如:LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …如果你的Android.mk文件中只有这么一行,那么将会采用动态链接。LOCAL_SHARED_LIBRARIES 会生成依赖关系,当库不存在时会去编译这个库。

2021-04-26 16:56:13 529

原创 系统编译中LOCAL_CFLAGS的用法

LOCAL_CFLAGS += -DXXX ,相当于在所有源文件中增加一个宏定义#define XXXeg:在Android.mk中增加ifeq ($(PRODUCT_MODEL),XXX_A)LOCAL_CFLAGS += -DBUILD_MODELendif即能在所编译的Cpp文件中使用:#ifdef BUILD_MODEL....#endif...

2021-04-26 16:55:23 1498

原创 linux高精度struct timespec 和 struct timeval

一、struct timespec 定义:typedef long time_t;#ifndef _TIMESPEC#define _TIMESPECstruct timespec {time_t tv_sec; // secondslong tv_nsec; // and nanoseconds};#endifstruct timespec有两个成员,一个是秒,一个是纳秒, 所以最高精确度是纳秒。一般由函数int clock_gettime(clockid_t, struct t..

2020-08-28 16:24:42 280

原创 C++中的定位放置new(placement new)

一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。定位放置new操作的语法形式不同于普通的new操作。例如,一般都用如下语句A* p=new A;申请空间,而定位放置new操作则使用如下语句A* p=new (ptr) A;申请空间,其中ptr就是程序员指定的内存首地址。考察如下程序。#in

2020-08-28 16:22:54 402

原创 git add 添加错文件 撤销

git add 添加 多余文件这样的错误是由于, 有的时候 可能git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件git add 如果添加了错误的文件的话撤销操作git status 先看一下add 中的文件git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了...

2020-08-25 15:14:59 682

原创 Android PackageManagerService(六)方法后缀 LI LIF LPr LPw 是什么?

首先PMS有两个非常重要的锁分别是mPackages,mInstallLock一、mPackages用于保护所有在内存中解析的软件包详细信息以及其他相关状态。二、mInstallLock用于保护所有对installed进程的访问,其操作通常涉及大量移动磁盘上的应用程序数据。三、LI 、LIF、LPr、LPw 是什么?首先L代表Lock,I代表mInstall,P代表mPackages,F代表frozen,r代表读,w代表写。四、例如installPackageLI调用者必须.

2020-07-30 17:37:33 481

原创 Android PackageManagerService(五)卸载流程详解

从PMS的内部结构上删除acitivity、service、provider等信息删除code、library和resource等信息调用installd删除/data/data/packageName以及/data/dalvik-cache下面的文件更新Settings中的package信息具体分析当我们在Settings中的应用页面找到一个安装了的应用程序,并点击卸载后,就会发送一个Intent给UninstallerActivity,在UninstallerActivity最后会启

2020-07-23 17:08:36 1943

原创 Android PackageManagerService(四)本地安装流程详解

本地安装参与对象包括PackageInstaller应用,PMS两部分。下面我们就来分析下PackageInstaller是如何调用到PMS中的。函数调用时序图示。点击文件管理器里面app文件会启动PackageInstaller的InstallStart这个activityprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent .

2020-07-23 15:09:17 682

原创 Android PackageManagerService(三)pm命令安装流程详解

关于adb安装,其copy过程与下载安装不同,但安装过程却与下载过程是相同的,这里不做重复分析。拷贝过程流程图adb的入口在com.android.commands.pm.Pm类,那么这是如何调用到这个类的呢,这是adb命令通过adbd守护进程调用到/system/bin/pm这个脚本,其脚本源码如下:base=/systemexport CLASSPATh-$base/framework/pm.jarexec app_process $base/bin.com.android.co.

2020-07-23 14:14:21 1389

原创 Android PackageManagerService(二)下载安装详解

下载安装可分为两部分:拷贝应用和安装应用。拷贝过程的函数调用时序图如图2所示下载安装frameworks层的入口函数为PackageManager.installPackage,由应用市场APP调用,然后调用PMS.installPackageAsUser,然后发送消息INIT_COPY、MCS_BOUND开始复制,调用HandlerParams.startCopy。这个方法主要分两部分,一部分是拷贝应用的执行程序,另一部分是创建应用的数据目录,拷贝部分由handleStartCopy完成。之后调用ha

2020-07-23 11:51:09 1271

原创 Android Surface系统的概述(一)

一、本系列文章将集中打通Surface系统的任督二脉任脉:应用程序和Surface的关系督脉:Surface和SurfaceFlinger之间的关系。当这二脉打通后,我们就可以自行修炼更高层次的功夫了1、先看左图。可以发现,不论是使用Skia绘制二维图像,还是用OpenGL绘制三维图像,最终Application都要和Surface交互。Surface就像是UI的画布,而App则像...

2020-03-30 15:25:33 747

转载 性能优化工具-LeakCanary

一、简介使用MAT来分析内存问题,有一些门槛,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比才能找到问题原因。 为了能够简单迅速的发现内存泄漏,Square公司基于MAT开源了LeakCanary二、使用在app build.gradle 中加入引用:dependencies { debugImplementation 'com.squareup.lea...

2020-03-30 14:26:24 315

原创 常见的算法设计策略

1.分治分治法的设计思想是,将一个难以直接解决的大问题,分割成k个规模较小的子问题,这些子问题相互独立,且与原问题相同,然后各个击破,分而治之。分治法常常与递归结合使用:通过反复应用分治,可以使子问题与原问题类型一致而规模不断缩小,最终使子问题缩小到很容易求出其解,由此自然导致递归算法。根据分治法的分割原则,应把原问题分割成多少个子问题才比较适宜?每个子问题是否规模相同或怎样才为适当?这些问...

2020-03-24 17:15:49 1827

原创 基于动态数组实现的循环队列

循环队列的添加和删除操作都是O(1),比普通数组实现的队列要快很多倍。代码实现//接口类public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront();}/实现类public class LoopQueue&...

2020-03-12 16:37:05 238

原创 Java内存区域与内存溢出异常剖析

本文是在读过周志明老师编写的深入理解虚拟一书后,自己的要点总结。Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来 概述 运行时数据区域划分 OOM异常 HotSop虚拟机对象1、概述对于从事C、C++程序开发的开发人员来说,他们自己就可以动态的去管理内存,但是对于Java的同学来说只能去new创建对象,而不能去动态精准...

2020-03-12 16:30:52 133

原创 基于动态数组实现的栈

代码实现public class ArrayStack<E> implements Stack<E> { private Array<E> array; public ArrayStack(int capacity){ array = new Array<>(capacity); } p...

2020-03-12 14:24:14 172

原创 算法系列之--直接选择排序排序及图解

直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并放到最前/后位置,下一趟再从n-1个元素中选出最小/大的元素并放到次前/后位置,以此类推,经过n-1趟完成排序。图解直接选择排序算法实现如下:public static void selectionSort(int[] array){ for (int i = 0...

2020-03-12 11:32:53 795

原创 算法系列之--希尔排序及图解

希尔排序(Shell Sort)是D.L.Shell在1959年提出的,又称为缩小增量排序(Diminishing Increment Sort),基本思想是分组的直接插入排序。图解实现 public static void xierSort(int[] arry){ for (int delta = arry.length/2; delta > 0; delta/=2) ...

2020-03-12 11:07:39 222

原创 算法系列之--直接插入排序及图解

直接插入排序(Straight Insertion Sort)算法描述如下:① 第 i(1≤i<n)趟,线性序列为{a0,a1,…,ai-1,ai,…,an-1},设前 i 个元素构成的子序列{a0,a1,…,ai-1}是排序的,将元素ai插入到子序列{a0,a1,…,ai-1}的适当位置,使插入后的子序列仍然是排序的,ai的插入位置由关键字比较大小确定。② 重复执行①,n个元素共需n-1...

2020-03-12 10:50:38 842

原创 动态数组Java实现

基于普通数组实现的可以扩容的动态数组public class Array<E> { private E[] data; private int size; // 构造函数,传入数组的容量capacity构造Array public Array(int capacity){ data = (E[])new Object[capa...

2020-03-11 17:47:32 208

原创 数据结构之----循环链表

循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。分类(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。(2)多重链的循环链表——将表中结点链在多个环上。空链判断判断空链表的条件是head==head->next;rear==rear->next;尾指针用尾指针rear表示...

2020-03-09 17:19:47 555

原创 算法系列之--快速排序及图解

快速排序是一种分区交换排序算法。1.概述2.实现3.分析快速排序(Quick Sort)算法描述:在数据序列中选择一个元素作为基准值,每趟从数据序列的两端开始交替进行,将小于基准值的元素交换到序列前端,将大于基准值的元素交换到序列后端,介于两者之间的位置则成为基准值的最终位置。同时,序列被划分成两个子序列,再分别对两个子序列进行快速排序,直到子序列长度为1,则完成排序。关键字序...

2020-03-09 17:08:21 1828

原创 NR/LTE -RLF 无线链路失败

无线链路失败基本上是unintentional的,属于异常处理范畴。那么什么算是无线链路失败呢?当UE或者BS发现测量的RSRP非常小,或者无法解码PDCCH和PDSCH,收不到ACK或者NACK。那么在等待反馈的时候不能无限期等下去,通常使用的机制就是time-out,即使用定时器:T311 n310接下来的问题就是链路失败之后,UE或者BS会做什么?那就是RRC重新建立。RLF失败的原...

2019-06-19 16:14:38 4200

原创 Android P 源代码结构分析

摘录笔记,记录自学。Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套。第一级别的目录和文件如下所示:├── Makefile 全局的Makefile ├── build 系统编译规则和配置所需要的脚本和工具 ---------------- ├── prebuilt ...

2019-05-20 10:42:00 1430

原创 2018年——年终总结

时光飞逝,日子过得很快,转眼之间就到年底了,之前信誓旦旦的计划与承诺早已九霄云雾,回头来在看这一年经历的时光。有快乐,有痛苦。技术和各方面能力没有太大提升,博客也没有写几篇。希望自己在2019年里充满新的活力,去努力奋斗自己想要的生活。新年计划:锻炼身体,身体是革命的本钱,说的真没错,没有一个好身体哪怕你在能也什么都做不了。提升至自己专业领域的技能,提升自己各方面交流的能力。重新学习英语...

2019-01-23 11:51:57 550

原创 Android P SeLinux语法规则及原理

关于网上有好多类似的文章,然后就是自己再添加和修改了一些,给自己做个笔记。参考这边文章:http://blog.csdn.net/myarrow/article/details/10105961概述KK版本Google 默认启用了SELinux, 并会把SELinux 审查异常打印在kernel log 或者 android log(L 版本)中,对应的关键字是: “avc: denied...

2018-10-18 17:58:46 6394

原创 Windows在编译和安装 下载 FFmpeg详细步骤,避免各种坑

Windows在编译和安装 下载 FFmpeg详细步骤,避免各种坑前言安装Cygwin安装 apt-cyg编译安装 ffmpeg编译 yasm编译 fdk-aac安装lame安装nasm安装x264安装ffmpeg查看版本小结前言在Linux/Mac下编译 ffmpeg是非常方便的。但要在 Windows下编译 ffmpeg还真要花点时间。不过为了大家的要求,今天我就写一篇关于在 Window...

2018-09-29 15:51:33 2707 4

Axure RP Pro 8.1中文破解版(免破解)

Axure RP Pro 8.1 中文破解版(免破解),不用破解,安装了直接汉化就能用了,亲测可用,很不错的工具

2018-09-02

状态模式demo

状态模式代码案例,状态模式代码案例,状态模式代码案例,状态模式代码案例

2018-06-27

Android Studio jni开发之经典入门demo

此文记录一下Android Studio 进行jni开发的基础配置以及入门教程。

2017-06-22

AudioTrack播放MP3 左右声道控制 之移植Libmad到android平台

使用AudioTrack播放MP3 左右声道控制 之移植Libmad到android平台 使用libmad 解码MP3

2016-12-29

Android Calendar 4.4源码 月视图带左右滑动功能

Android Calendar源码原来是上下滑动的,在原来基础修改可以左右滑动。

2016-06-07

空空如也

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

TA关注的人

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