<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[阙靖的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/quejing1992</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; quejing1992]]></copyright><item><title><![CDATA[Android Systrace工具]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/107067665</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/107067665</guid><author>quejing1992</author><pubDate>Thu, 02 Jul 2020 11:36:29 +0800</pubDate><description><![CDATA[Android Systrace工具1. systrace命令1.1 命令获取1.2 基本语法2. 报告浏览2.1 快捷键2.2 报告阅读
摘抄自：https://developer.android.com/topic/performance/tracing
Systrace是Android平台提供的一款用于记录短期内设备活动的工具，记录的结果会集成在一个HTML文件中。
1. systrace命令
1.1 命令获取
Systrace工具通过systrace命令进行调用。要运行systrace命令，需要做以]]></description><category></category></item><item><title><![CDATA[SEAndroid 相关知识]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/103278823</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/103278823</guid><author>quejing1992</author><pubDate>Mon, 02 Dec 2019 16:24:14 +0800</pubDate><description><![CDATA[本文图片和内容摘自罗升阳的博客《SEAndroid安全机制框架分析》
如需了解详细内容，请访问原博客。
1. 整体框架




SEAndroid安全机制框架

SEAndroid安全机制包含有内核空间和用户空间两部分支持：

在内核空间，主要涉及到一个称为SELinux LSM的模块
在用户空间，涉及到Security Context、Security Server和SEAndroid Poli...]]></description><category></category></item><item><title><![CDATA[多点触控（MT）协议]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/103054837</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/103054837</guid><author>quejing1992</author><pubDate>Wed, 13 Nov 2019 19:23:59 +0800</pubDate><description><![CDATA[Copyright: |copy| 2009-2010	Henrik Rydberg rydberg@euromail.se
此文章为个人翻译英文文档的产物，仅当做个人笔记使用，不喜勿喷！！
对于翻译内容有强迫症的读者请勿阅读此文档！！
阅读过程中如有不恰当之处欢迎交流指正～～
如需转载，请注明出处！
介绍
为了能够使用多点触控和多用户设备的全部功能，需要一种从各类触控设备报告详细数据的方法，例如...]]></description><category></category></item><item><title><![CDATA[notifier通知链机制]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/102498735</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/102498735</guid><author>quejing1992</author><pubDate>Fri, 11 Oct 2019 12:04:05 +0800</pubDate><description><![CDATA[1. 目的
Linux内核中各个子系统相互依赖，当其中某个子系统状态发生改变时，就必须使用一定的机制告知使用其服务的其他子系统，以便其他子系统采取相应的措施。为满足这样的需求，内核实现了事件通知链机制（notificationchain）。
2. 范围
通知链只能用在各个子系统之间，而不能在内核和用户空间进行事件的通知。
3. 代码位置
组成内核的核心系统代码均位于kernel目录下，通知链表位于...]]></description><category></category></item><item><title><![CDATA[常用命令]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/100997323</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/100997323</guid><author>quejing1992</author><pubDate>Thu, 10 Oct 2019 14:17:35 +0800</pubDate><description><![CDATA[le32_to_cpu() 将小端存储数据转为CPU适配数据
cpu_to_le32() 将数据转换为小端存储
be32_to_cpu() 将大端存储数据转为CPU适配数据
cpu_to_be32() 将数据转换为大端存储
作用：在一些对于数据的字节顺序有要求的地方，不要去假设字节序，即不要去默认CPU采用的是大端存储或者小端存储，而是采用上述的转换函数进行转换。




...]]></description><category></category></item><item><title><![CDATA[Linux输入事件编码]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/102398550</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/102398550</guid><author>quejing1992</author><pubDate>Thu, 10 Oct 2019 14:12:58 +0800</pubDate><description><![CDATA[Linux中的输入协议采用一系列的类型和编码向用户空间表示输入设备的值。
单一的硬件事件可以产生多个输入事件，每个输入事件包含新的单个数据项值。使用一个特殊的事件类型EV_SYNC将输入事件分成不同的数据包，数据包中输入数据的改变在时间上是在同一时刻出现的。在下文中，术语“事件”是指单个输入事件，包括类型，编码和值。
输入协议是一种状态性的协议，只有在事件编码的值改变之后才需要发送事件。尽管如此，...]]></description><category></category></item><item><title><![CDATA[Linux中的module_init与module_exit]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/102468988</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/102468988</guid><author>quejing1992</author><pubDate>Thu, 10 Oct 2019 12:18:38 +0800</pubDate><description><![CDATA[1. module_init与module_exit宏
module_init与module_exit宏定义在include/linux/module.h文件中，部分代码如下：
#ifndef MODULE
/**
 * module_init() - driver initialization entry point
 * @x: function to be run at kernel boo...]]></description><category></category></item><item><title><![CDATA[可变参数函数]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/101523652</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/101523652</guid><author>quejing1992</author><pubDate>Fri, 27 Sep 2019 17:36:05 +0800</pubDate><description><![CDATA[可变参数相关的宏
首先先了解几个宏：
typedef __gnuc_va_list va_list;
#define va_start(v,l)	__builtin_va_start(v,l)
#define va_end(v)	__builtin_va_end(v)
#define va_arg(v,l)	__builtin_va_arg(v,l)

这几个宏可以在stdarg.h中找到。va是...]]></description><category></category></item><item><title><![CDATA[DEVICE_ATTR使用]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/101074849</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/101074849</guid><author>quejing1992</author><pubDate>Fri, 20 Sep 2019 20:09:14 +0800</pubDate><description><![CDATA[1. 作用
使用DEVICE_ATTR往sysfs中为device添加“属性文件”，并对该文件添加相关操作，从而实现运行过程中动态控制device。
2. 一些定义
首先看一下与DEVICE_ATTR相关的宏定义，定义位置在kernel/include/linux/device.h中。
#define DEVICE_ATTR(_name, _mode, _show, _store) \
     ...]]></description><category></category></item><item><title><![CDATA[device_init_wakeup()]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/100899826</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/100899826</guid><author>quejing1992</author><pubDate>Mon, 16 Sep 2019 20:18:37 +0800</pubDate><description><![CDATA[device_init_wakeup()的内容如下：
static inline int device_init_wakeup(struct device *dev, bool val)
{
    device_set_wakeup_capable(dev, val);   //设置设备能不能被唤醒
    device_set_wakeup_enable(dev, val);     //设置...]]></description><category></category></item><item><title><![CDATA[git学习——rebase]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/100889762</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/100889762</guid><author>quejing1992</author><pubDate>Mon, 16 Sep 2019 16:37:32 +0800</pubDate><description><![CDATA[问题描述
随着项目的进行，我们可能会进行多次的commit，其中，可能有部分commit是没什么作用的（可能只是每天进行一次commit，防止代码丢失什么的）。
对于这些无用的commit，一方面，会给查看历史和合并分支造成困难；另一方面，像我这样有强迫症的人总是想着把它清理掉。这里所说的清理指的是将多个commit合并为一个commit。
如何合并多个commit呢？rebase可以实现这个功能...]]></description><category></category></item><item><title><![CDATA[Maven学习（三）——POM详细内容]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/86682279</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/86682279</guid><author>quejing1992</author><pubDate>Thu, 28 Feb 2019 13:13:12 +0800</pubDate><description><![CDATA[摘自：http://www.runoob.com/maven/maven-pom.html
1. POM简介
POM( Project Object Model，项目对象模型 ) 是 Maven 工程的基本工作单元，是一个XML文件，包含了项目的基本信息，用于描述项目如何构建、声明项目依赖等等。
所有 POM 文件都需要 project 元素和三个必需字段：groupId，artifactId，v...]]></description><category></category></item><item><title><![CDATA[Maven学习（二）——项目创建]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/86681221</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/86681221</guid><author>quejing1992</author><pubDate>Fri, 15 Feb 2019 20:32:14 +0800</pubDate><description><![CDATA[1. 创建一个Maven项目
当需要创建一个Maven项目是，首先定位到目标文件夹，输入以下命令：
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=fa...]]></description><category></category></item><item><title><![CDATA[Maven学习（一）——简介]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/86669317</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/86669317</guid><author>quejing1992</author><pubDate>Mon, 28 Jan 2019 20:02:13 +0800</pubDate><description><![CDATA[1. Maven简介
Maven是基于项目对象模型(POM project object model)，可以通过一小段描述信息（配置）来管理项目的构建，报告和文档的软件项目管理工具。
Maven主要目标是提供给开发人员：

项目是可重复使用，易维护，更容易理解的一个综合模型。
插件或交互的工具，这种声明性的模式。

Maven项目的结构和内容在一个XML文件中声明，pom.xml 项目对象模型（P...]]></description><category></category></item><item><title><![CDATA[Gradle学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/85041484</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/85041484</guid><author>quejing1992</author><pubDate>Tue, 18 Dec 2018 21:44:49 +0800</pubDate><description><![CDATA[1. 整体说明

Gradle使用 Groovy 语言编写脚本，用于描述构建；
Gradle 中的每一个构建脚本使用UTF-8进行编码保存，并命名为 build.gradle ；
Gradle脚本用于处理项目和任务；
项目由不同任务组成；
任务用于执行某一块工作（原子性工作），如：编译一些类、创建JAR、产生Javadoc等。

2. 简单构建脚本测试
新建一个build.gradle文本，并将下...]]></description><category></category></item><item><title><![CDATA[MPAndroidChart的使用]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/83413353</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/83413353</guid><author>quejing1992</author><pubDate>Wed, 14 Nov 2018 20:05:16 +0800</pubDate><description><![CDATA[MPAndroidChart 时Android软件中常用的开源图表库。利用它可以绘制各类统计图表，包括线型图、饼图、柱状图等。
它的github地址是：https://github.com/PhilJay/MPAndroidChart
1. 线型图简单使用
在项目中有用到线型图用于实时显示曲线。现对其的使用过程进行总结。
在使用MPAndroidChart的线型图时，使用到的控件：
&amp;amp;lt;com...]]></description><category></category></item><item><title><![CDATA[Android软件开发中的经验总结]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/83006381</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/83006381</guid><author>quejing1992</author><pubDate>Thu, 01 Nov 2018 11:06:57 +0800</pubDate><description><![CDATA[1. 如何让APP不休眠
在需要不休眠的Activity的onCreate方法中，在setContentView()方法前加入以下语句：
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
		WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

例如：
	prot...]]></description><category></category></item><item><title><![CDATA[ARM汇编语言常用知识]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/83279420</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/83279420</guid><author>quejing1992</author><pubDate>Mon, 22 Oct 2018 21:40:14 +0800</pubDate><description><![CDATA[1. 汇编基本知识
在汇编语言中包含有两种指令，分别为：

指令：经过汇编器编译后，在执行阶段起作用，由CPU执行；
伪指令：在编译阶段起作用，用于指导汇编如何进行，不生成机器码。

在编写汇编语言时，指令不区分大小写，即mov与MOV意义相同，代码风格保持一致即可。一般在Windows中常采用大写，在GNU中采用小写。
在汇编语言中，段落的注释采用
/** 注释 **/

单句的注释采用符号@，...]]></description><category></category></item><item><title><![CDATA[Android中的shape属性]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/82978044</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/82978044</guid><author>quejing1992</author><pubDate>Tue, 09 Oct 2018 10:09:14 +0800</pubDate><description><![CDATA[在Android软件的编写过程中，可以通过使用shape可以进行一些简单的UI开发。
在shape属性中，支持的形状类型包括：
		rectangle：矩形
        oval：椭圆形
        line：线条
        ring：环形

shape中，包含的基本属性有：corners、solid、gradient、stroke、padding、size等。下面分别说是这几个属性...]]></description><category></category></item><item><title><![CDATA[Android 软件屏幕适配]]></title><link>https://blog.youkuaiyun.com/quejing1992/article/details/82910369</link><guid>https://blog.youkuaiyun.com/quejing1992/article/details/82910369</guid><author>quejing1992</author><pubDate>Sun, 30 Sep 2018 16:00:44 +0800</pubDate><description><![CDATA[在项目中，之前使用的是分辨率为1280*800的7寸屏幕，由于业务需要，现在更换为1024*600分辨率的7寸屏。更换完成后，由于之前的Android软件没有做屏幕的适配，从而导致软件界面显示不完整。因此需要进行屏幕适配。
此次适配需要达到的目标是在这两种分辨率下，显示的界面相同。
1. 基础知识
在进行屏幕适配之前，先要了解一下与屏幕有关的几个概念：屏幕尺寸、屏幕分辨率、像素密度。
1.1 屏幕...]]></description><category></category></item></channel></rss>