![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 65
古道异禀
他山之石可以攻玉
展开
-
Android Audio相关
Android Audio相关原创 2024-03-21 10:34:55 · 399 阅读 · 0 评论 -
Android Framework,HAL,Kernel调用关系
1 . JNI技术:1)JNI技术简单的说就是在本地Java语言声明本地方法和加载动态链接库(.so文件)2)动态链接库(.so文件)是由NDK编译C/C++文件而成的。2 . HAL层开发:1)HAL是Hardware Abstraction Layer的简称。也称为硬件抽象层。2)硬件访问服务是在Framework层实现的。3)硬件访问服务是用Java语言实现的,硬件抽象层是用C++语言编写的。因此硬件访问服务必须通过JNI技术调用硬件抽象层的接口。4)硬件抽象层调用Linux Ker.转载 2021-01-22 11:44:03 · 2394 阅读 · 0 评论 -
/system/app 和 /system/priv-app 有什么区别?
关于目录/system/priv-app中包括 Launcher,SystemUI,SettingsProvider 等,均是系统的核心应用,这些应用能使用系统级的权限,4.4 之前的所有/system/app下的软件都能使用系统级的权限,Google 这样做是把内置到系统的应用也做个级别的区别。放到/system/priv-app下的应用比放到/system/app下的应用可以声明获得更多的权限。在Android中每个应用都有自己的权限声明,比如要使用系统限制的权限(例如andro...转载 2020-11-18 15:04:38 · 13932 阅读 · 2 评论 -
SystemUI中全局弹窗SystemUIDialog
/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http:/.原创 2020-11-16 11:26:34 · 1312 阅读 · 0 评论 -
Android Build系统要点总结
在之前的公司参与项目开发的时候,虽然不负责系统固件编译脚本的维护,但为了工作的过程中更加的顺利,便学习了一下Android的Build系统。本文就是对之前的学习做个总结。系统版本:AOSP 5.1.11. Android Build 系统核心Android Build系统的核心位于源码目录的build/core,该目录下有几十个mk文件以及若干个shell脚本。通常是使用下面的命令来编译Android系统:$ . build/envsetup.sh$ lunch$ makeen转载 2020-11-12 09:36:24 · 811 阅读 · 0 评论 -
Android Dialog去边距透明
AlertDialog dialog = new AlertDialog.Builder(this).create();dialog.show();WindowManager.LayoutParams params = dialog.getWindow().getAttributes();params.width = 180;params.height = 180;Window dialogWindow = dialog.getWindow();// 必须使用这个方法,不能使用dialog.s.原创 2020-11-11 10:36:13 · 586 阅读 · 0 评论 -
Android Build系统介绍
概述Android build系统主要的逻辑都包含在Make文件,另外还包括各种shell和 python脚本,Build树可以理解为给Android源码的编译构建了一整套规则。框架1.结构1.1 Build核心模块图1中Build源码文件定义了整个Build系统的框架,其他所有的Make文件都是基于这个构建环境编写出来并成功编译。Build的核心文件都在/build/core/下。1.2 针对产品的Build模块图2中是针对某个产品类型的Make文件,一般都在de.转载 2020-11-10 15:38:26 · 843 阅读 · 0 评论 -
Android系统整体架构
Android 系统架构google经典的四层架构从下往上分别为:Linux内核层、系统库和Android运行时环境、framework层和应用层这四层架构。按照Gityuan大神的视角,我们也从系统启动过程为主线,以进程的视角来剖析Android系统的架构Android 启动架构这里先上一张Android 系统启动的架构图:可以看到:Android系统启动是从下往上的一个过程:Loader->Kernel->Native->Framework->App。..转载 2020-11-02 10:03:34 · 787 阅读 · 0 评论 -
Android framework修改系统默认设置
https://my.oschina.net/u/1176566/blog/190984转载 2020-10-29 10:34:55 · 254 阅读 · 0 评论 -
Android APP启动到View显示流程
Q:从这篇文章你能学到什么?A:这篇文章从桌面上点开一个APP图标开始分析,一直到里面各个view也就是控件显示到我们眼睛的整个过程。让你了解整个APP启动流程和View绘制流程。开始思考:当我们点击手机桌面上的一个软件时,从点击到完整显示这个APP整个过程中发生了什么???先忍受一下枯燥,理论知识还是得先在脑海中留下印象的一、从Activity启动流程中理论知识入门1.Launcher Launcher其实就是一个app,从功能上说,是对手机上其他app的一个管理和启动,从代转载 2020-09-24 09:02:31 · 1547 阅读 · 0 评论 -
Android USB系统(二)
1.1Vold的主要作用:Android系统中为了统一管理磁盘而引入Vold 负责磁盘的挂载等。vold是一个中间层,负责来连接上层以及驱动层。其实vold主要抓住两点:一是在CommandListener.cpp中处理上层发下来的命令,二是在NetlinkHandler.cpp中处理底层发送上来的各种信息。vold与上层之间是通过DomainSocket来通讯的,与下层之间是通过NetLinkSocket和sysfs来实现通讯的,即通过NetLinkSocket来截取usb驱动和mmc发送上.转载 2020-09-22 14:08:11 · 659 阅读 · 0 评论 -
Android USB系统(一)
1.1PAD作为USB Device设备USB Device的功能很丰富,其支持的协议越来越多包括:MTP、ADB、rndis、mass storage、accessory、audio_source、CDROOM等。1.1.1代码简单分析在代码中涉及到的目录主要有:1.frameworks/base/services/java/com/android/server/usb/ -----usbService.java用来管理usb协议,其通过property系统与init.xxx.usb.r.转载 2020-09-22 13:52:22 · 2149 阅读 · 0 评论 -
HIDL实例编写
想了解HIDL介绍的可以参考《HIDL概述》,本篇文章主要介绍HIDL的详细编译流程及简单的客户端应用(C++跟Android客户端的应用)一、准备工作1、整一套源码,Android O或者Android P的2、保证全套代码已经全编译,原生代码全编译命令source build/envset.sh lunch make3、hidl-gen工具已经安装,安装命令make hidl-gen二、hidl-gen工具介绍系统定义的所有的.hal接口,都是通过hidl-gen工具转.转载 2020-09-02 15:59:06 · 2746 阅读 · 4 评论 -
Android C++的sp指针简介
智能指针是C++ 中的一个概念,因为C++ 本身不具备垃圾回收机制,而且指针也不具备构造函数和析构函数,所以为了实现内存( 动态存储区) 的安全回收,必须对指针进行一层封装,而这个封装就是智能指针C++的智能指针有很多实现方式,有auto_ptr , unique_ptr , shared_ptr 三种,还有其他的android 中的sp 句柄类实际上就是google 实现的一种强引用的智能指针Android 中封装了sp<> 强指针,wp<>弱指针的操作:强指针与.转载 2020-08-31 15:45:32 · 700 阅读 · 0 评论 -
BSP与HAL关系
板级支持包(BSP)(Board Support Package)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。硬件抽象层(HAL)是位于操作系统 内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。就我跟人理解而言BSP就是硬件驱动程序,它包含了操控硬件的必要转载 2020-08-31 13:21:57 · 1077 阅读 · 0 评论 -
Android分屏
public class MainActivity extends AppCompatActivity { @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activit.原创 2020-08-21 14:28:09 · 461 阅读 · 1 评论 -
Android系统SystemUI启动过程解析
Android 系统 SystemUI 介绍Android 的 SystemUI 其实就是 Android 的系统界面,它包括了界面上方的状态栏 status bar,下方的导航栏Navigation Bar,锁屏界面 Keyguard ,电源界面 PowerUI,近期任务界面 Recent Task 等等。对于用户而言,SystemUI 的改动是最能直观感受到的。因此,每个 Android 版本在 SystemUI 上都有比较大的改动。而对开发者而言,理解 Android SystemUI 对优化An转载 2020-08-21 10:59:20 · 459 阅读 · 0 评论 -
all-makefiles-under函数
include $(call all-makefiles-under,$(LOCAL_PATH))在Android的源代码中的mk文件中,我们经常会看到上面这句话,从字面意思看是,include目录下所有的mk文件,那么这里面有两个坑,1.只include Android.mk文件,叫其他名字的mk文件,不include2.只include这个$(LOCAL_PATH)一级目录下的Android.mk文件,而不是所有子目录以及子目录下的Android.mk文件最后,看一下这个函数的源代码加强一下印象转载 2020-08-19 10:43:05 · 1359 阅读 · 0 评论 -
Android 源码编译 指定userdata.img、system.img、cache.img容量大小
修改build/target/board/generic_x86(对应编译平台)/BoardConfig.mk文件BOARD_SYSTEMIMAGE_PARTITION_SIZE := 576716800BOARD_USERDATAIMAGE_PARTITION_SIZE := 1073741824#209715200BOARD_CACHEIMAGE_PARTITION_SIZE := 138412032#69206016BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := e转载 2020-08-17 09:18:02 · 562 阅读 · 0 评论 -
APK的几种安装方式
一、如何将带源码的APK预置进系统 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例 将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录 在 Test 目录下创建一个名为 Android.mk的文件,内容如下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS :=转载 2020-08-17 09:02:44 · 2613 阅读 · 0 评论 -
Android各种img文件作用以及系统启动过程
首先通过编译,先将android内核编译成功。正常情况在目录out/target.product/generic/(但是有的就没有generic文件,如freescale和iriver,但是lonshinetech下面就有这个文件,依据情况而定,只要能找到生成的三个文件就可以。例如:~/freescale/R9.2/out/target/product/imx51_bbg$ )下会生成三个文件:ramdisk.img,system.img,userdata.img。这三个文件的作用如下:1,ram.转载 2020-08-13 09:56:27 · 2371 阅读 · 0 评论 -
Android预置Apk方法
一、预置apk方法1:如何将带源码的APK预置进系统在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例 将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录 在 Test 目录下创建一个名为 Android.mk的文件,内容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS :=转载 2020-08-12 08:44:30 · 1785 阅读 · 0 评论 -
Android项目中的armeabi,armeabi-v7a和x86
1.区别 这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库...转载 2020-08-11 16:58:35 · 572 阅读 · 0 评论 -
Android系统添加预置APP(so库自动释放)
将APK直接放入系统目录中,会导致APK找不到so文件。正常情况下的安装是使用PackageManager,它会将so文件拷贝到系统读取的so目录(system/lib或system/lib64)下,提供给App使用,系统应用不会使用PackageManager去安装,所以在使用系统应用前,需要提前将so文件拷贝到system/lib或system/lib64目录下。那么有没有方法,在系统应用预装时,就自动提取apk中的so拷贝到system/lib或system/lib64目录下呢。下面阐述一下系统预置转载 2020-07-29 14:28:05 · 3436 阅读 · 0 评论 -
Android framework添加按键
版本:Android6.1首先看KeyEvent里的一段注释\frameworks\base\core\java\android\view\KeyEvent.java可以看到修改涉及到的文件:frameworks/native/include/android/keycodes.hframeworks/native/include/input/InputEventLabels.hframeworks/base/core/res/res/values/attrs.xml以及Key转载 2020-07-14 09:00:49 · 508 阅读 · 0 评论 -
Android系统进程优先级策略 ADJ
本篇文章是基于Android9.0来介绍Android系统关于进程的优先级是如何定义和管理的。概述1.进程进程-Process 是程序的一个运行实例。通常会有唯一一个pid与之对应。但pid不是绝对唯一的,当进程死亡后pid会被回收给另外的进程使用。在Android世界里,App开发者很容易认为系统的四大组件就是进程的载体,实际上,它们不能算是完整的进程实例,最多只能算是进程的组成部分。由于Android系统框架中,系统对进程的创建和管理进行了封装,每当我们在启动四大组件Activity, Br转载 2020-07-08 13:16:40 · 4411 阅读 · 0 评论 -
Android JNI(一) NDK与JNI基础
本系列文章如下:Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示本片文章大纲如下:1、导读 2、什么是NDK 3、为什么使用NDK 4、NDK到SO 5、JNI一、导读在Android OS上开.转载 2020-07-08 09:19:30 · 471 阅读 · 0 评论 -
Android编译系统参考手册
build/core/definitions.mk定义了公共的编译系统变量ALL_*,还定义了很多命令用来编译各种各样的目标,其它地方用来构建最终目标,build/core/main.mk,build/core/Makefile将用到这些变量ALL_DOCS所有文档的全路径ALL_DOCS的赋值在droiddoc.mk里:ALL_DOCS+=$(full_target)full_target:=$(calldoc-timestamp-for,$(LOCAL_MODULE...转载 2020-07-08 08:55:19 · 947 阅读 · 0 评论 -
Android 第三方的动态库编译到Android系统的/system/lib目录
1 .命令行切换的Android源码根目录的根目录,执行$ source build/envsetup.sh或者$ . builid/envsetup.sh命令。2 . 执行命令$ lunch full_eng,或者执行需要的选项。3 . 执行命令$ make -j8(编译Android源码)4 .把第三方的软件库复制到Android源码根目录/out/target/product/generic/system/lib下面。5 . 重新打包的意思就是由/out/target/produc..转载 2020-05-21 13:20:47 · 3374 阅读 · 0 评论 -
Android Framework内部启动流程
App启动过程导图点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求 system_server进程接收到请求后,向zygote进程发送创建进程的请求 Zygote进程fork出新的子进程,即App进程 App进程,通过Binder IPC向sytem_server进程发起attachApplication请求 system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进转载 2020-05-21 11:54:11 · 336 阅读 · 0 评论 -
Android 开发系统APK,找不到so文件
正常安装非系统APK是用PackageManager,它会将so文件拷贝到系统读取文件夹目录下供APK使用,但是开发系统APK时是不会使用PackageManager进行安装的,所以需要将so文件拷入到system/lib,APK就可以调用到so文件了。...原创 2020-05-15 16:25:43 · 1539 阅读 · 0 评论 -
无码APK和依赖库预置进系统进行升级
LOCAL_PATH := $(call my-dir)#预置aliuyi.apkinclude $(CLEAR_VARS)LOCAL_MODULE := wwwa.apkLOCAL_SRC_FILES := aliuyi.apkLOCAL_MODULE_TAGS := optionalLOCAL_MODULE_CLASS := APPSLOCAL_CERTIFICATE := PRESIGNEDLOCAL_MODULE_PATH := $(TARGET_OUT)/appinclud.原创 2020-05-12 15:15:10 · 5056 阅读 · 0 评论 -
Android Service数据结构
准备本文以bindService为例来说明问题,因为bindService的流程比startService复杂的多。在看图前需要一些准备。Framework中,ServiceRecord对应到应用层的一个Service。包括ServiceRecord在内的几个与Service管理相关的数据结构在下面简要说明(列出的成员变量忽略了其他与本文分析无关的变量)。 ServiceRecord :一个表示应用层的Service的数据结构。 因为bindService是可以跨进程的,在A进程绑定的服务可转载 2020-05-12 14:07:36 · 367 阅读 · 0 评论 -
Android与Linux区别
众所周知Google的Android系统跟Linux系统有着千丝万缕的关系,可究竟有什么关系呢?有人说Android是Android,Linux是Linux,两个只是kernel一样调度机制一样,其他没一毛钱关系,有人说Android说到底就是个Linux系统,可如果是这样,那么为什么Android系统能这么火,其他的Linux发行版(Ubuntu/Fedora/centos等)为什么在移动端火不...转载 2020-05-08 09:26:48 · 1758 阅读 · 0 评论 -
Android应用视图管理者Window
从这篇文章开始,我们来分析和Window以及WindowManager相关的内容,Abstract base class for a top-level window look and behavior policy.Window在Android是一个窗口的概念,日常开发中我们和它接触的不多,我们更多接触的是View,但是View都是通过Window来呈现的,Window是View的直接...转载 2020-05-07 10:06:07 · 203 阅读 · 0 评论 -
Android布局解析者LayoutInflater
LayoutInflater可以把xml布局文件里内容加载成一个View,LayoutInflater可以说是Android里的无名英雄,你经常用的到它,却体会不到它的好。因为隔壁的iOS兄弟是没有 这种东西的,他们只能用代码来写布局,需要应用跑起来才能看到效果。相比之下Android的开发者就幸福的多,但是大家有没有相关xml是如何转换成一个View的,今天我们就来分析 这个问题。Layou...转载 2020-05-07 10:03:53 · 372 阅读 · 0 评论 -
Android应用窗口管理服务WindowServiceManager
WindowManagerService是位于Framework层的窗口管理服务,它的职责是管理系统中的所有窗口,也就是Window,关于Window的介绍,我们在文章03Android显示框架:Android应用视图的管理者Window已经 详细分析过,通俗来说,Window就是手机上一块显示区域,也就是Android中的绘制画布Surface,添加一个Window的过程,也就是申请分配一块Su...转载 2020-05-07 09:35:31 · 945 阅读 · 0 评论 -
Android窗口管理框架概述
从上图可以看出,Android的显示系统分为3层:UI框架层:负责管理窗口中View组件的布局与绘制以及响应用户输入事件 WindowManagerService层:负责管理窗口Surface的布局与次序 SurfaceFlinger层:将WindowManagerService管理的窗口按照一定的次序显示在屏幕上在Android显示框架里有这么几个角色:Activity:应用视...转载 2020-05-07 08:17:13 · 255 阅读 · 0 评论 -
Android APK加载流程
我们前面说过APK可以分为代码与资源两部分,那么在加载APK时也会涉及代码的加载和资源的加载,代码的加载事实上对应的就是Android应用进程的创建流程,关于这一块的内容我们在文章01Android进程框架:进程的创建、启动与调度流程已经分析过,本篇文章 我们着重来分析资源的加载流程。我们知道在代码中我们通常会通过getResource()去获取Resources对象,Resource对象是应...转载 2020-05-06 14:44:41 · 1255 阅读 · 0 评论 -
Android APK打包流程
Android的包文件APK分为两个部分:代码和资源,所以打包方面也分为资源打包和代码打包两个方面,这篇文章就来分析资源和代码的编译打包原理。APK整体的的打包流程如下图所示:具体说来:通过AAPT工具进行资源文件(包括AndroidManifest.xml、布局文件、各种xml资源等)的打包,生成R.java文件。 通过AIDL工具处理AIDL文件,生成相应的Java文件。 ...转载 2020-05-06 14:42:50 · 789 阅读 · 0 评论