Android代码经验
文章平均质量分 78
nwpushuai
总结经验,记录学习
展开
-
Android8.0.0-r4——Property Service的启动与初始化
Property Service的启动与初始化init进程启动,分为两个阶段,阶段一主要是添加脚本执行环境,以及初始化必要的文件系统目录。接着通过execv来执行一个参数为--second-stage的新的init进程Image以取代之前的init进程Image。阶段一请参考http://blog.csdn.net/nwpushuai/article/details/79346665执行第二阶段的...原创 2018-03-04 22:55:29 · 3817 阅读 · 0 评论 -
Android8.0.0-r4——广播的注册、发送和接收过程
原网址:https://blog.csdn.net/itachi85/article/details/716292011.广播的注册过程BroadcastReceiver的注册分为两种,分别是静态注册和动态注册,静态注册在应用安装时由PackageManagerService来完成注册过程,关于这一过程,我会在后续的介绍PackageManagerService文章中详细介绍。这里只介绍Broad...转载 2018-03-23 00:51:36 · 1708 阅读 · 0 评论 -
Android8.0.0-r4——Content Provider的启动过程
原网址:https://blog.csdn.net/itachi85/article/details/72618688前言Content Provider做为四大组件之一,通常情况下并没有其他的组件使用频繁,但这不能作为我们不去深入学习它的理由。关于Content Provider一篇文章是写不完的,这一篇文章先来介绍它的启动过程。1.query方法到AMS的调用过程在Android IPC机制(...转载 2018-03-23 00:55:23 · 726 阅读 · 0 评论 -
LK的启动过程
原网址:https://blog.csdn.net/jmq_0000/article/details/7378348LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码 ,little kernel 是小内核小操作系统。 LK 代码 在 bootable/bootload...转载 2018-03-23 07:39:01 · 1034 阅读 · 0 评论 -
Android8.0.0-r4的Binder进程间通信机制
Android8.0.0-r4的Binder进程间通信机制 Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一。Android中的四大组件Activity,Service,Broadcast,ContentProvider,不同的App等都运行在不同的进程中,它是这些进程间通讯的桥梁。正如其名“粘合剂”一样,它把系统中各个组件粘...原创 2018-03-23 07:59:47 · 2429 阅读 · 0 评论 -
Android8.0.0-r4的Binder进程间通信机制驱动详解
1、Binder进程间通信库的类概念模板类BnIterface 模板类BnIterface继承自BBinder类,BBinder类有两个重要的成员函数transact和OnTransact,当一个Binder代理对象通过Binder驱动程序向一个Binder本地对象发出一个进程间通信请求时,Binder驱动程序就会调用Binder本地对象的成员函数transact来处理该请求。OnTrans...原创 2018-03-23 12:52:36 · 689 阅读 · 1 评论 -
Android Framework 记录之一
原网址: https://blog.csdn.net/banketree/article/details/24718899简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework框架层了。记录1、下载源码,目录如下:2、Android系统的层次如下:3、项目目录简单分析如下:4、telphony目录 文件 描述CellIde...转载 2018-03-24 11:17:39 · 508 阅读 · 0 评论 -
Android SELinux avc dennied权限问题解决方法
原网址:https://blog.csdn.net/tung214/article/details/727340861. 概述SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“万能的root权限”,也不能获取全部的权限。本文旨在结合具体案例,讲解如何...转载 2018-03-31 08:12:25 · 4297 阅读 · 0 评论 -
Android8.0.0-r4的OTA升级--差分包的制作
1、差分包的制作1.1 update.zip包的目录结构 |----boot.img #boot.img是更新boot分区所需要的文件。boot.img主要包括kernel+ramdisk |----system/ #system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。可以将Android...原创 2018-03-26 01:17:28 · 2802 阅读 · 0 评论 -
内存分析工具
内存分析工具1. Lint 使用 Lint 代码静态检查1. Lint 是 Android Studio 自带的工具,使用很简单找到 Analyze -> Inspect Code 然后选择想要扫面的区域即可。2. 选择 Lint 扫描区域。3. 对可能引起性能问题的代码,Lint 都会进行提示。2. Memory Monitor Memory Monitor可以轻松地监视应用程序的性...原创 2018-03-23 00:19:39 · 652 阅读 · 0 评论 -
Android8.0.0-r4——Binder进程间通信机制的Java接口
Java代码可以通过JNI方法来调用C/C++代码, 因此,Andrnid系统在应用程序框架层中提供了Binder进程间通信机制的Java接口, 它们通过JNI方法来调用Binde库的C/C++接口, 从而提供了执行Binder进程间通信的能力。Binder进程间通信机制的Java接口: 1、Service Manager的Java代理对象的获取过程 2、Java服务接口的定义和解析 ...原创 2018-03-12 23:35:47 · 267 阅读 · 0 评论 -
init.rc配置经验
1.串口开放root权限 在init.rc中删去disabled和user root service console /system/bin/sh class core console #disabled #user ...原创 2018-02-26 01:36:08 · 683 阅读 · 0 评论 -
Android8.0.0-r4——apk编译过程
原网址:http://blog.sina.com.cn/s/blog_a46817ff0102uylb.html在编写android应用时,写好java代码后,集成环境直接帮我们生成了可安装的apk,但有时需要自动化的去生成个性化apk的时候,我们就需要编写脚本或代码来自动生成一个apk,在生成apk之前必须了解下android编译apk的过程;步骤中提到的工具如下表:名称功能介绍在操作系统中的路...转载 2018-03-04 23:18:21 · 845 阅读 · 0 评论 -
ANR机制以及问题分析
原网址:http://duanqz.github.io/2015-10-12-ANR-AnalysisANR机制以及问题分析目录1. 概览2. ANR机制2.1 ANR的监测机制2.1.1 Service处理超时2.1.2 Broadcast处理超时2.1.3 Input处理超时2.1.4 小结2.2 ANR的报告机制2.2.1 CPU的使用情况2.2.2 函数调用栈3. 问题分析方法3.1 日志...转载 2018-03-04 23:26:29 · 673 阅读 · 0 评论 -
Watchdog机制以及问题分析
原网址:http://duanqz.github.io/2015-10-12-Watchdog-AnalysisWatchdog机制以及问题分析目录1. 概览2. Watchdog机制2.1 Watchdog的初始化2.2 添加Watchdog监测对象2.3 Watchdog的监测机制3. 问题分析方法3.1 日志获取3.2 问题定位3.3 场景还原4. 实例分析5. 总结请尊重原创版权,转载注明...转载 2018-03-04 23:29:26 · 1086 阅读 · 0 评论 -
Android8.0.0-r4——BatteryStatsService(一)
1. 概要手机耗电量主要涵盖两个方面:硬件层面的功耗和软件层面的电量。本文介绍的电量统计的原理,并不涉及到硬件层面的功耗设计,仅从软件层面围绕以下几个问题进行分析: Android如何启动电量统计服务? 电量统计涉及到哪一些硬件模块? 如何计算一个应用程序的耗电量? 电量统计需要完成哪些具体工作?手机有很多硬件模块:CPU,蓝牙,GPS,显示...原创 2018-03-04 23:37:04 · 3112 阅读 · 0 评论 -
Android8.0.0-r4系统的启动过程
Init进程是Linux系统中用户空间的第一个进程,其进程号为1。Android本质上就是一个基于Linux内核的操作系统。与 Linux的最大的区别是, Android 在应用层专门为移动设备添加了一些特有的支持。例如进程间通信机制中增加的Binder通信等。Android系统启动流程的前几步:1.启动电源以及系统启动 当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导...原创 2018-02-24 23:57:05 · 2220 阅读 · 0 评论 -
Android8.0.0-r4 init进程分析 ueventd
ueventd主要是负责设备节点的创建、权限设定等一些列工作。服务通过使用uevent,监控驱动发送的消息,做进一步处理。ueventd实际和init是同一个binary,只是走了不同分支,可参看前一部分。ueventd的整体代码比较简单,主要是三部分: 解析ueventd.rc 初始化设备信息 循环polling uevent消息主函数及相关功能如下如下:1.ueventd.ueventd_ma...原创 2018-02-25 23:36:33 · 969 阅读 · 0 评论 -
Android8.0.0-r4 init.rc文件解析
一、简述 Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action, Commands,Services, Options. 在init.rc 文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的,如果需要在单词内使用空格,那么得使用转义字符"\", 如果在一行的末尾有一个反斜杠,那么是换行折叠符号,应该和下一行合并...原创 2018-02-26 00:33:45 · 1177 阅读 · 1 评论 -
Java 虚拟机垃圾回收机制
Java 虚拟机垃圾回收机制概述垃圾回收是一种自动的存储管理机制。 当一些被占用的内存不再需要时,就应该予以释放,以让出空间,这种存储资源管理,称为垃圾回收(Garbage Collection)。 垃圾回收器可以让程序员减轻许多负担,也减少程序员犯错的机会。哪些对象需要回收?自动垃圾回收机制就是寻找Java堆中的对象,并对对象进行分类判别,寻找出正在使用的对象和已经不会使用的对象,然后把那些不会...原创 2018-03-21 23:18:43 · 202 阅读 · 0 评论 -
Java 虚拟机内存分配机制
Java 虚拟机内存分配机制内存区域划分对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的“堆”对应内存模型的 Java 堆,“栈”是指虚拟机栈,然而 Java 内存模型远比这更复杂,想深入了解 Java 的内存,还是有必要明白整个内存区域分。了解 Java GC 机制,必须先清楚在 JVM 中内存区域的划分。 在 Java 运行时的数据区里,由...原创 2018-03-21 23:19:34 · 176 阅读 · 0 评论 -
svn diff 增加颜色,colordiff安装
svn diff 增加颜色,colordiff安装svn没有颜色,以为配置后就会有颜色,百度后发现svn就是没有颜色用第三方工具colordiff给svn增加颜色,安装记录 1、下载官网: https://www.colordiff.org/下载: https://www.colordiff.org/colordiff-1.0.18.tar.gz 2、解压安装tar -xzvf colordiff...原创 2018-06-19 13:27:06 · 694 阅读 · 0 评论 -
Gerrit 服务器插件安装-示例插件delete project
gerrit2.X 中没法直接删除一个项目,之前需要手工删除,后来社区提供了一个插件delete project来搞定这个事,安装方法如下:到 gerritforge,找到对应的 gerrit 版本号,gtt 使用的是 gerrit 2.12,所以就是 Plugins-stable-2.12 如下图:点击plugin-delete-project-stable-2.12,并找到对应的jar下载地址...原创 2018-06-19 14:19:30 · 8532 阅读 · 2 评论 -
bugzilla的模块安装
1.必须安装gcc编译器2.mod_headers和mod_expires模块安装这两个模块解决方法:启用apache的mod_headers和mod_expiressudo a2enmod headers;sudo a2enmod expires; sudo service apache2 restart 2. mod_perl模块 解决方法:安装mod_per...原创 2018-06-20 14:40:41 · 1020 阅读 · 0 评论 -
深入剖析Android音频之AudioTrack
播放声音能够用MediaPlayer和AudioTrack,两者都提供了java API供应用开发人员使用。尽管都能够播放声音。但两者还是有非常大的差别的。当中最大的差别是MediaPlayer能够播放多种格式的声音文件。比如MP3。AAC,WAV,OGG。MIDI等。MediaPlayer会在framework层创建相应的音频解码器。而AudioTrack仅仅能播放已经解码的PCM流,假设是...转载 2019-01-07 10:15:49 · 28738 阅读 · 10 评论 -
Android P 添加系统服务示例
修改涉及的文件:framework/base/Android.bpframework/base/api/current.txtframework/base/core/java/android/app/CCCManager.javaframework/base/core/java/android/app/SystemServiceRegistry.javaframework/base/c...原创 2019-06-05 16:49:22 · 1441 阅读 · 0 评论 -
Android P 为系统AudioManager添加新的接口方法
整个需要添加的类均在frameworks\base\media\java\android\media 包下1.AudioManager.java中添加两个方法,设置音频流设备的音量和得到相关音量Index: AudioManager.java===================================================================--- A...原创 2019-06-05 17:09:50 · 1548 阅读 · 0 评论 -
Android P 添加app_process启动jar包示例
例子:tcl_preaudioinvoke.sh#!/system/bin/shbase=绝对路径变量export CLASSPATH=绝对路径地址exec app_process 目录文件夹 main函数内容示例:#!/system/bin/shbase=/productexport CLASSPATH=$base/framework/com.tcl.audio.prea...原创 2019-06-26 17:19:08 · 1492 阅读 · 0 评论 -
Android 进程通信之 ContentProvider 内容提供者
原网址:https://blog.csdn.net/u011240877/article/details/72848608When you are content to be simply yourself and don’t compare or compete, everyone will respect you.当你满足于做自己而不去比较或竞争时,每个人都会尊重你。读完本文你将了解:Cont...转载 2018-03-29 08:10:40 · 275 阅读 · 1 评论 -
Android中App耗电量统计核心函数和硬件耗电量统计
538 private void processAppUsage(SparseArray<UserHandle> asUsers) {539 final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null);540 mStatsPeriod = mTypeBatteryRe...原创 2018-04-04 12:54:14 · 735 阅读 · 0 评论 -
[Android Studio]Android Studio 三种添加插件的方式
何给Android Studio添加插件,添加插件的路径有三种,我把他们分类如下:点击设置小按钮点击[Plugins]这里展示的是你已经安装的插件,我们可以点击插件名称,查看插件的说明,下方的三个按钮是添加插件的三种路径,我们分别介绍:官方插件我们这里已Meteor为示例,首先点击官方插件这里我们可以搜索插件的名称,然后点击安装这里AS要求我们重启AS安装好后,我们可以在插件列表中查看民间插件...转载 2018-04-03 19:30:51 · 26547 阅读 · 0 评论 -
Android-内存优化
Android内存优化1、ART、DVM、JVM的区别DVM之所以不是一个JVM ,主要原因是DVM并没有遵循JVM规范来实现。DVM与JVM主要有以下区别。1.基于的架构不同 JVM基于栈则意味着需要去栈中读写数据,所需的指令会更多,这样会导致速度慢,对于性能有限的移动设备,显然不是很适合。 DVM是基于寄存器的,它没有基于栈的虚拟机在拷贝数据而使用的大量的出入栈指令,同时指令更紧凑更...原创 2018-03-21 23:29:28 · 339 阅读 · 0 评论 -
Android8.0.0-r4的Binder进程间通信机制简介
1、概念普及Linux进程 进程定义:进程是一个具有独立功能的程序的一次运行活动。其实进程有很多的定义,这个只是其中一种,那么android中的app就是一个程序,一个运行中的app就会至少对应一个进程,进程是一种动态的概念,程序是一种静态的概念。进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。 进程的...原创 2018-03-21 23:32:43 · 298 阅读 · 0 评论 -
Android8.0.0-r4的OTA升级--差分包升级
一、系统更新update.zip包的两种方式 1. 制作一个update.zip升级包用于升级系统。Android在升级系统时获得update.zip包的方式有两种。一种是离线升级,即手动拷贝升级包到SD卡(或NAND)中,通过settings-->Aboutphone-->SystemUpdate-->选择从SD卡升级。另一种是在线升级,即OTA Install(o...原创 2018-03-26 20:06:49 · 3962 阅读 · 0 评论 -
OTA升级常见问题
问题现象:在进行 OTA 升级测试时,下载成功了升级包,在点击立即更新后,手机一直处于提示“正在更新中”,没能重启进行升级。问题分析:经过分析发现,因为OTA 应用不具备系统权限。导致其无法在目录/cache/recovery 中创建command 文件并在该文件中写入命令,从而导致 OTA 应用无法通过这种预定的方式重启机器并进入recovery 模式,无法实现正常 OTA 升级。解决方案:通过...原创 2018-03-27 01:14:12 · 10331 阅读 · 0 评论 -
Android8.0.0-r4的OTA升级流程
原网址:https://blog.csdn.net/dingfengnupt88/article/details/52875228 Android系统进行升级的时候,有两种途径,一种是通过接口传递升级包路径自动升级(Android系统SD卡升级),升级完之后系统自动重启;另一种是手动进入recovery模式下,选择升级包进行升级,升级完成之后停留在recovery界面,需要手动选择重启。前者多用于...转载 2018-03-27 01:14:29 · 2102 阅读 · 0 评论 -
本人的gpg公钥
发我密文可使用此公钥加密-----BEGIN PGP PUBLIC KEY BLOCK-----mQINBFqyg+8BEADTH427gAZZpRBtdTYLe/XLHLiCph6w5GhMwZdyJmvmK4Y6dQRlf5aPkA1DySV9sxJaGtha/LGzM0w0tzp9u0uga8WosObgcjTcILJSbkzDa6zR2dOJhP/DlGuTi/WOBVo/WCofYJRG...原创 2018-04-11 00:33:40 · 5187 阅读 · 0 评论 -
Android开源项目分类汇总
原网址:https://blog.csdn.net/prince77qiqiqq/article/details/51338330Android 开源项目第一篇——个性化控件(View)篇 包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、...转载 2018-04-03 18:13:17 · 601 阅读 · 0 评论 -
Android 源码启动虚拟机经验
export PATH=$PATH:/home/nwpushuai/Sources/Google/Android/Google/aosp/out/host/linux-x86/binexport ANDROID_PRODUCT_OUT=/home/nwpushuai/Sources/Google/Android/Google/aosp/out/target/product/genericexp...原创 2019-07-24 23:43:01 · 1686 阅读 · 0 评论 -
Android8.0.0-r4——Service代理对象的获取
Service组件将自己注册到ServiceManager中之后, 它就在Server进程中等待Client进程将进程间通信请求发送过来。Client进程为了和运行在Server进程中的Service组件通信, 首先要获得它的一个代理对象, 这是通过ServiceManager提供的Service组件查询服务来实现的。 要获得Service的代理对象,首先要通过Binder驱动程序来获得一个引用了...原创 2018-03-12 01:44:57 · 1062 阅读 · 0 评论