自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Qualcomm Simlock——启动检测流程

Simlock功能simlock功能介绍SIMLOCK功能的基本原理是通过私有加密算法,把加密后的定制参数保存在手机存储中,通过校验存储在手机中的加密信息和SIM卡中的信息来实现手机的高级的保护。功能实现中SIMLOCK进程需要查询存储在SIM卡中的IMSI、GID1、GID2相关信息,利用这些信息来实现不同SIMLOCK功能等级,达到限制不同运营商、地区等方案。Sim卡参数IMSI由以下4部分组成:1) 移动国家码(the MobileCountry Code, MCC),标识移动用户所.

2022-05-29 17:51:44 1031

转载 抛弃硬件抽象层 (HAL)

更新对确保安全性至关重要,但对于设备制造商来说,更新可能难以实施,并且成本高昂。Treble 项目通过将底层供应商实现从 Android 内核框架中剥离出来,使更新变得更简单。这种模块化的设计允许分别独立更新平台和供应商提供的组件。让更新变得更轻松、更快速已经很棒,然而,Treble 加强模块化设计还有一个目的:提高安全性。隔离 HAL硬件抽象层 (HAL) 在与设备无关的代码和特定于设备的硬件实现之间提供了一个接口。HAL 通常打包成共享库,直接加载到需要与硬件交互的进程中。安全边界在进程级实施。

2022-05-29 17:26:46 304

转载 WeakReference 学习和使用

前言: 看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak reference是什么, 怎么用, 只是期望有人能够提到这个concept和java的GC相关. 很可惜的是, 20多个拥有5年以上java开发经验的面试者中, 只有两人知道weak reference的存在, 而其中只有一人实际用到过他. 无疑, 在interviewer眼中, 对于weak reference的理解和

2022-02-08 17:23:59 1277

转载 java 父类中的this_关于子类和父类中的this的用法

在看毕向东java视频的时候,多态这一章讲到了一段代码:public class Demo {undefinedpublic static void main(String[] args) {undefinedFu f = new Zi();f.show();}}class Fu {undefinedint num = 1;void show() {undefinedSystem.out.println(this.num);}}class Zi exten

2022-01-28 14:01:05 526

转载 AndroidRuntime java.lang.AbstractMethodError解决方案

AndroidRuntime: java.lang.AbstractMethodError解决方案背景介绍今天同事尝试编译apk的release版本,编译成功,但是运行时,却爆出这个运行时异常,导致crash。排查过程定位出错位置通过查看异常的堆栈,爆出异常的方法是一个我们引入的jar包里,而这jar包引用方法是compileOnly,而compileOnly依赖的用途编译时用于构建项目,但是运行时不需要在编译时依赖它的api,但是它API的真正实现是在运行时环境我们具体看一下这个Abs

2022-01-27 16:20:56 854 1

转载 VoLTE技术(含IMS注册/去注册流程、IMS呼叫流程、呼叫保持流程、二次协商过程)

VoLTE技术通信系统支持的业务种类有很多,语音业务、数据业务、短信业务、彩信业务、彩铃、视频电话、会议电话、呼叫转移、多方通话等。最常用的两类业务就是语音业务和数据业务。LTE的语音业务语音业务早起是构筑在电路交换CS技术之上的,语音业务长时间、低数据量、低延迟的特点很适合用电路来承载。但是,随着技术的发展,分组交换PS技术成为主宰,甚至到了LTE系统,电路交换域荡然无存。没有了电路交换设备就不能支持基于电路交换的业务了,那LTE靠什么来支持语音业务呢?此时,技术大佬们就想出了以下几种方案LTE

2022-01-26 17:01:43 2997 1

转载 电路交换、报文交换、分组交换的区别与优缺点

(1)电路交换由于电路交换在通信之前要在通信双方之间建立一条被双方独占的物理通路(由通信双方之间的交换设备和链路逐段连接而成),因而有以下优缺点。优点: ①由于通信线路为通信双方用户专用,数据直达,所以传输数据的时延非常小。 ②通信双方之间的物理通路一旦建立,双方可以随时通信,实时性强。 ③双方通信时按发送顺序传送数据,不存在失序问题。 ④电路交换既适用于传输模拟信号,也适用于传输数字信号。⑤电路交换的交换设备(交换机等)及控制均较简单。 缺点: ①电路交换...

2022-01-26 16:44:42 1664

转载 Framework中的AIDL(原)

在上一节(应用层的AIDL调用)中我们介绍了应用层中的AIDL用法, 这一节中,我们来看一下系统Framework层中更为普通的AIDL用法。 为了便于分析,我们挑选了ITelephonyRegistry这个SystemService进行分析。这个服务的主要作用就是对通话相关的事件进行监听,我们把重心放在AIDL的实现结构上,不去关注ITelephonyRegistry具体的实现。一、AIDL文件相关 先来看一下这个服务的AIDL文件: @ITeleph...

2022-01-11 15:34:20 174

转载 应用层的AIDL用法(原)

一、什么是AIDL服务  一般创建的服务并不能被其他的应用程序访问。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)

2022-01-11 15:33:17 90

转载 两种AIDL用法分析

我们在前面介绍了关于AIDL的两种用法,第一种用法主要用在应用层中(应用层的AIDL调用),第二种用法主要用在framework中(Framework中的AIDL调用)。但是这两种用法中都提到了Stub、asInterface等关键字,在这一节中我们主要针对AIDL内部机制的分析来深入理解AIDL调用的过程。 为了便于分析,我们还拿第一节中我们自己搭建的例子去分析。 当时我们在Eclipse Android工程的Java包目录中建立了一个扩展名为aidl的文件(IMySe...

2022-01-11 15:31:26 132

转载 进击的Android注入术(3)

继续在前 《一》、 《二》、 《三》里已经把注入的技术介绍完了,这章开始说注入之后需要做的事情。如果对注入技术已经比较熟悉了,那么可以直接看本章,否则建议先把前三章阅读一遍会比较好。注入之后完成了注入,那只是万里长征的第一步。众所周知,Android的应用进程,都是由Zygote孵化的子进程,每个进程都运行在独立的JVM中。通过ptrace的注入方式,我们得到了在目标进程执行代码的机会,但距离修改JVM的内容,还差那么一点点。我们重新看一下《二》中被注入SO的关键代码:void Main();

2021-09-02 10:51:32 172

转载 进击的Android注入术(2)

继续在《二》详细介绍了通过ptrace实现注入的技术方案,在这个章节里,我再介绍一种Android上特有的注入技术,我命其名为——Component Injection。顾名思义,这种方式是跟Android的组件相关的,详细见下面叙述。Component Injection原理在android的开发者文档里,对android:process的描述是这样的:android:processThe name of a process where all components of the appl

2021-09-02 10:48:00 134

转载 进击的Android注入术

写在前面这个系列本来是在公司的一个分享,内容比较多,所以就把这个PPT重新组织整理成博客,希望对大家学习有所帮助。我会先以一个”短信拦截“作为例子,抛出问题,并提出了一种基于”注入“的技术方案达到提高拦截优先级,接着再重点讲解注入的技术细节。最后,我会跟大家分享一个我业余时间开发注入框架——AIM(Android IPC Manager)。当然了,这个框架跟目前的XPosed、CydiaStructe的侧重点不太一样。短信拦截场景如果某款安全支付类应用和一个未知木马安装在同一台手机,木马会截获

2021-09-02 10:45:21 371

转载 selinux介绍

selinux相关命令// 0--代表Permissive// 1--代表Enforcingsetenforce 0// 查看selinux开关状态getenforce// 查看进程的sContextps -Z// 查看文件权限ls -Z如果设置成permissive mode 后问题依旧,说明还有其他的权限问题约束,否则就是SELinux 方面的问题抓取SELinux Logadb shell dmesg抓kernel log,使用命令:adb shell "cat /

2021-08-23 15:59:17 547

转载 AndroidO Treble架构下Hal进程启动及HIDL服务注册过程

通过前面对Treble架构的介绍,我们知道,Android Framework进程和Hal分离,每个Hal独立运行在自己的进程地址空间,那么这些Hal进程是如何启动的呢?本文以composer hal为例展开分析。在以下路径有composer hal的rc启动脚本:hardware/interfaces/graphics/composer/2.1/default/[email protected] hwcomposer-

2021-07-21 15:55:29 1243

原创 VINTF供应商接口对象

VINTF对象设计为设备和框架组件提供以下内容:从Android 8.0开始,运行时API会查询设备上的内容并将该信息发送到无线下载 (OTA) 更新服务器以及其他相关方(例如 CTS DeviceInfo)。有些信息会在运行时进行检索,而有些信息则是静态定义的信息。设备清单描述了设备可以为框架提供的静态组件。 框架兼容性矩阵描述了 Android 框架期待从给定设备中获取的内容。此矩阵是一个静态实体,在开发下一个版本的 Android 框架期间会手动确定此矩阵的组成。 框架清单描.

2021-07-21 10:45:55 2907 1

转载 c++静态对象的初始化

静态对象语义所谓的静态对象,是指从产生一直持续到程序结束的那些对象,在这个过程中不会动态的消亡,所以被称为静态对象。包括global对象,定义于namespace的对象,在class 函数 file里的static对象。其中函数里的是local静态对象,其他都是non-local的,local与non-local的初始化时机不同。对于local的静态对象,初始化发生在函数被调用期间,首次碰到该定义时。而对于non-local的静态变量则在main函数的usercode之前进行初始化。对于类中的静态变

2021-07-20 14:09:57 1579

转载 Android call 流程以及其他case整理--Conference Call

Conference Call在项目中的场景不是很多,在日常生活应用也不是很多,基本上项目上的需求原生的代码已经足够。我所接触的只是之前在一个STK 运营商项目上时,对Conference call 有很多UI & 功能的要求,所以趁此也做一个总结,本篇主要是对于IMS的情况做个总结。1.Conference call 基本介绍 Conference call 就是常说的电话会议,简单的说就是多台设备同时参与某一路通话(假设为A,B,C三台设备),不是常见的两方对话。详细的解释可以查看...

2021-07-08 17:35:33 989

转载 c++ auto基本用法

总述:auto的原理就是根据后面的值,来自己推测前面的类型是什么。auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。注意点:1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)2.函数和模板参数不能被声明为auto(原因同上)3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid4.定义在一个auto序列的变量必须始

2021-07-08 10:49:37 2923 1

转载 代理模式之详谈动态代理模式(Spring的AOP实现)

java动态代理实现与原理详细分析1.代理模式关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,..

2021-06-30 15:14:49 152

转载 Android aidl项目中服务端与客户端aidl文件不一致引起的问题

前几天和林工联调的时候发现远程调用我的aidl接口时候,有的接口总是调用不正确,本来是想调用我的A接口,却实际调用出来却显示调用的我B接口。仔细检查了,没问题啊,不可能会把名称写错的啊。Aidl文件在最开始是固定的,但是接口在后面有增有减,就导致了我这边的aidl接口与他的aidl接口数量和顺序上都有差异了。后面怀疑是aidl文件引起的,后面让他传他的demo给我看看,没问题,仔细看了还是aidl文件有些差异,而且只是顺序不一样了。修改顺序后,效果就出来了。就是顺序引起的错误。在网上找了一篇文章贴下来:

2021-06-24 15:54:12 655

原创 Maven(Maven是干什么用)

Maven项目对象模型(POM)是一个项目管理工具软件,可以通过简短的信息描述来管理项目的构造,报告和文档。除了具有构建程序的功能外,Maven还提供了高级项目管理工具。由于Maven的默认构建规则具有很高的可重用性,因此通常可以使用两到三行Maven构建脚本来构建简单的项目。由于Maven的面向项目的方法,许多ApacheJakarta项目在发布时都使用Maven,并且采用Maven的公司项目所占的比例持续增长。Maven这个词来自意第绪语(犹太语),意思是知识的积累,最初是在JakataTurbin

2021-06-23 20:56:14 19989

原创 电路交换时代的终结:2G终于要退出历史舞台

从1G到4G,每一代移动通信技术的频谱效率都会向前迈进一大步。逐步清退2G,让位给新技术,运营商不仅可重耕2G优质频段,还能大幅节省弥足珍贵的频谱资源——如果传统2/3G CS语音退役并迁移至4G VoLTE,运营商可释放达90%的频谱资源。为此,全球多家运营商已陆续关闭2G网络。然而,展望5G,从CS语音到VoLTE再到5G VoNR,这背后却让我们看到了一个更加辉煌的时代——电路交换时代逐渐退出历史舞台。最早的电话网络叫电路交换(circuit switching...

2021-06-16 16:06:55 986 6

转载 Bundle.setClassLoader()方法解析 BootClassLoader PathClassLoader

bundle经常会用,但是对setClassLoader()方法不是特别的理解,上网查了下也有很多不是很明白的同学,在此借用看到的文章记录一下原因。在开发中可能有时候会遇到用Bundle传递一个Parcelable对象时出现ClassNotFoundException异常,而且这个异常有时候会出现有时候又不会出现,比如你在同一个进程的Activity间传递数据时就不会出现,但是你通过Messenger携带bundle进行进程通信时就会出现,具体是什么原因?我先总体说下出现这个问题的原因和解决方.

2021-06-15 15:50:56 702

转载 android message 传递对象,Android基于Message的进程间通信之Messenger使用及解析

1、Messenger 简介说到Android进程间通信,大家肯定能想到的是编写aidl文件,然后通过aapt生成的类方便的完成服务端,以及客户端代码的编写。如果你对这个过程不熟悉,可以查看Android aidl Binder框架浅析;当然今天要说的通信方式肯定不是通过编写aidl文件的方式,那么有请今天的主角:Messenger。ok,这是什么样的一个类呢?我们看下注释This allows for the implementation of message-based communicat

2021-06-10 18:23:49 641

转载 高通QMI IDL格式介绍,方便增加QMI message

主要方便单个的增加qmi 消息。[背景]由于idl文件和自动生成工具不开放给客户,客户如果想要扩展qmi结构或者新增QMI消息需要手动按照IDL的格式修改qmi消息对应的<api>.c和<api>.h 文件。这篇KBA主要介绍一些常见的QMI 结构与<api>.c中的宏定义的对应关系,客户可以参照现有代码学习,自行添加。[数据结构描述信息格式说明]#define QMI_IDL_GENERIC_1_BYTE 0 1个字节,例如uint8#defin

2021-05-31 14:58:01 691

转载 Android编译时注解框架5-语法讲解

概述本章内容主要对APT一些语法进行简单讲解。apt的学习资料真的太少了,我的学习方法基本上只能通过看开源库的源码猜、看源码注释猜、自己运行着猜……这里对猜对的结果进行一个总结,让后来者可以更快的上手。第一次写这种类型的博客,总结的可能有些分散,建议结合开源库源码学习。自定义注解相关定义注解格式: public @interface 注解名 {定义体}Annotation里面的参数该设定:第一,只能用public或默认(default)这两个访问权修饰.例如,String v

2021-05-19 15:44:24 90

转载 Android编译时注解框架4-爬坑

概述因为有关APT的资料过少,又因为是Java Moudle +Android Moudle的使用方式,在项目编写过程中,会有一些匪夷所思的奇怪问题~入门阶段真的是步履维艰。这篇博客就是编写《Android编译时注解框架》系列中,将所遇到的一些坑列举出来,并给出一些绕过坑的方法。(注意哦~是绕过,坑还在,没有填~因为不知道这坑咋来的……)随时踩坑,随时更新~坑1:无法引入javax包下的类库编写编译时注解框架时,需要用到javax包下的一些类库,但是引入包时却提示没有。##.

2021-05-19 15:43:11 127

转载 Android编译时注解框架3-Run Project:OnceClick

概述因为编译时注解框架前期项目搭建部分需要较多的图文讲解,所以前一章《Android编译时注解框架-Run Demo》只是实现了最简单应用,或许注解信息,并没有生成代码。本章将以生成代码为重点进行一个案例讲解。框架名称:OnceClick框架功能:功能就是它的名字:在一定时间内,按钮点击事件只能执行一次。未到指定时间,不执行点击事件。框架背景:从用户的角度,在使用应用的过程中,因为低端机性能原因、Web页面性能问题,导致点击按钮后程序卡顿,按钮事件延迟执行。造成的后果就是,卡顿后,继

2021-05-19 15:40:46 106

转载 Android编译时注解框架系列2-Run Demo

概述先讲一下编写《Android编译时注解框架》的初衷吧,APT其实并不难,可以说是简单且高效,但关于APT的资料却并不多,甚至很多人都不知道这么一个技术。国内关于APT的博客屈指可数,唯二找到的几篇初级讲解一个是用Eclipse写得,一个是用AndroidStudio加Intellij。刚开始着实踩了不少坑,但事实是,APT完全可以用AndroidStudio单独实现。光是项目搭建就如此麻烦了,更别提语法讲解了。资料匮乏无疑提高了APT的入门门槛。正因为如此,这个系列博客就这样诞生啦~现在就教你用

2021-05-19 15:38:18 132

转载 Android编译时注解框架系列1-什么是编译时注解

概述Android编译时注解框架从入门到项目实践。该系列将通过5篇博客一步步教你打造一个属于自己的编译时注解框架,并在之后开源出基于APT的编译时注解框架。提到注解,普遍都会有两种态度:黑科技、低性能。而使用注解往往可以实现用非常少的代码作出匪夷所思的事情,比如这些框架:ButterKnife、Retrofit。但一直被人诟病的是,运行时注解会因为java反射而引起较为严重的性能问题…今天我们要讲的是,不会对性能有任何影响的黑科技:编译时注解。也有人叫它代码生成,其实他们还是有些区别的,

2021-05-19 15:35:06 85

转载 Android 的一些功能开关配置

一些常用的开关Config.xml路径指向位置为framework/base/core/res/res/valuse/configs.xml最近因为要移除通话相关的模块。除了改改字符串这些的,有些东西用一些value配置了。所以如果需要移除通话,短信这块的UI显示还有功能相关的。找了找几个简单的做了一个汇总 <string-array translatable="false" name="networkAttributes"> <item>"wi...

2021-05-19 11:19:09 923

转载 ByteBuffer常用方法详解

缓冲区(Buffer)缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲区有这么两个好处:1、减少实际的物理读写次数2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数举个简单的例子,比如A地有1w块砖要搬到B地由于没有工具(缓冲区),我们一次只能搬一本,那么就要搬1w次(实际读写次数)如果A,B两地距离很远的话(IO性能消耗),那么性能消耗将会很.

2021-05-10 14:57:19 938

转载 【反编译系列】反编译so文件(IDA_Pro)

概述  安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发。使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。--摘自《安卓逆向学习笔记

2021-04-29 10:51:22 10368

原创 只有电信手机在没有SlM卡情况下才能拨打110

没有SIM卡 到底能不能打通110?真相了“手机一直都有紧急通话功能,但为何没有手机信号或者拿掉SIM卡后,却无法拨通紧急号码,如110、120、119等?其实,手机在没有卡的情况下还是可以拨打有限的几个紧急电话的,而且根据手机的不同,所拨打的号码也是有所差别。但是,在没网络有信号的情况确实是无法拨打紧急电话的。这个问题我们先留到最后来做解答,先简单给大家讲解一下紧急电话的工作原理。没有SIM卡 到底能不能打通110?真相了  手机拨打紧急电话的工作原理?手机只要正常开机后,首先要做的就是先检测

2021-04-21 15:23:10 1139

原创 URI的格式

scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]协议:[//[用户名:密码@]域名[:端口]][/]路径[?参数][#标记]http://write.blog.csdn.nethttp://write.blog.csdn.net:80/http://write.blog.csdn.net:80/mdeditorhttp://write.blog.csdn.net:80/mdeditor?a=1http://write

2021-04-19 18:09:56 599

转载 Pattern和Matcher详解(字符串匹配和字节码)

一:起因(1)Java里面进行字符串操作,第一个想到的是String类 和 StringBuilder类 内含replace() 、replaceAll() 、split()、matches()等方法 —— 其实String类里面的 public String[] split(String regex, int limit) 和 matches()方法,调用是Pattern.compile().matches()方法 ----- 源码为: return Patter...

2021-04-19 18:05:01 864

原创 classpath和jar

在Java中,我们经常听到classpath这个东西。网上有很多关于“如何设置classpath”的文章,但大部分设置都不靠谱。到底什么是classpath?classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class。因为Java是编译型语言,源码文件是.java,而编译后的.class文件才是真正可以被JVM执行的字节码。因此,JVM需要知道,如果要加载一个abc.xyz.Hello的类,应该去哪搜索对应的Hello.class文件。所以,classpath就是一组目

2021-02-24 17:53:52 213

转载 5G NR MCG,SCG,PCell,PSCell,SCell,sPCell 概念澄清

在看5G NR协议或者研究5G项目时,我们经常看到MCG,SCG,PCell,PSCell,SCell和sPCell等概念。新手往往很难区分这些概念,今天来给大家梳理一下。首先澄清MCG和SCG两个概念。MCG和SCG的全称如下:MCG:Master Cell group,主小区组SCG:Secondary Cell group,辅小区组MCG和SCG是双链接(DC,D...

2020-03-05 14:28:45 4334 3

原创 speedtest测速的wireshark分析

测试网速,我们一般使用speedtest来进行测试,包括有线网络或者无线网络下,在手机上也有speedtest测速软件。下面主要分析电脑上登录speedtest网页的wireshark log的分析。使用wireshark抓出来的log如下:speedtest测速分为三个步骤:1. ping包测试,使用的也是HTTP的ping。解析HTTP内容为:2. 开...

2019-12-24 15:22:55 3806

空空如也

空空如也

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

TA关注的人

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