自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android SystemConfig相关

SystemConfig中的内容是读取的/system/etc/sysconfig、/system/etc/permissions、/vendor/etc/sysconfig、/vendor/etc/permissions、/odm/etc/sysconfig、/odm/etc/permissions、/oem/etc/sysconfig、/oem/etc/permissions、/product/etc/sysconfig、/product/etc/permissions、/system_ext/etc/

2024-02-10 01:36:47 1182

原创 Android安装过程二 系统进程中PackageInstallerSession对象的创建

该篇文章主要根据代码讲述在APP安装过程中,系统进程中PackageInstallerSession对象的创建过程,它主要用来保存安装过程中需要的信息,在后续的安装过程中,还会频繁提到该对象。

2023-11-18 00:10:25 442

原创 Android 安装过程一 界面跳转

该篇文章说了安装应用时,相关界面的显示,以及涉及到的Activity的跳转和其作用。其中进行了两次APK的复制,第一次将它复制到包安装进程的私有存储空间中,第二次拷贝到的则是在系统进程中创建的安装APK文件。包安装进程中的APK文件会在DeleteStagedFileOnResult收到应答之后,执行删除,系统进程中的会在之后进行安装的时候,继续处理。

2023-10-31 22:58:56 857

原创 Android 得到安装包的信息

APK安装包里的配置信息都在“AndroidManifest.xml”文件中,通过解析它之后,是放到了ParsingPackageImpl类对象中。ParsingPackageImpl类对象通过自己的toAppInfoWithoutState(),将自己的值生成到ApplicationInfo对象中,而PackageInfo类对象的applicationInfo正是ApplicationInfo对象,并且PackageInfo类对象的其他成员也来自ParsingPackageImpl类对象。

2023-10-25 22:57:13 600

原创 Android 解析APK包

解析apk包信息时,一种是通过apk文件作为参数解析,另外一种是通过apk文件所在目录作为参数来解析。解析出来的类对象是ParsingPackageImpl类型的,它主要解析的是"AndroidManifest.xml"文件,类对象的成员也主要对应配置文件的属性和值。

2023-10-17 22:57:51 700

原创 Android APK文件完整性验证

APK完整性的校验方式:一种是对应CONTENT_DIGEST_CHUNKED_SHA256(对应摘要算法"SHA-256")或CONTENT_DIGEST_CHUNKED_SHA512(对应摘要算法"SHA-512")算法的摘要验证,它是将参与摘要的数据分成1M字节大小;另外一种是对应CONTENT_DIGEST_VERITY_CHUNKED_SHA256(对应摘要算法"SHA-256"),它将构建Merkle树,它的分块大小是4096字节,并且得到树根的摘要值,拿它和v2分块中的摘要进行比对。

2023-09-01 03:22:31 856

原创 Android APK文件的签名V2查找、验证

在查找V2签名块时,我们需要了解APK文件的结构,明白签名数据块在中央目录之前存放,并且需要知道签名块的数据结构。在签名验证过程中,更需要熟悉v2分块的数据存储结构形式。通过找到需要签名的数据,签名数据,还有签名算法、公钥。之后,就能使用公钥验签私钥签名的数据。

2023-08-28 02:25:46 1823

原创 Android 提取出Apk的本地库

一、现在我们知道了在什么情况下,会提取本地库文件?解析包不是库并且解析包的extractNativeLibs=true。在上面这种条件下,还要排除掉一种情况:解析包是系统包,并且不是处于更新状态时,也不能提取。二、如何提取本地库文件?主要就是调用copyNativeBinariesForSupportedAbi()来实现的。大致意思就是从压缩包里找到"lib/"开头的文件,然后通过和系统支持的ABI进行比较,找到最合适的ABI,然后确定提取路径,最后再通过合适的ABI,去APK文件中找到对应的包,将

2023-08-21 03:49:24 419

原创 Android EventBus使用优化

官网上看到了推荐使用Subscriber Index在APP产品中。给的理由是更快和避免崩溃。使用Subscriber Index避免用反射在运行时做昂贵的订阅方法的查找。它用注解处理器在编译时查找订阅方法。

2023-08-12 13:19:30 163 2

原创 Android EventBus使用理解

分析完整个框架代码,我们知道EventBus是通过反射来实现订阅方法的注册、订阅方法的执行。通过注解能设置订阅方法的线程调度、优先级、粘性事件。确实使用起来比较简单,代码看起来也比较简洁。它在自己内部实现了线程调度,用户只需设置订阅方法的线程调度模式即可。

2023-08-11 19:04:16 156

原创 Android UserManagerService初始化

Android UserManagerService初始化,它主要设置用户类型,得到用户数据。在最开始不存在/data/system/users/userlist.xml的情况下,会回落到单用户模式。生成用户以后,它会将用户信息保存成/data/system/users/id.xml,将用户列表保存成/data/system/users/userlist.xml。他还会得到系统包能被哪些用户类型安装。

2023-08-07 03:58:44 308

原创 RxJava/RxAndroid源码使用理解

Rx是Reactive Extensions,RxJava就是响应式扩展在Java上的实现。它主要通过观察者模式解决了接口回调嵌套阅读复杂的问题,实现链式调用简洁易读的特点。它还实现了适合不同任务的线程,像计算型,IO型,普通型,方便用户选择。

2023-07-31 00:52:32 100

原创 Android 窗口结构(二) 添加Home Task

Android层次结构构造完成之后,需要添加第一个任务HomeTask。HomeTask是Launcher应用所在的任务,该篇文章就试着分析一下添加Home Task的源代码,Task对象都是通过建造者模式创建的,分析完之后,对其他任务的创建也是有帮助的。

2022-11-21 21:13:11 1512 1

原创 Android 窗口结构(一) 窗口层级构造

Android窗口是根据显示屏幕来管理,每个显示屏幕的窗口层级分为37层,0-36层。每层可以放置多个窗口,上层窗口覆盖下面的。要理解窗口的结构,需要学习下WindowContainer、RootWindowContainer、DisplayContent、TaskDisplayArea、Task、ActivityRecord、WindowToken、WindowStateWindowContainer等类。

2022-11-14 22:35:34 4159

原创 Android LayoutInflater from(@UiContext Context context)

其实不止LayoutInflater实例,是这样实现的。像其他的ActivityManager、ActivityTaskManager、AccessibilityManager等实例都是通过类似这样的一种方式实现的。这样就通过设计形式,将这些实例的获取方式统一了起来。这也是值得我们学习的。

2022-09-21 22:13:49 974

原创 Android 内存紧张,回收Activity,那它的进程呢?

Activity和进程一块销毁

2022-08-26 22:32:23 808

原创 Android Binder事务调用方法梳理

Android Binder事务调用方法梳理

2022-08-22 09:07:09 320

原创 Android 源码编译问题总结

Android编译源代码问题记录

2022-07-30 19:02:50 4522

原创 Android 二进制XML文件格式XML

BinaryXmlSerializerForcedTypedXmlSerializer 代理类 它代理FastXmlSerializerFastXmlSerializer

2022-06-12 11:24:28 1959

原创 Android 找到资源的内存数据位置

  Android 得到主题中对应的属性的结果或自己设置的style中的结果该文在说GetBag(uint32_t resid, std::vector<uint32_t>& child_resids)的时候,会通过FindEntry(resid, 0u /* density_override /, false / stop_at_first_match /, false / ignore_configuration */)会得到一个ResTable_map_entry结构的数据指针。该

2022-05-20 20:32:15 650

原创 Android 得到主题中对应的属性的结果或自己设置的style中的结果

接着分析AttributeResolution类的ApplyStyle()函数

2022-05-18 10:45:24 708

原创 Android TypedArray简单分析(二)源代码分析

源代码分析  从Context类的obtainStyledAttributes()方法一直往下看, /** * Retrieve styled attribute information in this Context's theme. See * {@link android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} * for more i

2022-05-02 22:24:56 2331

原创 Android WatchedArrayMap

WatchedArrayMap从它的名字可以知道它是一个被观察的ArrayMap,它有一个成员变量是Watcher类型的mObserver,这个类型是一个观察者。如果它里面的值是Watchable类型的,值发生改变可以向mObserver报道改变,这个时候WatchedArrayMap就知道了有数据改变,并且通过参数可以知道是哪个数据发生了改变。

2022-04-22 10:13:48 166

原创 Android PropertyInvalidatedCache分析

PropertyInvalidatedCache类说明  该类是为了优化改动不频繁的数据在进程间交互使用的。Android大多进程间交互,使用了Binder机制。每次交互数据都需要Binder调用,但是对于那些很少改动的数据,每次都使用Binder调用,开销是不小的。该类会在首次Binder调用之后,会将结果缓存到本地,之后如果Server端数据一直都没有改动,那Client就会一直使用本地缓存。如果数据发生了改变,那么下次客户端再获取数据的时候,又会通过Binder调用获取最新的数据,再缓存,后续又会使

2022-04-19 16:40:39 1143

原创 Android MUTF-8转化为UTF-16

public static Byte[] decode(byte[] src) { int len = src.length; List<Byte> res = new ArrayList<>(); for (int i = 0; i < len; i++) { if (src[i] > 0 && src[i] < 127) { res.a...

2022-03-20 18:31:51 2551

原创 Android Binder机制的一次数据拷贝

  传统进程间的交互需要先将数据从用户态拷贝到内核态,然后在内核态将数据拷贝到对应的进程申请的内存中,对应的进程再将数据从内核态拷贝到用户态。

2022-03-07 17:18:46 3668

原创 Android Binder getCallingUid() getCallingPid()

Binder getCallingUid() getCallingPid() 返回?  Android在进程间交互的时候,会使用Binder机制。在Binder交互过程中,通过Binder.getCallingUid()、Binder.getCallingPid()得到调用方的UID和进程PID。 /** * Return the ID of the process that sent you the current transaction * that is being pr

2022-02-27 16:38:52 6496

原创 Android C++ Parcel

成员变量mData是存储数据的内存,mDataSize是数据的大小,mDataCapacity是存储内存的容量,mDataPos是数据的位置。mObjects是为了保存Binder类对象使用的,mObjectsSize数据里面保存的Binder类对象的数量,mObjectsCapacity是内存中可以保存Binder类对象的大小容量。成员变量mOwner是释放内存的方法,可能设置,也可能不设置。ServiceManager IBinder b = ServiceManager.getServiceOr

2022-02-24 21:58:23 2621

原创 Android TypedArray简单分析(一)使用

每次看View源码的时候总能在构造函数那块看到TypedArray,看一下常用的方法 /** * Retrieve styled attribute information in this Context's theme. See * {@link android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} * for more informati

2021-11-23 17:29:25 4165

原创 Android 查找最近的可以获取焦点的控件(二) 未指明控件下一个查找属性的查找

该篇文章承接Android 查找最近的可以获取焦点的控件(一)findNextFocus()第3步将其相关代码摘录如下: focusables.clear(); effectiveRoot.addFocusables(focusables, direction); if (!focusables.isEmpty()) { next = findNextFocus(effectiveRoot, focu

2021-11-11 23:25:00 2612

原创 Android 查找最近的可以获取焦点的控件(一) 指明控件下一个查找属性的查找

/** * Find the nearest view in the specified direction that can take focus. * This does not actually give focus to that view. * * @param direction One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT * * @return The ne...

2021-11-11 23:20:30 3478

原创 Android 控件获取焦点

请求焦点  方法requestFocus()代码如下: public final boolean requestFocus() { return requestFocus(View.FOCUS_DOWN); } public final boolean requestFocus(int direction) { return requestFocus(direction, null); } public boolean reque

2021-11-07 00:23:01 8380 1

原创 Android触摸事件派发(二) View的onTouchEvent()

  View类的onTouchEvent()的代码如下: /** * Implement this method to handle touch screen motion events. * <p> * If this method is used to detect click actions, it is recommended that * the actions be performed by implementing and calli

2021-10-30 11:23:07 1297

原创 Android触摸事件派发(一) ViewGroup的dispatchTouchEvent()

ViewGroup的派发事件代码 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onTouchEvent(ev, 1); } // If the event targets the acce

2021-10-14 21:55:13 878

原创 Android MotionEvent理解

Java层MotionEvent对应C++层MotionEventJava层MotionEvent类下面的mNativePtr指向C++层MotionEventC++层MotionEventclass MotionEvent : public InputEvent {…………protected: int32_t mAction; int32_t mActionButton; int32_t mFlags; int32_t mEdgeFlags; int32_

2021-09-14 00:33:54 968

原创 Android ScrollView滚动超过边界,松手回弹

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器Android原生的ScrollView滑动到边界之后,就不能再滑动了,感觉很生硬。不及再多

2021-04-02 14:18:21 1387

原创 POI库更新Excel图片

  更新图片包括把旧图片删除,新图片插入。  不过,去POI的API里面去找相关的内容的时候,只能比较容易找到添加图片的方法,删除图片的方法很难找到。并且网上的相关删除的也比较少,搜索了好久,从Stack Overflow上找到了一个比较靠谱的方法,如下:public static void deleteCTAnchor(XSSFPicture xssfPicture) { XSSFDrawing drawing = xssfPicture.getDrawing(); XmlCursor cur

2020-07-24 16:57:29 354

原创 MQTT使用的笔记(结合源代码)

MQTT理解(结合类库源代码)你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体...

2020-06-08 17:21:13 3862 1

Android系统配置相关平台xml文件

Android平台系统配置相关xml文件 在/system/etc/permissions目录下 可以用来理解代码使用,作为参考

2024-02-06

Windows10_WMVCORE.DLL

如果win10里WMVCORE.DLL找不到了,其他的修复方法都试过了还不行,可以试试直接将该文件放到 C:\Windows\System32\。然后建立文件,regis.bat,向其中复制如下 @echo 开始注册 regsvr32 %windir%\system32\WMVCore.dll /s @echo dll注册成功 @pause 保存,执行。

2022-08-28

空空如也

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

TA关注的人

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