自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

安仔的博客

有啥好描述的,描述这,描述那,描述个毛啊

  • 博客(103)
  • 资源 (2)
  • 收藏
  • 关注

翻译 PML翻译:第一章 引言

PML书籍翻译 Probabilistic Machine Learning: An Introduction翻译 第一章

2024-03-22 20:33:21 30

翻译 PML翻译:前言

PML书籍翻译 Probabilistic Machine Learning: An Introduction翻译

2024-03-19 20:41:20 20

翻译 All of Statistics 第五章

all of statistics 的第五章

2023-09-27 14:29:24 357

翻译 All of Statistics 第四章

all of statistics 第四章,常用不等式

2023-09-21 11:00:01 284

翻译 All of Statistics 第三章

all of statistics 第三章

2023-09-20 20:17:08 202

原创 Android 12 源码分析 —— 应用层 六(StatusBar的UI创建和初始化)

本文旨在介绍StatusBar窗口对应UI的创建过程,不涉及UI的交互过程,它是Layout基本布局和StatusBar类初始化过程的进一步细化

2023-09-18 23:11:28 766 7

翻译 All of Statistics 第二章

all of statistics 第二章

2023-09-15 16:16:24 243 2

翻译 All of Statistics 第一章

All of Statistics 第一章

2023-09-13 18:53:23 177 1

原创 Android 12 源码分析 —— 应用层 五(SystemUI的StatusBar类的启动过程和三个窗口的创建)

本文在前文Layout的基础上,进一步介绍各个窗口的创建,并从窗口创建的StatusBar类开始介绍起,是认识StatusBar创建流程的起点

2023-09-12 22:46:06 809 2

原创 Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念)

本文查看SystemUI的layout文件,说明了SystemUI的window划分和布局划分,并将其对应到具体的UI视图中

2023-09-03 19:45:45 3088 5

原创 Android 12 源码分析 —— 应用层 三(SystemUIFactory及其Dependency解析)

本文,先使用一个例子,介绍Dagger2生成的代码模板,然后再结合SystemUI中的实际情况,说明SystemUI使用Dagger2之后的各个组件的初始化过程和细节

2023-08-29 16:13:56 1418

原创 Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程)

本文先总览SystemUI中所有的组件,然后讨论为什么要使用Dagger2.最后详解SystemUI的启动过程,以及启动过程中各个功能为什么要那样设计

2023-08-21 15:25:09 2487 3

原创 Android 12 源码分析 —— 应用层 一(SystemUI准备篇)

本文详细介绍了Android 12的SystemUI在Android Studio中的阅读和调试,以及怎么修改部分lint提示。是SystemUI开发人员的必读文章

2023-08-18 18:21:31 2619 2

原创 android 如何分析应用的内存(十八)终章——使用Perfetto查看内存与调用栈之间的泄露

在前面两篇文章中,先是介绍了如何用AS查看Android的堆内存,然后介绍了使用MAT查看Android的堆内存。AS能够满足基本的内存分析需求,但是无法进行多个堆的综合比较,因此引入了MAT工具。它可以很好的在两个堆之间进行比较。两个工具已经能解决95%的内存问题了。但是在一些极端情况下,如多线程带来的内存泄漏,上面两个工具可能就不太好定位问题,即泄漏点的调用栈和调用线程了。对于Android来讲,怎样才能定位这种多线程调用带来的内存呢?本文将围绕不能添加代码的情况,进行分析这种极端情况。

2023-08-12 15:00:12 2155 2

原创 android 如何分析应用的内存(十七)——使用MAT查看Android堆

前一篇文章,介绍了使用Android profiler中的memory profiler来查看Android的堆情况。如Android 堆中有哪些对象,这些对象的引用情况是什么样子的。可是我们依然面临一个比较严峻的挑战:不管是app开发者,还是内存分析者而言,堆中的对象,非常之多,不仅有Android 原生的类,还有第三方库使用的类。这些类在使用过程中,也可能因为有较大的shallow size 或者retained size而混淆内存的分析。

2023-08-09 11:31:16 1523

原创 android 如何分析应用的内存(十六)——使用AS查看Android堆

在前面,先介绍了如何使用jdb和VS code查看应用栈相关内容。本文将介绍,如何查看堆中的内容。

2023-08-07 23:12:52 1936 2

原创 android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用

在上一篇文章介绍了jdb调试java应用接下来介绍用UI界面调试java应用,达到同jdb一样的效果。同样的UI界面有很多选择,如Eclipse,Android Studio,Visual Studio Code.因为Android Studio的诸多不便,结合自身的使用习惯,这里推荐并介绍Visual Studio Code。

2023-08-02 17:28:33 1502

原创 android 如何分析应用的内存(十四)——jdb命令行

前面的系列文章介绍了android应用如何分析native内存。接下来就是android应用如何分析java内存。同native一样,我们也希望能够看到ART的堆和栈的情况,以及锁的情况,方法的本地变量,以及栈帧等注意:在Android中,有几个特殊的堆内存,如存储dex文件的image heap和存储共有资源的zygote heap。他们属于Framework应该关心的内容,因此不在此系列中做介绍。

2023-08-01 19:19:04 643 4

原创 android 如何分析应用的内存(十三)——perfetto

从2018年始,android开发者峰会正式推出perfetto工具。从此perfetto成为安卓最重要的工具之一。在2018年以前,android使用systrace工具,进行同样的工作。第零个工具xdd:只能查看任意内存第一个工具gdb:它可以查看:寄存器,和任意位置的内存,分析coredump,能查看栈情况,不能查看堆情况第二个工具lldb:它可以查看:寄存器,和任意位置的内存,分析coredump,能查看栈情况,不能查看堆情况。

2023-07-31 17:53:33 3818

原创 android 如何分析应用的内存(十二)——HWASan

上一篇介绍了ASan,这次介绍ASan的加强版HWASan。

2023-07-26 17:40:01 834 1

原创 mid文件解析实例

【代码】mid文件解析实例。

2023-07-24 17:26:20 185

原创 android 如何分析应用的内存(十一)——ASan

因为ASan需要使用各种动态库,而这些动态库在Android设备默认是没有的。因此需要将这些动态库,放入Android设备中。自定义APP的启动过程,使用wrap.sh。使用NDK提供的脚本。方法一:使用wrap.shandroid 如何分析应用的内存(七)下面只做使用说明。在AndroidManifest.xml中添加android:debuggable=“true”在build.gradle中使用 useLegacyPackaging。见android 如何分析应用的内存(七)

2023-07-10 23:45:57 1425

原创 android 如何分析应用的内存(十)——malloc统计和libmemunreachable

接下来介绍native heap内存的第四个板块————malloc统计和libmemunreachable。

2023-07-03 23:43:26 949 1

原创 android 如何分析应用的内存(九)——libc回调

接下来,介绍的是bionic库提供的libc回调功能,它可以通过代码获得所有的内存分配情况。

2023-06-28 12:54:41 675

原创 android 如何分析应用的内存(八)——malloc debug 和 libc回调

接上文,介绍六大板块中的第三个————malloc调试和libc回调上一篇文章中,仅仅是在分配和释放的时候,拦截对应的操作。而不能进一步的去检查内存问题。比如:释放之后再次使用指针,内存泄漏,内存损坏等等。在这篇文章中,将会介绍malloc调试技术,它可以对native的内存,进行更加细致的检测,并且可以支持到Android 4.4。而malloc hook最低也只能支持到Android 9.0.但从Android 7.0以后有一个改版。因此将分两部分进行介绍。

2023-06-20 17:26:26 1674

原创 android 如何分析应用的内存(七)——malloc hook

接上文,介绍六大板块中的第二个————malloc hook上一篇的自定义分配函数,常常只能解决当前库中的分配,而不能跟踪整个app中的分配。为此,android的libc库,从Android 9.0开始引入了malloc hook技术这个技术定义了四个全局变量,这个变量指向对应的函数。注意:在32位系统中,有两个已经不在推荐使用的函数,pvalloc和valloc对应的hook为__memalign_hook。

2023-06-14 14:24:07 2100

原创 android 如何分析应用的内存(六)——自定义malloc

那么我们还可以对,libc库的内存分配函数,做进一步的封装。在应用每次调用内存分配的时候,记录下调用分配的堆栈,和分配的大小。在合适的时候,将其打印出来,以观察内存的分配情况,从而达到分析内存泄漏的问题。

2023-06-12 16:28:47 1075

原创 android 如何分析应用的内存(五)——Android studio的LLDB

接上文lldb的工具篇的GUI部分。接下来是as的LLDB。

2023-06-09 18:25:03 1207

原创 android 如何分析应用的内存(四)——Visual studio code的LLDB

接上文在介绍细节部分时,先介绍了各种工具的使用,而这些工具,大部分都用来调试,诸如:特定内存点,堆栈,寄存器,变量值等的内容。而对于堆中分配的对象还没有进一步介绍。在介绍堆中分配之前,native部分的工具篇还未完成。接下来是lldb的工具篇的GUI部分。

2023-06-05 20:24:13 2385

原创 android 如何分析应用的内存(三)——LLDB命令行

接上文细节部分包括如下其中介绍了native部分的前三个。这些都需要使用工具才能查看,部分内容还需要写代码才能查看,因此先介绍了xdd工具,接着介绍了gdb工具,接下来介绍lldb。前一篇文章中,介绍的gdb,是GCC项目的调试器。从android NDKr13中推荐使用LLVM项目,到NDK r18全面拥抱LLVM项目之后android更推荐使用的调试器为LLVM项目的LLDB.

2023-06-05 00:39:19 1605 3

原创 android 如何分析应用的内存(二)——xdd,gdb命令行

前面对android应用的内存做了一个总体性的概括,那如何查看内存里面的细节呢?所有这些,需要使用Debug工具才能查看。部分内容,还需要编程查看。先来看工具如何使用。

2023-05-31 20:20:32 1515

原创 android 如何分析应用的内存 (一)——内存总览

获得如下信息PSS:这是一种按照比列来划分内存的统计方法。比如一个共享库占1G。由两个进程共享,那么PSS的计算方式就是,将1G一分为2。分别为512M按照上图,举例如下:Native Head 按照PSS统计方法,占据107179KBPrivate Dirty:其中Private表示只有本进程可访问。Dirty表示还没有写回磁盘。举例如下:如上图第一行表示,分配给本进程的,已经被修改,但未写入磁盘的Native Heap大小为107140KB。

2023-05-18 17:37:32 2090 1

原创 android 如何更新Dns

android 更新DNS的方式有如下几种。

2023-05-16 16:32:45 2500

原创 android 如何被局域网内的其他设备发现

想要在同一个局域网内,发现其他设备。有如下的击中方案。应用起来之后,请求同一个地址,构建同一个组。每个应用就是这个组的成员。每个成员之间相互知道。这样的方案,缺点是需要有一个中心,用来管理这些成员在同一局域网内,相互之间广播。广播内容,可以是自己的ip和对应服务的端口号,以及需要携带的信息。这样的方案,缺点就是广播可能会带来大量的网络阻塞。在同一局域网内,使用多播。android 内置有mDNS服务,和客户端,它就是使用的多播方式。可以将自身被其他设备发现,也可以发现其他设备。

2023-05-16 10:47:34 1585

原创 Usb Midi Class

这部分内容在《USB声卡驱动(二)USB音频设备描述符》中有过详细介绍,此处在简单介绍一下:一个usb 音频设备,含有多个功能(audio function)。其中之一就是,midi 功能。在midi 功能中,包含有一个或多个的jack口。这个jack口是一个抽象概念。usb midi 设备的功能之一,就是将usb的端点和这些jack口连接在一起。举个例子,你往usb的某个端点发送数据,就相当于往某个jack口发送数据。

2023-05-15 14:35:28 601

原创 Android编译Skia库

Android skia编译

2023-01-12 22:06:22 1803 14

原创 Android NDK-EGL 初级

Android NDK-EGL 初级在最近的工作中,发现很少有资料直接介绍android EGL的。在翻越GLSurfaceView和Skia的源码之后,将我自己的NDK-EGL编程整理如下,供有需要的开发者取用什么是EGLEGL at a glanceEGL provides mechanisms for creating rendering surfaces onto which client APIs like OpenGL ES and OpenVG can draw, creates g

2022-01-20 15:18:05 3695 11

原创 android 蓝牙分析(一)

android 蓝牙分析(一)最近公司想要使蓝牙a2dp source和a2dp sink动态切换。于是决定进行相应的源码调整。现在将一些分析结果整理一下因为从来没有android 蓝牙的工作经验,所以先从android的蓝牙架构开始注意:本次分析使用了msm8996 android 8.1 平台一,android蓝牙架构查看android 官网,可以获得架构相关的知识,如下图二,从上到下的源码分析第一步Settings 应用从架构图中,先找到蓝牙架构的应用app,然后逐渐往下。首先是

2021-08-03 20:39:43 1829 3

原创 fluidsynth修改midi播放的通道为ring

fluidsynth修改midi播放的通道为ring在前面一篇文章中,记录了FluidSynth编译的各种小坑。现在进行一个实践操作。修改midi播放通道为ringfluidsynth中用于播放声音的库由很多,即,audio.driver有很多,默认是oboe的。现在我们希望当midi播放时,选在opensles作为播放驱动。并将其声音,该为ring通道。查看代码可以知道,opensles的创建在文件:/src/drivers/fluid_opensles.c文件中。翻越android NDK文档,

2021-06-23 21:13:40 341

原创 synthfluid的编译arm,arm64

synthfluid的编译遇到了很多问题,现在记录如下:编译arm登录fluidsynth,查看android的编译。https://github.com/FluidSynth/fluidsynth/wiki/BuildingForAndroid点击此处直达android要求,下载两个文件fluid-android-prepare.sh和fluid-android-compile.sh第一个文件,用于准备编译所需的环境,第二个文件,下载相应的依赖包以及fluidsynth的源码包,并进行编译下

2021-06-23 16:54:32 672 2

fluidsynth.zip

fluidsynth编译文件和源码包

2021-06-23

申嵌培训mini2440之U-boot移植详细手册-20110908.pdf

【申嵌培训】mini2440之U-boot移植详细手册-20110908.pdf 【申嵌培训】mini2440之U-boot移植详细手册-20110908.pdf 【申嵌培训】mini2440之U-boot移植详细手册-20110908.pdf

2020-10-10

空空如也

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

TA关注的人

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