<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shell812的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shell812</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shell812]]></copyright><item><title><![CDATA[gin源码分析（2）gin启动http服务]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/137263796</link><guid>https://blog.youkuaiyun.com/shell812/article/details/137263796</guid><author>shell812</author><pubDate>Tue, 02 Apr 2024 11:24:45 +0800</pubDate><description><![CDATA[NEXT()调用c.handlers[c.index](c)执行第一个中间件，在调用第一个中间件函数M1执行中途调用了Next()，进入Next()，函数下标c.index++，指向下一个中间件函数，等待下一个中间件函数M2，以及M2后面的处理函数。直到所有的函数都调用完，回到M1，执行后面的逻辑，打印M1-B。停止就很简单，把该次的调用index数值设为abortIndex，abortIndex为handlers的最大数量combineHandlers函数里做了限制handler添加的最大数量。]]></description><category></category></item><item><title><![CDATA[gin源码分析（1）--初始化中间件，路由组与路由树]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/137263216</link><guid>https://blog.youkuaiyun.com/shell812/article/details/137263216</guid><author>shell812</author><pubDate>Tue, 02 Apr 2024 11:21:58 +0800</pubDate><description><![CDATA[Engine继承了RouterGroup，gin.Default()初始化了Engine与第一个RouterGroup，并初始化了两个默认的中间件，Logger(), Recovery()，他们的作用与配置上面代码中有介绍。只是利用上一个RouterGroup的Group函数创建一个新的RouterGroup，并把之前RouterGroup与Engine注册的中间件全部复制过来。gin.Use的核心功能为把传入进来的中间件合并到RouterGroup的Handlers数组中，代码如下。]]></description><category></category></item><item><title><![CDATA[Android ALSA音频系统架构分析（1）----从Loopback了解Audio]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/73467010</link><guid>https://blog.youkuaiyun.com/shell812/article/details/73467010</guid><author>shell812</author><pubDate>Mon, 19 Jun 2017 14:13:57 +0800</pubDate><description><![CDATA[Android音频系统是一套基于Linux ALSA上二次封装开发的一套音频系统，中间进行了很多的功能封装，但最终会用到Linux ALSA。所以在Hal层的类名都会包含ALSA。对于MTK的Android audio，MTK也有一定的介绍，先来大体了解一下：]]></description><category></category></item><item><title><![CDATA[SELinux/SEAndroid 实例简述（三）实例看SELinux/SEAndroid]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/58596377</link><guid>https://blog.youkuaiyun.com/shell812/article/details/58596377</guid><author>shell812</author><pubDate>Tue, 28 Feb 2017 14:46:59 +0800</pubDate><description><![CDATA[/************************************ Author：刘江明 * Environment：MTK Android 6.0* Date：2016年11月06日***********************************/





基础知识都已经学习完了，但是还不知道怎么样，下面从不同的场景，实现了几个例子，可以参考学习一下

对于/ex]]></description><category></category></item><item><title><![CDATA[SELinux/SEAndroid 实例简述（二） TE语言规则]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/54930246</link><guid>https://blog.youkuaiyun.com/shell812/article/details/54930246</guid><author>shell812</author><pubDate>Wed, 08 Feb 2017 18:03:50 +0800</pubDate><description><![CDATA[/************************************ Author：刘江明 * Environment：MTK Android 6.0* Date：2016年11月05日***********************************/





一. 基本语法

很多te文件集中在\external\sepolicy文件夹下，MTK也有很多自定义的在\]]></description><category></category></item><item><title><![CDATA[SELinux/SEAndroid 实例简述（一） 基础概念]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/54930027</link><guid>https://blog.youkuaiyun.com/shell812/article/details/54930027</guid><author>shell812</author><pubDate>Wed, 08 Feb 2017 17:57:15 +0800</pubDate><description><![CDATA[SELinux/SEAndroid 实例简述（一） 基础概念]]></description><category></category></item><item><title><![CDATA[从Jni到Java增加一个系统服务SystemServer，并通过getSystemService调用]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49819599</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49819599</guid><author>shell812</author><pubDate>Fri, 13 Nov 2015 16:20:56 +0800</pubDate><description><![CDATA[这里假设我们需要增加的服务名字为AudioTest。


Java层
我们先定义这个服务的接口，文件名为IAudioTest.aidl。里面包含这个服务所有的功能函数
IAudioTest.aidl: frameworks\base\core\java\android\service\audiotest\IAudioTest.aidl


package android.servi]]></description><category></category></item><item><title><![CDATA[Android Canvas API总结和使用方法]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49783487</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49783487</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 17:31:54 +0800</pubDate><description><![CDATA[Android Canvas API总结和使用方法]]></description><category></category></item><item><title><![CDATA[Android Paint API总结和使用方法]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49781397</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49781397</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 14:44:01 +0800</pubDate><description><![CDATA[Android Paint API总结和使用方法]]></description><category></category></item><item><title><![CDATA[Android Bitmap Api总结和使用方法]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49781255</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49781255</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 14:29:25 +0800</pubDate><description><![CDATA[在学习Bitmap之前先学习一下Bitmap是怎么创建在，Bitmap的构造方法都是私有的，所以无法直接调用Bitmap的构造方法。我们只能通过BitmapFactory类和Bitmap.createBitmap来创建Bitmap。所以，我们要先了解BitmapFactory


BitmapFactory API总结]]></description><category></category></item><item><title><![CDATA[Android 图片处理工具类汇总]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49781231</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49781231</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 14:27:44 +0800</pubDate><description><![CDATA[很有用的Android图片处理工具，实现各种图片处理效果]]></description><category></category></item><item><title><![CDATA[Android ContentProvider和ContentObserver 监控数据库变化  简单使用说明]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49781009</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49781009</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 14:16:16 +0800</pubDate><description><![CDATA[在网上很难找到ContentObserver的使用说明，大多都是监控系统的数据库的变化，或者很多文章都是ContentProvider和ContentObserver一起说明，导致内容很多，很乱。那问题来了，我们如何新建自己的ContentObserver来观察我们自己的数据呢，我们又如何用ContentObserver来观察数据库的每一行呢。
    所有这里我们先单独说明一ContentOb]]></description><category></category></item><item><title><![CDATA[Android用loadClass获取系统隐藏类和隐藏服务的方法]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49780949</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49780949</guid><author>shell812</author><pubDate>Wed, 11 Nov 2015 14:09:42 +0800</pubDate><description><![CDATA[我们需要获取的是Serial这个系统服务，这是一个系统服务，是不对外开放的。此服务的源码路径在Frameworks/base/services/java/com/android/server/SerialService.java，继承了ISerialManager。此服务的名称是serial




ServiceManager是系统内部对所有服务的管理类这个类并不是开放的，我们需要通过]]></description><category></category></item><item><title><![CDATA[android g-sensor 驱动源码分析]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49764235</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49764235</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 19:41:05 +0800</pubDate><description><![CDATA[环境：MTK　Android4.4

硬件：MT8127 MMA8653

日期：2015年6月19日



在MTK的Gsensor构架中有一个auto detect的功能，只要作用是可以添加多个GSensor驱动，然后会自动找到与硬件匹配的Gsensor驱动，这个功能是用hwmsen驱动模块来完成的。

先来看看驱动里是如何使用auto detect的


			1
			2
			3
	...]]></description><category></category></item><item><title><![CDATA[Android Sensor  (g-sensor) 系统源码分析]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49764157</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49764157</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 19:35:43 +0800</pubDate><description><![CDATA[探究一下Android的Sensor架构。主要目的是通过Sensor这个架构去初步了解Android系统是怎么的一个编程思想，整体架构和功能是怎么安排的。各个模块间是怎么进行通信和交互，最重要的了解一个整个数据流是怎么传送的。更要提高自己去大型源码的处理能力，这里以Gsensor为例



源码平台MTK Android 4.4.0源码。

日期：2015年3月22日

一. 在App的使用方法...]]></description><category></category></item><item><title><![CDATA[编写Android.mk中的LOCAL_SRC_FILES的终极技巧]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49763609</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49763609</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 18:34:35 +0800</pubDate><description><![CDATA[转载：http://blog.youkuaiyun.com/xiangzilv1987/article/details/16805701







问题的引入

在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是LOCAL_SRC_FILES源文件列表.
考虑有如下源文件分布的情况:
cpp文件全部位于android项目下的jni文件夹下]]></description><category></category></item><item><title><![CDATA[Android.mk多级目录源码的编写]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49763595</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49763595</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 18:33:27 +0800</pubDate><description><![CDATA[Android.mk多级目录源码的编写]]></description><category></category></item><item><title><![CDATA[Android Jni 多线程 蓝牙串口收发 实例 二]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49763299</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49763299</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 18:05:46 +0800</pubDate><description><![CDATA[整个串口模块功能已经完成了。但需求又来了现在外接一个MCU模块与MTK也是通串口相连，如果我们要把代码变得更容易复用，新模块在更少的代码量上接入，那该怎么做呢。在蓝牙功能模块里我们通过测试后发现一个问题，如果中途有不正常关闭，再次启动就启不来了。这个问题是因为JNI的线程没有正常退出，程序退出后还在后台运行，影响一下次程序启动。

        我们先回顾一下我们之前的程序架]]></description><category></category></item><item><title><![CDATA[Android Jni 多线程 蓝牙串口收发 实例 一]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49763249</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49763249</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 18:02:13 +0800</pubDate><description><![CDATA[在工作有一个这样的需求：在一个Android App上，通过串口对一个蓝牙进行操作，其中包括发送消息，接收消息，并进行处理。 
   

=========================项目心得和遇上的问题总结=========================
    要实现这些功能，有很多种：多线程可以放在Jni层，这样接收和消息的整理逻辑都在Jni层，这样程序就会变得复杂一些，因为你]]></description><category></category></item><item><title><![CDATA[Jni 两种方法打开底层文件返回FD给Java]]></title><link>https://blog.youkuaiyun.com/shell812/article/details/49763195</link><guid>https://blog.youkuaiyun.com/shell812/article/details/49763195</guid><author>shell812</author><pubDate>Tue, 10 Nov 2015 17:57:42 +0800</pubDate><description><![CDATA[打开文件

在底层open一个文件时只是返回一个fd号，而Java打开一个文件用的是FileDescriptor来打开一个文件，如何在两者之间建立一个联系呢？有两种方法：

方法一：在jni层有提供一个API，jniCreateFileDescriptor(env, fd); 生成的是一个临时变量，最终还是要通过NewObject创建一个对象才能return回去。在Android.mk里还]]></description><category></category></item></channel></rss>