0%

Android 源码分析系列综述博文: Android 系统源码分析综述

前言

Android/Linux 输入设备总类繁杂,常见的有按键、键盘、触摸屏、鼠标、摇杆等,之前其驱动都是采用字符设备、misc 设备处理的,但是如此多的设备就导致驱动混乱,所以 Linux 引入了输入子系统在字符设备等上抽象出一层来统一输入设备的驱动。本文就基于 MTK Android 7.0 源码来分析一下输入子系统。

输入子系统架构

输入子系统的系统架构如下图所示:
input_system_arch

Framework 层以上只是简单跟了一下源码,没有深入查看

Read more »

Android 源码分析系列综述博文: Android 系统源码分析综述

Platform information: MTK6797(X20)+ Android 7.0

之前做高通的时候,对高通此部分做过粗略的分析,不过当时胡乱做的些笔记,只简单整理了几篇博客,感兴趣可以参考如下路径:

高通平台Android源码bootloader分析之sbl1(一)

高通平台Android源码bootloader分析之sbl1(二)

高通平台Android源码bootloader分析之sbl1(三)

Android不带电量计的电量计算

Android 电源管理架构

Android电池监控系统-BMS-之电池系统架构 (有坑未填)

高通电池管理系统(BMS)驱动分析

高通 smb135x charger 驱动分析

高通 PMIC 架构简析

高通 linear charger 驱动分析

充电简析

充电状态机

电池充电过程分为预充、恒流充电(CC模式)、恒压充电(CV模式)、涓流充电四个流程,MTK的状态机如下:

state

Read more »

由于现做的是MTK平台,源码路径基于MTK, 不过高通大同小异

说明

Android 5.0以后完全引入了 SEAndroid/SELinux 安全机制,这样即使拥有 root 权限或 chmod 777 ,仍然无法再JNI以上访问内核节点。

其实在 Android 4.4 就有限制的启用此安全机制了。后面内容都按照 5.0 以后介绍,4.4 会有些许差异。

SELinux Mode

SELinux 分为两种模式,Android 5.0 后所有进程都使用 enforcing mode。

1
2
enforcing mode: 限制访问
permissive mode: 只审查权限,不限制
Read more »

技术发展越来越快,快充技术也一样,那现在怎么样才能算快充,有哪些快充技术呢?

高通方案

高通 Quick Charge 方案

QC 1.0

最高支持 5V/2A 充电功率(目前已经被划分为慢充),基本都是骁龙 600 平台。

Read more »

偶然看到这篇文章,觉得写得很好,简单明了,所以尝试将其翻译一下。

如果你想创作一个用列表显示数据的Android应用,Android L提供了两个让你更容易实现的新特性:RecyclerView和CardView。通过用这些控件,可以很容易让你的app符合Google的Material Design规范。

创作APP时一个模板参考的好地方:Envato market。你可以找到成千上万的APP模板,从Youtubeobstacleavoidance game

或者你可以尝试一下通用的Android app模板,它能为你创作任何种类app提供一个坚实的基础。
Universal-Android-app

Read more »

MDB协议

简介

MDB/ICP协议为一个主从接口的串口通信标准的协议, 规定波特率为9600bps,总线有唯一主机(vending machine controller, VMC)和最多32个从机外设,每个外设设有唯一的地址和命令,且由主机初始化。

电源上电、总线复位或外设收到一个复位命令,所对应的外设都被禁止。在顺序初始化外设期间,VMC通过外设的应答来选择被外设所支持的特征。

协议推荐所以主控制器VMC和外设都需支持所有低等级标准

Read more »

准备布局文件

布局一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="me.huaqianlee.forme.ToDoFragment">

<TextView android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:textSize="15sp"
android:text="This is Todo main view layout!"/>

</android.support.constraint.ConstraintLayout>
Read more »

今天写自己的练习APP时,发现侧边导航栏可见时,我按返回键,Activity直接退出了, 可是我想要的是只是关闭侧边栏,研究了一下,其实解决办法挺简单。

只需要在Activity中重写onBackPressed()即可:

1
2
3
4
5
6
7
8
9
10
11
private DrawerLayout mlayout; 

@Override
public void onBackPressed() {
if (mlayout.isDrawerOpen(findViewById(R.id.nav_left_layout)))
mlayout.closeDrawers();
else
super.onBackPressed();
}

# R.id.nav_left_layout为侧边栏显示部分顶层Layout

最近需要对RecyclerView的Item实现选中效果和Item点击事件,尝试了两种方式。

受限的简易实现方案

布局文件

首先在Item的布局文件中加入如下代码:

1
2
3
4
android:clickable="true"
android:focusableInTouchMode="true"
android:focusable="true"
android:background="@drawable/selector_item_selected"

完成selector_item_selected.xml:

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/select"/>
<item android:state_focused="false" android:drawable="@drawable/un_select"/>
</selector>
Read more »