自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Invoker123的博客

新手的一点见解

  • 博客(48)
  • 资源 (8)
  • 收藏
  • 关注

原创 ld.lld的undefined symbol错误

三个符号位于cpdf_streamcontentparser.o中。经发现cpdf_streamcontentparser.o是空文件,导致链接而成的ibpdfium-page.a和libpdfium.so缺少对应的符号。删除掉libpdfium-page.a和对应的obj目录重新编译可以解决。确认是静态库文件,没问题。再打开obj目录,检查静态库包含的目标文件的正确性。而编译目标 libpdfium.so引用了libpdfium-page.a。先找到libpdfium-page.a确认文件有没问题。

2023-10-06 17:25:34 5506 1

原创 ld.lld的unknown file type错误

于是,我删掉out/soong/.intermediates/external/pdfium下面的所有文件,重新正确编译生成libpdfium-libopenjpeg2.a后,此错误被修复。先用file命令查看libpdfium-libopenjpeg2.a的文件属性。报错提示libpdfium-libopenjpeg2.a无法被ld.lld识别,被标记为unknown file type。但是这里确提示"empty",表明这是一个空文件。

2023-10-06 11:46:41 1546

原创 ninja编译方法介绍

而实际上在不改变Android.bp和Android.mk编译脚本文件时,我们是不需要执行前三步的、只需要执行第四步,因此针对安卓编译流程,我们开发了一个ninja的脚本,能直接执行第四步,以此节省大量编译耗时。整编项目后,在不改变Android.bp和Android.mk编译脚本文件时,将我们的ninja编译脚本放在服务器bin目录下、配置环境变量后可以使用ninja指令进行模块单编译,极大提升编译速度、缩短时间成本,一些需要长时间编译的模块,编译时间缩短甚至达到90%。在.bashrc添加环境变量。

2022-09-02 10:50:00 2348 1

原创 Android打印log的方式

Android framework Java层import android.util.Log;Log.d(TAG,“Your Log”);Android C++层1.#include <log/log.h>ALOGV(“Running %s in=%s out=%s\n”, dex2oat_bin, relative_input_file_name, output_file_name);2.#include <android-base/logging.h>LOG(WAR

2022-01-10 16:24:20 5552

原创 Android共享库命名空间

简介  Android系统中,system.load,system.loadLibrary和dlopen是三个可以加载共享库的方式。其中,system.load,system.loadLibrary是在Java代码中被使用的,dlopen是在cpp代码中被使用的。system.load  system.load接收一个路径参数,该参数libcore/ojluni/src/main/java/java/lang/System.java @CallerSensitive public s

2022-01-05 16:55:10 6189

原创 Android10中的boot*.art和boot*.oat加载过程

简介  在Android7.0之前,所有bootclasspath指定的库会被同一编译成为boot.oat和boot.art两个文件。其中boot.oat包含了编译后的机器码指令,而boot.art文件,则是一个类对象映像。boot.art内包含了所有framework/base/preloaded-classes文件列出的所有类。这些类会被一次性的载入到内存中,并可以被直接使用。  在Android7.0及以后,boot.art和boot.oat被分成以boot-{packagename}.oat/a

2021-03-03 21:42:28 4770

原创 java类的访问权限问题

  Android中java类的访问权限控制在art中的Class::CanAccessMember实现。其中,参数access_to是要访问的属性或者方法所在的类,member_flags是要访问的属性或者方法的flag(Android提供public、protected、private修饰符来设置flag)。规则如下(以下规则优先级从高到低):  1.如果要访问的内容在当前类中,允许访问;  2.如果要访问的内容设置了public修饰符,允许访问;  3.如果要访问的内容设置了private修饰符

2021-02-05 12:33:29 407

原创 Frida js脚本打印调用栈

  在使用objection进行hook的时候,有时我们的需求是hook Activity的onCreate里面调用的方法,这个方法在Activity启动的时候已经被执行,再hook就没有效果。

2021-01-05 20:32:17 1337

原创 NDK abiFilters含义

  NDK开发时,在build.gradle中,cmake和ndk都有abiFilters的设置。如下所示: cmake { cppFlags "" abiFilters "armeabi-v7a" } ndk { abiFilters "armeabi-v7a" }  它们的含义有所不同。cmake设置的abiF

2020-12-31 20:28:04 1829

原创 ida-pro动态调试app jdb无法连接上解决方法

  使用adb shell am start -D -n xxx以调试模式启动Activity,需要使用jdb来接入debugger让程序正常运行。网上的做法是使用jdb –connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700,我在电脑端使用此命令时常会出现连接不上的情况。这个时候将port换成另外一个端口就可以,例如:jdb –connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,por

2020-12-31 15:40:45 2040 2

原创 Android权限系统(四):应用操作管理类AppOpsManager(Android 10)

AppOpsManager 介绍  AppOpsManager 是Google在Android4.3里面引进的应用程序操作(权限)的管理类,核心实现类为AppOpsService。Google对AppOpsManager的说明在:AppOpsManager  

2020-10-29 01:48:09 13036 1

原创 Android权限系统(三):运行时权限检查和申请,PermissionController

请求应用权限的最佳实践  Google提供的请求应用权限的说明如下:请求应用权限  官方提供的模板使用了三个条件分支来请求应用权限:  1.checkSelfPermission用来检查应用是否有需要请求的权限了,如果有,直接执行需要的动作;  2.shouldShowRequestPermissionRationale在用户曾经点击过拒绝这一权限的选项后为true(非“拒绝不再询问”选项),这时系统发现应用没有响应的权限,开发者可以在这一条件分支加上相关说明的界面,向用户指出申请这个权限的必要性,但

2020-10-19 02:21:57 10267 2

原创 Android O+广播限制

简介  Android O对隐式广播进行了限制, 其限制链接说明:后台执行限制  按照谷歌的说法是:如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验。 为了缓解这一问题,Android 7.0(API 级别 24)对广播施加了一些限制,如后台优化中所述。 Android 8.0(API 级别 26)让这些限制更为严格。  1.适配 Android 8.0

2020-10-13 01:59:14 2343

原创 dumpsys procstats详解

简介  procstats 工具用于分析应用内存在一段时间内的使用情况(而不像 meminfo 一样在特定时间点捕获快照)。其状态转储会显示每个应用的运行时间、比例集合大小 (PSS) 和唯一集合大小 (USS) 的统计信息–引用自官网介绍查看 RAM 使用情况数据 (procstats)  Android内部将内存状态划分为四个等级:Norm/Mod/Low/Crit,按内存的使用情况从轻度到重度的顺序排列;将屏幕状态划分为两个等级:SOff/SOn,分别表示息屏和亮屏;将进程状态划分为14个等级:P

2020-09-28 04:27:26 2753

原创 Android针对非SDK接口的限制(基于Android 10)

简介  从 Android 9(API 级别 28)开始,此平台对应用能使用的非 SDK 接口实施了限制。只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用。这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险。Google官方文档地址:针对非 SDK 接口的限制全局hiddenapi设置HiddenApiSettings  AMS有一个HiddenApiSettings类型的成员,负责记录黑名单是否使能(mBlackl

2020-07-20 17:54:01 3168

原创 Android权限系统(二):开机授予运行时权限

  Android开机后,除了根据上次开机的记录(runtime-permissions.xml)授予运行时权限外,一些系统重要的组件也需要提前授予运行时权限。例如,系统会为默认的浏览器提前授予位置相关的运行时权限...

2020-06-16 02:25:34 7574

原创 Android权限系统(一):开机获取权限信息

一.SystemConfig的整机权限信息  Android在SystemConfig的构造函数中会通过读取相关的文件来加载整机的权限信息。这些文件是{partition}/etc/permissions下面的文件。其中{partition}指代的分区包含了/system,/vendor,/odm,/oem/,/product/,/system_ext等目录。{partition}/etc/permissions目录下的文件以xml的形式存在以方便解析。frameworks/base/core/java

2020-06-10 23:51:21 9348

转载 获取安卓APK的SHA1值(Android安装包SHA1指纹)

接入QQ钱包支付的时候,需要获取这个值,获取的方法:1) 将apk修改后缀为 .rar文件后解压;2) 进入解压后的META-INF目录,该目录下会存在文件CERT.RSA3) 在该目录下打开cmd,输入命令 :keytool -printcert -file CERT.RSA这里将会显示出MD5和SHA1签名。如果,提示 keytool 不是内部命令或外部命令……,那么先切换到你的J...

2019-08-13 02:15:15 2693

原创 Android O HIDL框架

HIDL简介  Android O开始,Google为了将framework和HAL层分割开来,使得framework可以独立于HAL层更新,设计了HIDL。有了HIDL,HAL模块可以以一个独立的Service启动,framework可以通过Binder来和HAL模块进行通信,厂家实现的HAL模块将会被放到设备的/vendor目录下。  HIDL分为两种模式:Passthrough模式和Bi...

2019-07-09 01:35:36 5854

转载 如何查看一个Google Patch是否合入到system.img

https://ressrc.com/2018/12/19/cts-gts-problem-analysis-12/#more-8464

2019-06-17 23:46:41 646

原创 VTS框架分析

CompatibilityConsole初始化  VTS测试套件的执行脚本是通过直接加载com.android.compatibility.common.tradefed.command.CompatibilityConsole来进入交互命令行的:android-vts/tools/vts-tradefedcd ${VTS_ROOT}/android-vts/testcases/; java...

2019-05-26 20:13:29 5582

翻译 剖析Android的Smart Lock

前言  本文翻译自https://nelenkov.blogspot.com/2014/12/dissecting-lollipops-smart-lock.html,省略去NFC的内容。  Android5.0已经发布有一段时间了,其大部分特性已经被介绍过,其中包含了一系列的安全增强特性,当中磁盘加密功能获得了大部分的关注。Smart Lock(最初在2014年Google I/O大会引入)...

2019-01-17 12:38:57 7215

原创 SystemServer的Watchdog

  在我们的认知中,Watchdog 是 Linux 系统一个很重要的机制,其目的是监测系统运行的情况,一旦出现锁死,死机的情况,能及时重启机器(取决于设置策略),并收集crash dump。在Android的SystemServer中,也存在一个Watchdog用来监控一些重要的线程,一旦这些线程长时间阻塞,就会杀掉SystemServer进程,导致Android重启。  Watchdog是一...

2018-11-26 01:47:05 904

原创 standard、singleTop、singleTask和singleInstance原理分析

  我们知道启动一个Activity有四种方式:standard(标准启动模式)、singleTop、singleTask、singleInstance。先简述一个四种启动方式。standard:进入启动task,每次都创建新的实例进入task顶部;singleTop: 进入启动task,如果已有实例并且在task顶部不创建新实例,调用原实例的onNewIntent(),其它情况都创建新的实例进...

2018-10-11 18:10:35 1150

原创 从一个关机时间过长的bug谈起

  一般来说,启动activity需要一个过程,为填补从启动activity到呈现activity画面的空白期,Android设置了启动窗口来实现期间的过渡,用户不会感到切换的突兀。   doShow 一般情况下为true,SHOW_APP_STARTING_PREVIEW是一个静态变量,默认为true。mResumedActivity是当前resume了的ActivityRecord,可以作为...

2018-10-08 00:22:11 2097

原创 SurfaceFlinger原理(二):Vsync事件的处理

  SurfaceFlinger内部有两个EventThread,一个负责app端对Vsync信号的监听处理,一个负责SurfaceFlinger对Vsync信号的监听处理。SurfaceFlinger内部维持了一个MessageQueue,当SurfaceFlinger端的EventThread监测到Vsync事件,会触发INVALIDATE操作,即当前的图层失效了,需要重新计算刷新。/fr...

2018-09-11 17:20:34 3540 1

原创 SurfaceFlinger原理(一):SurfaceFlinger的初始化

  SurfaceFlinger是Android的一个native进程,负责将图层进行合成,图层叠加起来就构成了我们看到的界面。合成的方式分为在线合成和离线合成。在线合成是指现在一块buffer画好所有的内容,然后直接交给linux图像驱动framebuffer显示出来;离线合成是指将一些图层的buffer直接递交HWComposer,HWComposer指的是能够处理图像数据并组合的现实硬件模块...

2018-09-09 19:19:06 7344 1

原创 Android壁纸服务WallpaperManagerService

  Android壁纸服务WallpaperManagerService启动在SystemServer中。当NonCoreServices没有被禁止且config_enableWallpaperService的config值为true时,启动WallpaperManagerService。/frameworks/base/services/java/com/android/server/Sys...

2018-09-05 11:38:17 8403 1

原创 Handler机制

  handler是一个Android SDK 提供给开发者方便进行异步消息处理的类,下面从handler类最常用的函数sendMessage讲起。sendMessage接受的参数是Message,调用到sendMessageDelayed,sendMessageDelayed的第二个参数delayMillis是0,表示立刻发送出去。如果需要延迟发送消息,使用参数delayMillis是不为0的函...

2018-06-27 03:08:45 426

原创 Android synchronized实现原理

  synchronized关键字可以用在两处:1.同步代码块,锁住的是任意的object,也可以是类;2.同步方法,其中普通同步方法锁住的是类的实例对象,静态同步方法锁住的是这个类。在Android中,它们的实现原理都是通过monitor实现的。大致过程是:monitor-enter(加锁)–&amp;amp;amp;gt;执行同步代码块或同步方法–&amp;amp;amp;gt;monitor-exit(释放锁)。   举个例子。/f...

2018-06-12 15:01:03 2099 2

原创 ART虚拟机的对象分配过程

  在art内部对线程Thread的实现中,会对函数跳转表进行初始化,这些函数跳转表的初始化在不同的平台有不同的实现,通常是记录一些关键的汇编函数的入口。Thread类有个struct tls_ptr_sized_values结构体成员,struct tls_ptr_sized_values的interpreter_entrypoints,jni_entrypoints,portable_en...

2018-05-09 12:54:19 1798

原创 ART虚拟机堆的创建过程

  ART在调用Runtime::Init进行初始化的过程中,会创建一个虚拟机堆Heap。堆的初始化过程需要由一些虚拟机启动参数决定,例如有:   1. options-&gt;heap_initial_size_: 堆的初始大小,通过选项-Xms指定。   2.options-&gt;heap_growth_limit_: 堆允许增长的上限值,这是堆的一个软上限值,通过选项-XX:HeapG...

2018-04-25 01:25:50 1227

原创 ART类和方法

  先看看ART中跟类的查找关系最密切的classlinker的初始化过程。当启动的时候存在boot.art的时候,将从imagespace中初始化classlinker;当没有boot.art的时候,将脱离boot.art调用InitWithoutImage初始化classlinker。由于dex2oat进程生成boot.art时没有image,这时候调用的是InitWithoutImage来加...

2018-04-13 03:42:16 2594

原创 ART加载OAT文件的过程分析

  OAT文件是一种Android引入ART虚拟机后的一种私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容。Android使用/system/bin/dex2oat(我们也可以编译出debug版本的dex2oatd)来将DEX文件编译成OAT文件,dex2oat的主入口为main函数:/art/dex2oat/dex2oat.ccint ...

2018-03-30 00:08:49 1928

原创 SEAndroid流程分析

Init进程对Android启动的selinux环境作了初始化。/system/core/init/init.cpp // Set up SELinux, including loading the SELinux policy if we're in the kernel domain. selinux_initialize(is_first_stage);  in

2018-01-08 03:12:32 4079

原创 Android Input流程分析(四):InputDispatcher

之前提到,InputReader将Key的信息封装成一个NotifyKeyArgs对象,调用InputDispatcher的notifyKey来处理。再进行一些初步的处理后,将个NotifyKeyArgs对象拆包,得到的信息构成一个KeyEvent,并调用interceptKeyBeforeQueueing进行第一次事件拦截,该函数最终会调到java层PhoneWindowManager的inte

2017-12-20 02:06:08 3267

转载 Base sensors and trigger modes基础传感器及其触发模式

原文:http://source.android.com/devices/sensors/base_triggers.htmlBase sensors and trigger modes基础传感器及其触发模式Trigger modes触发模式Sensors can report events in different ways called trigger modes; each sensor

2017-10-19 19:56:18 1026

原创 SEAndroid问题解决

Android从4.4版本引入SEAndroid,SEAndroid是一套基于SELinux做的系统安全机制。SEAndroid有三种模式:Enforcing,Permissive,Disabled。Enforcing状态下,所有违反SEAndroid策略的操作都会被禁止执行并显示警告信息,Permissive状态下所有违反SEAndroid策略的操作不会被禁止执行,但会显示警告信息,Disabl

2017-09-29 11:36:39 2265

原创 process_config解析fstab文件

正如Linux的/etc/fstab文件,Android的开机挂载位置在特定的fstab文件中决定。vold的main函数会调用process_config对其进行解析,本例中的fstab文件为板子根目录下的fstab.rk30board文件。fstab.rk30board# Android fstab file.#<src>

2017-09-20 00:56:42 3102

原创 Android Input流程分析(三):InputReader

回到InputReader的loopOnce函数。   现在getEvents捞上来的RawEvent均保存在mEventBuffer中。/native/services/inputflinger/InputReader.cpp...if (count) { processEventsLocked(mEventBuffer, count);

2017-09-15 01:30:18 2371

Android9下载.txt

Android9 r46系统源代码下载

2021-04-21

shell脚本实现贪吃蛇

shell脚本实现贪吃蛇

2021-04-19

python抓取youtube搜索内容范例

python抓取youtube搜索内容代码

2021-04-19

dump任意位置内存的方法.txt

dump进程中任意一段内存的方案,起址和大小都可以由自己确定

2021-04-18

opencv指针式仪表识别(MFC)

大学毕业设计所作,需要的可以拿去参考

2021-04-18

FileSplitter.exe

分割大文件好工具FileSplitter,几十G几百G不在话下

2021-04-18

Android10系统源代码

Android10 r37源代码,tar.bz压缩,共65G,可直接编译生成镜像,亲测成功编译pixel3 xl的镜像。

2021-04-16

Android11系统源代码

Android11 r3源代码,zip压缩,共206G,可直接编译生成镜像,亲测成功编译pixel3 xl的镜像。

2021-04-16

空空如也

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

TA关注的人

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