Android Filter 分析

简介

Filter 是 Android 提供的用于搜索或过滤数据的工具类,它在 android.widget 包中,从包名上看,和控件相关,适用于处理界面相关的搜索场景。

通常可与 SearchView 控件组合使用,可为用户提供便捷的列表项搜索功能。

用法

考虑在一个文本类型的列表视图上进行搜索,例如联系人列表,为了展示数据通常使用一个 ListView 或 RecyclerView 和实现它们对应的适配器,那么适配器很适合成为一个 Filterable 子类型,支持对其内部的字符串列表数据进行搜索。

阅读更多

支持触摸拖动的 TouchDelegate

需求

最近有一个小需求,就是在界面上有一个预览图片的区域,这个区域用户可以双击缩放图片、双指自由缩放图片、触摸图片进行移动,对图片的局部区域进行查看,像这样:

这个功能可以使用 github 中的开源库 PhotoView 实现,地址:https://github.com/Baseflow/PhotoView

同时另一个条件是当前这个图像预览区域较小,不像上图这样预览区域比较大,大概是 4 分之 1 左右,如果直接使用 PhotoView 设置图片,那么用户体验可能较差,因为图像展示区域较小,难以进行自由的图像移动预览操作,所以这个需求就是:扩大触摸区域,让用户在图像显示区域的外侧也可以自由的对图像进行移动预览操作。如下,白色区域是 PhotoView 的父控件的区域,用户触摸和双击这里时,可对图像进行预览操作:

阅读更多

GDB ARM 交叉编译环境搭建

需求

需要使用 GDB 在本机来调试 ARM 环境

环境

需要安装交叉编译器,ARM 交叉编译器有很多种,这里安装其中一种。

1
sudo apt install gcc-arm-linux-gnueabi

编译时可能需要用到 Texinfo。

1
sudo apt install Texinfo
阅读更多

Dropbear Android 安装步骤

  1. 克隆 https://github.com/ubiquiti/dropbear-android 仓库
  2. 修改 build-dropbear-android.sh 文件中的编译器路径:
1
2
3
4
HOST=arm-linux-androideabi
COMPILER=${TOOLCHAIN}/bin/armv7a-linux-androideabi28-clang
STRIP=${TOOLCHAIN}/bin/arm-linux-androideabi-strip
SYSROOT=${TOOLCHAIN}/sysroot
阅读更多

Android so(ELF) 文件解析

前言

ELF 是一种可执行文件的格式,全称是 Executable and Linkable Format,即可执行和链接格式,它是 Unix/Linux 系统下的二进制文件的标准格式,与之对应的是 Windows 系统的 PE(Portable Executable)可执行文件格式,它们都是由 COFF(Common Object File Format,通用对象文件格式)文件格式发展而来。

so 文件是 Unix/Linux 系统中的动态库文件,被称为共享目标文件(Shared Object File),后缀名为 .so,它是 ELF 的一种,另外属于 ELF 类型的还有可重定位文件(Relocatable File)以及核心转储文件(Core Dump File)。

阅读更多

Xposed 实现原理分析

前言

Xposed 是 Android 平台上著名的 Java 层 Hook 框架,通过在 Android 设备上安装 Xposed 框架,编写 Xposed 模块,可实现对任意 Android 应用的 Java 方法的 Hook,以及应用资源的替换。

(Hook 是一种函数钩子技术,能够对函数进行接管,从而修改函数的返回值,改变函数的原始意图)

本文将基于 Xposed 最新的开源代码对 Xposed 的实现原理进行分析。Xposed 有两种实现版本,一个是基于 Dalvik 虚拟机的实现,它是针对早期的 Android 4.4 之前的 Android 设备设计的;另一个是基于 ART 虚拟机的实现,自 Android 5.0 系统开始,Android 系统正式采用了 ART 虚拟机模式运行,Dalvik 就成了历史,目前市面上几乎所有的手机都是以 ART 模式运行的,下面将主要对于 ART 上的 Xposed 实现进行详细分析,对于 Dalvik 上的 Xposed 的实现,进行必要性的分析。

通过了解 Xposed 的实现原理可以学到在 Android 平台上对于 Java 层代码的一种 Hook 机制的实现,同时复习 Android 系统的启动原理以及增加对于 Android ART 虚拟机运行原理的了解。

阅读更多

Android 模拟器 Root 和 SuperSU 安装

前言

有时需要在 Android 模拟器上测试特定功能,需要使用到 Root 权限,例如访问某些系统配置、修改系统文件等。通常情况下在 adb shell 的环境下使用 su 命令以 Root 身份执行相关命令即可满足需求,但是还有命令行难以满足的情况,例如给一个第三方应用授予 Root 权限(赋予应用使用 su 命令的权限),如果直接使用命令修改 su 文件权限,使特定应用可以访问,不仅难以控制,而且可能造成滥用 Root 权限的安全风险。所以需要一个统一管理 Root 权限授予的工具,那么可以使用 SuperSU 工具。

SuperSU 是 Android 系统上著名的 Root 权限管理工具,安装此软件后,可以方便的对 Root 权限进行管理,那么后面安装 Xposed 等依赖 Root 的工具时就很容易了。

在 Android 真机上安装 SuperSU 的方比较容易,只需要获得 Root 权限即可快速安装,在 Android 模拟器上安装略有不同。

下面是在 Android 官方模拟器上获取 Root 权限和安装 SuperSU 的方法。

阅读更多

Android Dex 文件解析

前言

Java 代码文件在经过 javac 编译器编译后会产出 .class 格式的 Java 虚拟机可执行的字节码文件,而 Dex 文件则是 Android SDK 编译 Java 代码后的产物(Android SDK 使用 dx 或 d8 编译器将 .class 文件编译为 .dex 文件),了解 Dex 文件结构是理解 Android 虚拟机原理的基础,同时也是学习 Android 逆向工程的基础。

Dex 文件的文件后缀为 .dex,是 Android 虚拟机的可执行文件。

阅读更多

Android zygote 进程启动分析

前言

zygote 进程是 Android 系统中第一个拥有 Java 运行环境的进程,它由用户空间 1 号进程 init 进程通过解析 init.rc 文件创建,从 init 进程 fork 而来。从 zygote(受精卵)这个富含生物意义的名字可以知道,它是一个孵化器。Android 系统中所有运行在 Java 虚拟机中的系统服务以及应用均由 zygote 进程孵化而来。

理解 zygote 进程的启动过程以及所做的工作,将为理解 Java 层系统服务以及所有应用的进程启动流程打下基础。

阅读更多