
Android 基础业务分析
_dowork
这个作者很懒,什么都没留下…
展开
-
Android 6.0 ContentProvider
Contentprovider类图 Provider进程不存在: 当provider进程不存在时,先创建进程并publish相关的provider, AT为ActivityThread,cpr为ContentProviderRecord图解:client进程:通过binder(调用AMS.getContentProviderImpl)向system_server进程请求相应的p...原创 2018-05-07 15:29:09 · 303 阅读 · 0 评论 -
APK 签名 shareuserId
LOCAL_CERTIFICATE原创 2016-11-17 16:19:41 · 360 阅读 · 0 评论 -
Android 6.0 Runtime Permission 机制
分析了Android的AppOps权限管理机制,可以说,该机制一直都在(应该是从4.2就开始存在了),但一直没有被真正使用过… 每次Android更新OS版本,都一直是隐藏它的( 一些OEM厂商可能会在某些版本上打开)。而从Android M开始,Android就正式的推出了官方的权限管理机制:Android Runtime Permission. ( Google在M发布的IO大会上特意说明原创 2016-12-08 11:32:34 · 706 阅读 · 0 评论 -
InputService
原创 2016-12-07 17:11:49 · 476 阅读 · 0 评论 -
Input 介绍
先介绍一下每个模块的工作职责:EventHub, InputReader, InputManager...3.1 模块功能3.1.1 EventHub 它是系统中所有事件的中央处理站。它管理所有系统中可以识别的输入设备的输入事件,此外,当设备增加或删除时,EventHub将产生相应的输入事件给系统。 EventHub通过getEvents函数,给系统提供原创 2016-12-16 16:14:15 · 1026 阅读 · 0 评论 -
Android6.0 按键流程 读取设备事件(一)
一、初始化InputManagerService在SystemServer中新建,然后调用了start函数,这里我们就不讲了,从InputManagerService的构造函数讲起。[java] view plain copy public InputManagerService(Context context) { this.mContext原创 2017-02-09 11:19:16 · 1048 阅读 · 0 评论 -
Android6.0 按键流程 InputDispatcher分发输入消息(三)
一、InputDispatcher的notifyKey函数接上一篇我们我们分析到InputDispatcher的notifyKey函数:[cpp] view plain copy void InputDispatcher::notifyKey(const NotifyKeyArgs* args) { if (!validateKeyEvent(args转载 2017-02-16 14:11:49 · 1602 阅读 · 0 评论 -
Android6.0 按键流程 registerInputChannel函数(四)
这篇博客我们接上面一篇博客,回答上篇博客中,最后的connection对象是如何来的。一、InputManagerService的registerInputChannel方法我们先从InputManagerService的registerInputChannel方法分析:[cpp] view plain copy public void regist转载 2017-02-16 14:14:04 · 1270 阅读 · 0 评论 -
Android6.0 按键流程 KeyboardInputMapper扫描码转成键盘码 (二)
我们详细分析了InputReader中读取设备事件,到processEventsLocked函数处理事件(包括设备事件,设备添加、删除等),再到ProcessEventsForDeviceLocked处理设备事件,最后到InputDevice的process函数,去遍历各个InputMapper执行process函数。今天我们继续从这里开始分析,Input设备有很多种类,其消息格式各不相同,因原创 2017-02-16 14:19:56 · 2479 阅读 · 0 评论 -
Android6.0 PKMS扫描目录和调用接口安装应用的区别
Android安装应用分两种,一种是直接调用PKMS的接口安装,另一种是扫描目录安装,比如系统开机的时候会扫描data/app目录进行安装。一、调用installPackageAsUser函数安装我们先来看调用接口应用安装应用,都会通过如下函数,这个函数先会通过传进来的uid来判断是否是adb安装的,然后创建了一个InstallParams对象这个对象是HandlerParams的转载 2016-11-09 17:27:35 · 2560 阅读 · 0 评论 -
Android 6.0 PackageManagerService
PackageManagerService/* --1 Settings的分析*//*Settings的构造函数如下,在构造函数中主要是创建了/data/system的目录,并且创建了packages.xml, packages-backup.xml, packages.list, packages-stopped.xml等文件。这些文件又都有一些具体的作用:packa原创 2016-11-02 14:23:53 · 1852 阅读 · 1 评论 -
Android6.0 PKMS拦截adb安装应用
我们再PKMS汇总拦截adb 安装的应用,在分析PKMS的时候我们也知道,在installPackageAsUser有如下代码,代表是adb安装的。[cpp] view plain copy if ((callingUid == Process.SHELL_UID) || (callingUid == Process.ROOT_UID)) { instal原创 2016-11-10 10:08:34 · 1210 阅读 · 0 评论 -
Android 6.0 PKMS 深入分析 扫描应用目录
PackageManagerService的构造函数中调用了scanDirLI方法来扫描某个目录的apk文件。我们先来看看这个函数:一、scanDirLI[java] view plain copy private void scanDirLI(File dir, int parseFlags, int scanFlags, long currentTime)原创 2016-11-16 16:12:45 · 1696 阅读 · 0 评论 -
Android 6.0 运行时权限处理
M权限简单说明由于M对权限的管理更加颜色,dangerous的都需要用户点击授权,可以用命令查询如下,adb shell pm list permissions -d -gSvcCOPSSH@WIN-6 ~$ adb shell pm list permissions -d -gDangerous Permissions:group:android.permission-gro原创 2016-10-31 16:12:04 · 487 阅读 · 0 评论 -
Android 6.0 PKMS 构造 permission
PackageManagerService比较长,我们挑主要的内容讲,这是这个系列的第一篇博客,我们主要介绍下构造函数以及一些对象。一、SystemServer创建PackageManagerService先来看下其在SystemServer的创建:[java] view plain copy mPackageManagerService原创 2016-11-16 16:14:07 · 3354 阅读 · 0 评论 -
Android SEAndroid
根据SELinux规范,完整的SContext字符串为:user:role:type[:range]注意,方括号中的内容表示可选项。s0属于range中的一部分。下文再详细介绍range所代表的Security Level相关的知识。看,SContext的核心其实是前三个部分:user:role:type。刚才说了,MAC基本管理单位是TEAC(Type Enforcement A...原创 2017-04-09 16:03:54 · 323 阅读 · 0 评论 -
Android MediaScanner
ContentProvider 与 URIContentProvider 使用 URI 标识要操作的数据,这里的内容 URI 主要包括两部分:authority:整个提供程序的符号名称path:指向表的名称/路径内容 URI 统一的形式就是:content://authority/path例如:content://user_dictionary/words当你调用 ...原创 2018-05-04 14:22:29 · 488 阅读 · 0 评论 -
MTK 6.0 Alarm机制分析
(MTK Android6.0)一、概述Alarm模块处于Android Framework层,是Android中常用的一种系统服务级别的提示服务,在指定时间或周期性启动其他组件(Activity、Service、BroadcastReceiver),Alarm系统架构如下图所示:原创 2017-10-25 16:39:27 · 1027 阅读 · 1 评论 -
Android Recovery
Android Recovery升级原理摘要Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS)。也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出厂设置(格式化数据和缓存)。1. Recovery相关概念Recovery: Recovery模式转载 2017-09-20 16:56:53 · 1383 阅读 · 0 评论 -
Android 6.0 之AlarmManagerService源码分析
AlarmManager实质上是一个全局定时器,是Android中常用的一种系统服务级别的提示服务,在指定时间或周期性启动其他组件(Activity、Service、BroadcastReceiver)。之前有篇文章专门介绍了AlarmManager定时器的使用方法,获取到服务后,调用该服务的一些设置方法,在设定时间到达后就会启动指定的组件。AlarmManagerService和JobS转载 2017-09-06 15:39:46 · 2792 阅读 · 1 评论 -
Android 定义uid权限
system/core/include/private/android_filesystem_config.h原创 2017-08-10 09:42:06 · 1084 阅读 · 0 评论 -
Android SystemProperties
1.Android SystemProperties简介介绍了设置属性需要的权限,已经设置权限的方法。Systemproperties类在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。其实用Java的反射机制是可以使用这个类。何谓java反射机制,请自行研究学习,在此不做介绍,放到后续文章中。用JNI的方式,可以绕过Systemproperties这个类,直接转载 2017-08-16 17:28:33 · 323 阅读 · 0 评论 -
Android 6.0 PKMS时序图
原创 2016-12-07 17:09:20 · 453 阅读 · 0 评论 -
Android PKMS深入分析安装应用
一、安装的Activity在Android,通过发送Intent可以启动应用的安装过程,如下所示:[java] view plain copy Uri uri = Uri.fromFile(new File(filename)); Intent inent = new Intent(Intent.ACTION_VIEW); intent.SetDataAnd原创 2016-11-16 16:10:48 · 2528 阅读 · 0 评论 -
Android 6.0 JNI原理分析 和 Linux系统调用(syscall)原理
引言:分析Android源码6.0的过程,一定离不开Java与C/C++代码直接的来回跳转,那么就很有必要掌握JNI,这是链接Java层和Native层的桥梁,本文涉及相关源码:frameworks/base/core/jni/AndroidRuntime.cpplibcore/luni/src/main/java/java/lang/System.javalibcore/lun转载 2017-03-15 16:04:55 · 6406 阅读 · 1 评论 -
Android 6.0 boot
原创 2017-03-15 15:21:36 · 441 阅读 · 0 评论 -
Android 7.0 SEAndroid app权限配置
1.SEAndroid app分类SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):1)untrusted_app 第三方app,没有Android平台签名,没有system权限2)platform_app 有android平台签名,没有system权限3)system_app 有android平台签原创 2017-04-10 10:36:13 · 2796 阅读 · 0 评论 -
Android6.0 PKMS的mSettings,mPackages变量分析
一、mSettingsmSettings在PKMS的构造函数中创建,这里mPackages变量传进去,仅仅是作为lock使用[cpp] view plain copy public PackageManagerService(Context context, Installer installer, boolean factoryTest, b原创 2016-11-22 11:34:49 · 1126 阅读 · 0 评论 -
Android 6.0 PKMS 卸载删除app
PKMS中卸载应用是通过deletePackage函数来执行,这个函数主要是调用了一些Observer回调,然后调用了deletePackageX函数。[cpp] view plain copy public void deletePackage(final String packageName, final IPackageDeleteObser原创 2016-11-22 14:31:28 · 2379 阅读 · 0 评论 -
Android6.0 不同方式安装apk copy lib流程
一、安装lib库安装lib库代码,主要代码都在scanPackageDirtyLI函数中,先是调用了derivePackageAbi,这个函数中就把lib库的路径创建好了,也把lib库copy到这个目录下,然后后面会调用Installd的方法,在data/data/apk相关目录 下的lib 创建软链接到真正放lib的地方。[cpp] view plain copy原创 2016-11-29 19:02:47 · 2848 阅读 · 0 评论 -
Android6.0 AMS 新进程中启动Activity
看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程。 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有原创 2016-11-15 11:23:19 · 1219 阅读 · 0 评论 -
处理Third App
一、安装预置应用方法这里提供一个思路,把预留应用放在system/third-app下,然后在第一次开机的时候把这些应用copy到data/app下,当然要在PKMS扫描data/app之前,这样第一次开机的时候就能安装上这些应用了。因为应用在data/app下也能删除。因为应用在system/third-app中也有,而恢复出厂设置的时候system的目录不会清空。在恢复出厂设置后,还会把这原创 2016-10-25 14:07:24 · 1694 阅读 · 0 评论 -
Android6.0 AMS启动Activity(四) AMS内部成员变量
之前在分析AMS和ActivityStackSupervisor和ActivityStack对一些成员变量比较模糊,这篇博客主要讲下这些成员变量一、AMS成员变量的初始化我们先来看看AMS在systemServer的构造,初始化,先是调用了在SystemServiceManager中调用了AMS的构造函数。[cpp] view plain copy原创 2016-11-14 19:02:49 · 854 阅读 · 0 评论 -
Android6.0 AMS启动Activity(二) 启动进程然后启动Activity
在上篇博客中说到有两种方式启动进程,其中一种就是点击Launcher界面,在点击Launcher最后也会调用Activity的startActivity方法,但是在Launcher中会调用如下代码:[cpp] view plain copy intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这句代码代表启动这个转载 2016-11-14 16:01:44 · 412 阅读 · 0 评论 -
Android6.0 AMS启动Activity(一) 启动Activity两种方式
原文:http://blog.youkuaiyun.com/luoshengyang/article/details/6685853在Android系统中,有两种操作会引发Activity的启动:一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;而另一种当应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Acti转载 2016-11-14 11:42:58 · 256 阅读 · 0 评论 -
Android 6.0 禁止锁屏
1.Settings 删掉屏幕待机选项packages/apps/Settings/res/xml/display_settings.xml<!-- Hide screen sleep<ListPreferenceandroid:key="screen_timeout"android:title="@string/screen_timeout"android:summary="@原创 2016-10-28 16:01:23 · 2195 阅读 · 0 评论 -
APP横屏机制
启动横屏应用时的整个逻辑:首先会从WindowManagerService那边获取屏幕的方向,然后再设置到ActivityManagerService中来,最后再启动Window的显示逻辑。这三个步骤分别对应下面这三个函数(横屏最重要的三个调用函数):(1). WindowManagerService.updateRotationUncheckedLocked()(2). Activi转载 2016-11-08 19:23:58 · 2957 阅读 · 0 评论 -
Android 6.0 MTP
MTP原创 2016-10-26 17:04:50 · 1499 阅读 · 2 评论 -
为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android的Application Frameworks层提供硬件服务。我们知道,Android系统的应用程序是用Java语言编写的,而硬件驱动程序是用C语言来实现的,那么,Java接口如何去转载 2016-10-24 17:54:05 · 323 阅读 · 0 评论 -
为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
我们在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务呢?在这一篇文章中,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务。 一. 在A转载 2016-10-24 17:52:23 · 509 阅读 · 0 评论