自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(369)
  • 收藏
  • 关注

原创 android gps机制分析--之七

4 NMEA数据的解析先看一段QXDM log,是获取NMEA的一个大致流程:loc_middleware_proc中打印Received IPC Message with id 10.Loc enabled 1因为cmd_type是1,也就是LOC_CMD_TYPE_REPORT_POSITION:modem_proc\gps\gnss\loc_mw\

2017-05-21 20:21:35 1949

原创 android gps机制分析--之六

3 Modem流程分析modem_proc\gps\gnss\loc_mw\src\ loc_task.c首先初始化middlewaremodule,设置IPC以及timers,初始化QMI等一系列工作:通过os_IpcReceive接受消息,调用loc_middleware_proc对p_msg进行处理:在loc_middleware_pr

2017-05-21 20:10:33 3490

原创 android gps机制分析--之五

1. 概述    上面的几篇文章论述了gps的打开启动初始化等动作,万事俱备只欠东风了。这一系列文章主要讲的是Position信息如何从modem层传递到loc eng层最后一直到Java上层的。由于loc eng层到modem层是属于消息触发的,也就是说正常的流程是:modem层传上来一个消息,经过一系列处理传递到loc eng层,loc eng层传递给gps库,android

2017-05-21 19:50:25 2873 1

原创 android gps机制分析--之四

2,启动GPS2.1 Java层分析在gps定位的apk中,启动GPS的方法如下,mLocationManager.requestLocationUpdates(provider, 500, 0, mLocationListener);调用LocationManager的requestLocationUpdates方法,调用流程图如下,在startNavigat

2017-05-21 19:47:08 2743 1

原创 android gps机制分析--之三

1 gps打开/初始化在Java层打开gps,其实对于gps库来说,就是执行初始化过程。1.1 Java层分析android系统中打开GPS的方法往数据库里面写值,private void enableGps(boolean enable) {try { Settings.Secure.setLocationProviderEnabled(getContentResolver(

2017-05-21 19:20:33 3965 1

原创 android gps机制分析--之二

1,概述在android系统中,GPS对应的系统服务为LocationManagerService,本文主要论述LocationManagerService服务的启动以及初始化过程。   SystemServer.java的startOtherServices方法中添加LocationManagerService方法的代码如下,location = new LocationManage

2017-05-21 16:10:21 6982 5

原创 android gps机制分析--之一

1,android gps实现方案整个流程图如下,android 系统中高通定位方案架构图如下,GPS Application(各种GPS定位的apk)都通过android系统的LocationManager对GPS进行打开/关闭/启动等操作。然后等待数据的上报。所以架构中有2个流程,由上往下的控制流,由下往上的数据流。1, GPS Applicatio

2017-05-21 15:40:24 6684 2

原创 HAL so库加载机制---之二

4, HAL库加载4.1 HAL库加载过程下面以GPS为例,分析上层是如何使用HAL库来访问硬件设备的。com_android_server_location_GpsLocationProvider.cpp中加载gps.default.so库的代码如下,hw_module_t* module;err = hw_get_module(GPS_HARDWARE_MODULE_ID,

2017-05-20 21:39:40 2613

原创 HAL so库加载机制---之一

1,概述Android HAL(Hardware Abstract Layer)硬件抽象层,从字面意思可以看出是对硬件设备的抽象和封装,为Android在不同硬件设备提供统一的访问接口。HAL处于Android framework和Linux kernel driver之间,HAL存在的意义有以下2个方面:1,HAL屏蔽了不同硬件设备的差异,为Android提供了统一的访问硬件设备

2017-05-20 21:33:39 3768

原创 gps 简介---之一

3.GPS接收机3.1 接收机的组成1)天线单元    GPS信号接收机的天线单元为接收设备的前置部分。天线单元包含接收天线和前置放大器两部分。其中天线部分可能是全向振子天线或小型螺旋天线或微带天线,但从发展趋势来看,以微带天线用的最广、最有前途。    为了提高信号强度,一般在天线后端设置前置放大器(LNA),前置放大器的作用是将由极微弱的GPS信号的电磁波能

2017-05-20 21:23:17 6082 1

原创 gps 简介---之一

1. GNSS    GNSS的全称是全球导航卫星系统(Global NavigationSatellite System),它是泛指所有的卫星导航系统,包括全球的、区域的和增强的,如美国的GPS、俄罗斯的Glonass、欧洲的Galileo、中国的北斗卫星导航系统,以及相关的增强系统,如美国的WAAS(广域增强系统)、欧洲的EGNOS(欧洲静地导航重叠系统)和日本的MSAS(多功

2017-05-20 20:29:18 6109 1

原创 RIL 机制---总结

10,总结RIL的结构如下,对于从RILJ发出的消息,在正常情况下,Modem总会有对应的回应消息。1,从RIL到RIL。2,从RIL到reference-ril3, 从reference-ril到Modem4,Modem处理完成之后,又从modem到reference-ril5,从reference-ril到RIL6,从RIL到RILJ。除此之外,Mo

2017-05-14 21:12:41 1343

原创 RIL 机制---消息RILJ中的处理

9,RILJ接收子线程要完成的就是对接收数据的处理操作。还分为两步去分析:1、如何接收的消息;2、消息的处理流程。9.1数据接收过程  接收子线程RILReceiver的run方法主要代码如下,class RILReceiver implements Runnable { byte[] buffer; RILReceiver() {

2017-05-14 08:30:50 3351

原创 RIL 机制---消息从RIL到RILJ

8 RIL -->RILJ8.1 上报消息处理ril.cpp的RIL_onUnsolicitedResponse方法主要代码如下,//得到当前命令的请求码 unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE; //从ril_unsol_commands.h文件中得到命令的类型 wa

2017-05-14 07:58:18 1550

原创 RIL 机制---消息从reference-ril到RIL

7, reference-ril -->RIL7.1 线程阻塞在上一章的最后的at_send_command_full_nolock函数中,调用writeline将命令写入Modem后,还做了一个很重要的动作,就是阻塞当前线程,等待Modem回应。再次回到at_send_command_full_nolock,相关代码如下,while (sp_response->final

2017-05-14 07:46:04 1174

原创 RIL 机制---消息从reference-ril到Modem

6, reference-ril-->Modemreference-ril.c中调用流程图如下,onRequest方法中会处理所有消息,但是处理流程完全一样, 以RIL_REQUEST_DIAL消息为例来论述消息的处理, onRequest中相关代码如下,case RIL_REQUEST_DIAL: requestDial(data, datalen, t);

2017-05-13 23:58:10 1679

原创 RIL 机制---消息从RIL到reference-ril

5,RIL—>reference-ril首先ril从socket中读取RILJ发送的数据,然后在ril进行处理封装,最后发送到reference-ril进行处理。5.1 读取数据读取数据流程图如下,eventLoop方法如下,static void *eventLoop(void *param) { int ret; int filedes[2];

2017-05-13 23:54:12 1314

原创 RIL 机制---消息从RILJ到RIL

RILJ发送子线程需要关注两点:1、如何把数据发送到mSenderThread中;2、mSenderThread是如何把请求发送给RIL的。在创建mSenderThread线程的时候,先是通过getLooper得到子线程的Looper,然后用这个Looper去创建了Handler对象,因此得到的这个Handler对象就是子线程的Handler,也就是RILSender对象。4.

2017-05-13 23:44:46 1039

原创 RIL 机制---rild守护进程

3 守护进程ril与上层的RILJ沟通方式是通过Socket传输数据与命令,而reference-ril与底层Modem的信号传输是通过串口用AT命令来实现。 RILC是一个守护进程,由init进程启动,init.rc文件配置如下,service ril-daemon /system/bin/rild class main socket rild stream 660

2017-05-13 23:41:17 2294

原创 RIL 机制---开篇

1, 概念本文基于android 6.0。RIL(Radio Interface Layer,无线通信接口层)主要相关的结构如下,为了便于论述,将RIL分为三个部分,1, Framework层中的相关Java程序。运行与phone进程,简称RILJ。  封装phone进程的消息,然后发送给RIL;读取RIL中的消息然后解析并进行处理。2,hardware

2017-05-10 21:04:50 6173

原创 android studio运行NDK实例

上篇文章在android6.0系统中,实现了Java和C++方法的互相调用。这篇文章利用Android studio 2.2 实现Java和C方法的互相调用。目标:1,java通过JNI机制可以调用C中的方法2,C调用java中的方法 在Android studio 2.2实现步骤如下,1, 创建Java文件1,1 新建工程在Android studio中新建一个包名为

2017-05-09 21:42:42 851

原创 android C++和Java通过JNI机制相互调用

上篇文章添加了一个自定义的系统服务,并且可以获取使用该服务。这篇文章在上篇文章的基础上,利用JNI机制实现该系统服务对应的C++文件,本篇文章基于android 6.0。目标:1,java通过JNI机制可以调用C++中的方法2,C++调用java中的方法 1, MyService创建方法frameworks/base/services/core/java/com/andro

2017-05-06 21:34:34 1080

原创 android 添加系统服务

本文基于android 6.0,添加了一个自定义的系统服务,并且可以获取使用该服务。目标:1,创建一个系统服务, MyService2,在android系统中使用getSystemService方法获取该服务并调用里面的方法。1,创建aidl文件在frameworks/base/core/java/android/os/ 文件下面新增 一个 IMyService.aidl

2017-05-06 21:30:39 2740 6

原创 android 实现aidl跨进程通信之二

2,aidl回调上面服务端ExampleService.java类做了简单的回调,存在很多bug,其实android系统已经包装了aidl的回调,使用了RemoteCallbackList.java类。重新修改的服务端ExampleService.java如下,package com.android.exampleservice;import android.app.Service

2017-05-06 21:26:01 543

原创 android 实现aidl跨进程通信之一

1,aidl通信实现步骤本文基于android 6.0,是一个简单的例子,演示如何通过aidl进行跨进程通信。目标:1,创建2个进程,一个服务端,一个客户端。2,客户端和服务端进行绑定,通过aidl跨进行调用以及回调。1,创建2个工程在packages/apps 路径下创建2个工程,example:作为客户端  包名: com.android.exampleexam

2017-05-06 21:20:15 550

原创 InstantRun框架源码分析之二

4, onCreateBootstrapApplication的onCreate方法如下,public void onCreate() { if (!AppInfo.usingApkSplits) { MonkeyPatcher.monkeyPatchApplication(this, this, this.realApplication, this.externalR

2017-05-05 22:03:37 667

原创 InstantRun框架源码分析之一

1, 概念Instant Run是Android Studio2.0以后新增的一个运行机制,能够显著减少你第二次及以后的构建和部署时间。简单通俗的解释就是,当你在Android Studio中改了你的代码,Instant Run可以很快的看到修改的效果。而在没有Instant Run之前,一个小小的修改,都肯能需要几十秒甚至更长的等待才能看到修改后的效果。传统的代码修改及编译部署流

2017-05-05 21:59:02 1254

原创 AndFix 源码分析之二

4,PatchManager加载修复包PatchManager的loadPatch调用流程如下,loadPatch方法如下,public void loadPatch() { mLoaders.put("*", mContext.getClassLoader());// wildcard Set patchNames; List classes; for (

2017-05-05 21:48:07 437

原创 AndFix 源码分析之一

1, 概念AndFix是阿里巴巴的一个开源热修复框架,该框架使用方便,结构简单。开发时,首先使用eclipse打开该框架,在activity中添加如下代码就可以完成开发。private static final String APATCH_PATH = "/fix.apatch"; public static PatchManager mPatchManager;// 最好是单

2017-05-05 21:38:33 570

原创 android contentprovider 插件化之二

------本文转载自 Android插件化原理解析——contentprovider的插件化      这一系列的文章实在是写的好! 4. 插件化4.1 思路分析在分析ContentProvider的工作原理的过程中我们提出了一种插件化方案:在进程启动之初,手动把ContentProvider安装到本进程,使得后续对于插件ContentProvider的请求能够顺利完成。

2017-05-05 21:28:12 599

原创 android contentprovider 插件化之一

------本文转载自 Android插件化原理解析——contentprovider的插件化      这一系列的文章实在是写的好! 1, 概述目前为止我们已经完成了Android四大组件中 Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案;那 么对于ContentProvider,

2017-05-05 21:21:07 820 1

原创 android service插件化之二

------本文转载自Android插件化原理解析——Service的插件化      这一系列的文章实在是写的好! 3. Service的插件化现在已经明白了Service组件的工作原理,可对如何实现Service的插件化依然是一头雾水。从上文的源码分析来看,Service组件与Activity有着非常多的相似之处:它们都是通过Context类完成启动,接着通过 Ac

2017-05-05 21:10:13 907

原创 android service插件化之一

------本文转载自 Android插件化原理解析——Service的插件化      这一系列的文章实在是写的好!1, 概述本文将探讨Android四大组件之一——Service组件的插件化方式。与Activity, BroadcastReceiver相比,Service组件的不同点在哪里呢?能否用与之相同的方式实现Service的插件化?如果不行,它们的差别在哪里,应

2017-05-05 20:45:08 983

原创 android 广播的插件化

1, 概述------本文转载自 Android插件化原理解析——广播的管理 这一系列的文章实在是写的好!为了实现Activity的插件化我们付出了相当多的努力;那么Android系统的 其他组件,比如BroadcastReceiver,Service还有ContentProvider,它们又该如何处理呢?相比Activity,BroadcastReceiver要简单很多——广播的

2017-05-05 19:59:55 2203 2

原创 android 插件加载机制之二

------本文转载自 Android插件化原理解析——插件加载机制     这一系列的文章实在是写的好!5 Hook ClassLoader从上述分析中我们得知,在获取LoadedApk的过程中使用了一份缓存数据;这个缓存数据是一个Map,从包名到LoadedApk的一个映射。正常情况下,我们的插件肯定不会存在于这个对象里面;但是如果我们手动把我们插件的信息添加到里面

2017-04-25 23:16:51 2669

原创 android 插件加载机制之一

------本文转载自 Android插件化原理解析——插件加载机制     这一系列的文章实在是写的好!1, 概述上文中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务;通过Hook AMS和拦截ActivityThread中H类对于组件调度我们成功地绕过了AndroidMAnifest.xml的限制。但是我们启动的『

2017-04-25 23:07:24 943

原创 android 插件化之Activity生命周期之二

------本文转载自  Android插件化原理解析——Activity生命周期管理 这一系列的文章实在是写的好!3.Hook Activity3.1 简要分析通过上文的分析,我们已经对Activity的启动过程了如指掌了;就让我们干点坏事吧。对与『必须在AndroidManifest.xml中显示声明使用的Activity』这个问题,上文给出了思路——瞒天过海;我们

2017-04-24 23:12:29 718

原创 android 插件化之Activity生命周期之一

------本文转载自  Android插件化原理解析——Activity生命周期管理 这一系列的文章实在是写的好!1, 概述在Java平台要做到动态运行模块、热插拔可以使用ClassLoader技术进行动态类加载,比如广泛使用的OSGi技术。在Android上当然也可以使用动态加载技术,但是仅仅把类加载进来就足够了吗?Activity,Service等组件是有生命

2017-04-24 23:01:26 530

原创 android 插件化机制之AMS&PMS

------本文转载自  Android插件化原理解析——Hook机制之这一AMS&PMS  系列的文章实在是写的好!1, 概述ActivityManagerService对于FrameWork层的重要性不言而喻,Android的四大组件无一不与它打交道:1.startActivity最终调用了AMS的startActivity系列方法,实现了Activity的启动;Act

2017-04-24 22:04:31 1114

原创 android 插件化机制之Binder

------本文转载自  Android插件化原理解析——Hook机制之Binder Hook  这一系列的文章实在是写的好!1, 概述Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等;这些广泛存在系统服务给应用程序提供了诸如任务管理,音频,视

2017-04-24 21:55:34 708

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除