- 博客(148)
- 资源 (3)
- 收藏
- 关注
原创 apk安装流程
郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的提issue或者发邮件至guoxiaoxingse@163.com与我交流。我们来思考一下Android系统是如何安装一个APK文件的,从直观的流程上,当我们点击一个APK文件或者从应用商店下载一个APK文件,会弹起一个安装对话框,点击安装就可以安装应用。那么这里面的流程是什么样的呢?🤔。
2024-08-15 17:13:00
1419
原创 安卓apk打包流程
Android的包文件APK分为两个部分:代码和资源,所以打包方面也分为资源打包和代码打包两个方面,这篇文章就来分析资源和代码的编译打包原理。APK整体的的打包流程如下图所示:-f-J ./gen-S ./res/dx --dex–verbose-f-J ./gen-S ./res/理解了整体的流程,我们再来看看具体的细节。
2024-08-15 16:52:31
1257
原创 进程启动后到加载Activity的流程源码解析(基于安卓版本28)
zygote进程fork之后,系统会 启动ActivityThread的入口函数main()。ActivityThread准备一个ApplicationThread类,用于和AMS进行通讯。Activity与AMS通讯时通过binder机制进行的。
2023-05-22 23:46:23
1380
原创 Protobuf语法解释
先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结果。文件的第一行指定了你正在使用proto3语法:如果你没有指定这个,编译器会使用proto2。这个指定语法行必须是文件的非空非注释的第一个行。SearchRequest消息格式有3个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。
2023-05-17 13:42:09
1303
原创 Android之大图加载BitmapRegionDecoder
BitmapRegionDecoder是Android中的一个类,用于在不加载整个图像的情况下,仅加载图像的一部分。这对于处理大型图像或需要动态加载图像的应用程序很有用。第一个示例加载整个图像,而第二个示例仅加载图像的一部分。一旦整个图像被加载,您可以使用BitmapRegionDecoder加载图像的一部分。要使用BitmapRegionDecoder加载图像的一部分,您需要首先加载整个图像。这里我们使用了一个InputStream来加载图像,但您也可以使用其他方法来加载图像。3.加载图像的一部分。
2023-05-16 13:19:26
504
原创 车载之-自定义系统服务
SystemServiceRegistry用于给客户端获取服务的类,有一个static块 执行了registerService用于注册.#配置自定义服务selinux角色。#允许所有app使用自定义服务。用户:角色:类型:安全级别。#配置自定义服务类型的权限。
2023-04-13 12:04:07
556
原创 jetpack之Navigation
当前Android开发中使用Fragment来开发页面已经成为主流做法。Fragment轻量、可控性强等优点让人感觉很香。但是Fragment也有自己的硬伤,那就是回退栈与页面参数传递。
2023-04-12 15:05:31
620
原创 车载-串口通讯
与RS-232标准不同,RS-422标准使用两条平衡传输线(A线和B线)传输差分信号,其中A线为正极信号,B线为负极信号,信号传输距离可达1200米。在串口通信中,RXD通常是数据传输的被动方。因此,在将串口信号接口与TTL电路连接时,需要使用电平转换器或者逻辑电平转换器,将RS-232或RS-485电平转换成TTL电平,从而实现串口与TTL电路之间的数据传输。与RS-232标准不同,RS-485标准采用差分信号传输,即使用两个相互反向的信号线(A和B)来传输数据,其中A线为正极性,B线为负极性。
2023-03-30 17:50:16
2786
原创 安卓进阶系列-系统基础
因此,在高性能计算机和嵌入式系统中,人们使用了一些改进的结构来克服这个问题,如缓存和流水线等。此外,由于指令和数据存储在不同的存储器中,可能会导致一些困难,例如在程序中传递指针时,需要将指针的值从数据存储器中传递到指令存储器中。它是基于套接字(Socket)技术实现的,与网络套接字不同的是,Unix Domain Socket不需要通过网络协议栈,而是直接在内核中进行进程间通信。哈弗结构与冯·诺依曼结构不同之处在于它使用了两个独立的存储器,一个用于存储指令,另一个用于存储数据,这两个存储器可以同时访问。
2023-03-17 11:26:27
845
原创 Android实现动态换肤-原理篇
在安卓中工作中,又是我们会遇到换肤的需求,虽然我们可以使用策略模式以及在app中保存多套UI的方式实现此功能,但是并不能通过网络请求拿到资源包来动态换肤,今天讲的这种方式时支持插件化的方式动态实现换肤的。
2022-11-16 09:29:32
948
原创 Java中的反射用法
android很多第三方框架都用到了动态代理的技术,并且反射更常见,比如hook ams做集中登录,Retrofit根据接口直接实现请求方法等,所以学习反射对于通往高级android是一个必经之路。
2022-09-21 23:55:09
2629
原创 android中输入系统之内核到InputManagerService过程(源码)
这是一个系列的文章,今天先分析内核到ims的过程,以后有时间分析ims到wms以及从wms到viewRoot的过程。
2022-09-07 23:25:32
1192
原创 Android中注解处理器系列之-简单使用
安卓中很多框架都用到apt技术,虽然我们平时开发中很少用到apt技术,但是我们以后可能转为架构师,对代码进行架构设计等场景时,会用到apt。
2022-09-05 23:44:03
745
原创 IntentService的使用以及源码解析
主要讲解IntentService 的使用以及源码解析,虽然IntentService已经过时,但是明白其原理是必要的,如果以后有时间我再补充JobService 的使用。
2022-09-04 00:18:33
182
原创 安卓Handler机制重要知识点汇总(必知必会)
handler中有很多小细节,也容容易在面试中会被问到,这些是自己在平常中积累的一些知识点,自认为比较全面,拿来与读者分享,谢谢。
2022-08-25 23:13:26
300
原创 Android中获取唯一的id
由于android的版本更新,无法获取mac以及Imme号,也没有官方固定的api来获取唯一Id,所以需要一个工具类来获取设备唯一的id,但是此工具类并无法做到百分百唯一,但是可以在应用中使用。
2022-08-24 10:04:00
4223
原创 Android Gradle依赖汇总
依赖配置目前 Gradle 版本支持的依赖配置有(Android Studio 3.0及以上版本,Gradle Version在4.1及以上版本,Android Plugin Version在 3.0及以上版本。):implementation、api、compileOnly、runtimeOnly 和 annotationProcessor。已经废弃的配置有:compile、provided、apk、providedCompile。各配置项具体作用如下[括号后面为对应的已废弃的配置]:impl
2022-05-13 07:29:01
1816
原创 AndroidStudio本地依赖aar
文章目录高版本依赖aar低版本依赖网络库中依赖高版本依赖aargradle使用是gradle 4.1,对应Android Studio gradle 3.0.1插件。高版本gradle上使用aar本地依赖很简单,基本上与jar的依赖方式一致。将所需要的aar包copy到应用所在module的libs目录下在应用所在module里的build.gradle里添加:compile fileTree(dir: 'libs', include: ['*.jar','*.aar'])低版本依赖低版
2022-05-06 14:28:33
2570
原创 Android启动流程概述
文章目录启动流程总体启动流程ServiceManager进程启动Binder线程初始化Activity的启动流程启动流程Android启动是一个比较复杂的过程,今天只是粗略罗列一下Android的整体的启动流程,之后会详细就每个流程进行分析。每天进步一点点。总体启动流程开机按钮引导程序BootLoaderLinux内核启动启动init进程查找init.rc文件,并解析。Zygote进程启动SystemServer进程启动Binder线程池开启SystemServiceManage
2022-04-26 21:51:35
1415
原创 Android之Zygote和SystemServer启动过程
文章目录总体时序init启动流程init进程的启动三个阶段入口函数property_inithandle_property_setinit.rc文件解析init.rcAndroidRuntime总体时序先概述一下总体运行流程,当按电源键,首先是加载系统引导程序BootLoader,然后启动linux内核,再启动init进程,最后Zygote进程启动完成。理论上Android系统中的所有应用程序理论上都是由Zygote启动的。init启动流程用户空间的第一个进程,进程号为1(在《深入理解安卓内核思
2022-04-21 22:30:53
2401
原创 Android中强制指定库依赖版本
多个版本依赖出现问题。configurations.all { resolutionStrategy { force 'androidx.core:core:1.0.0'//强制指定的版本 }}
2022-04-21 17:42:00
3802
原创 Glide适配AndroidX
Glide适配AndroidX后,出现注解报错的问题,修改依赖方式如下: implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' annotationProcessor 'androidx.annotation:annotation:1.0.0'...
2022-04-21 17:07:51
1258
原创 Execution failed for task解决办法
AS 编译出现 Compilation error. See log for more detailsorg.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:xxx:compileDebugKotlin’在AS Terminnal 中输入命令:gradlew compileDebugKotlin --stacktrace既可以看到具体的错误,然后修改就好了...
2022-03-03 21:32:27
13149
原创 Android中的尺寸:densityDpi,heightPixels,widthPixels,scaledDensity,xdpi,ydpi
文章目录尺寸类型真机测试尺寸类型以下尺寸来自Android类DisplayMetrics下,描述摘自源码描述。densityDpi:The screen density expressed as dots-per-inch. May be either 120,160 or 240xdpi:The exact physical pixels per inch of the screen in the X dimension.ydpi:The exact physical pixels per
2021-12-09 09:27:19
3076
原创 Android路径
Environment.getDataDirectory() = /dataEnvironment.getDownloadCacheDirectory() = /cacheEnvironment.getExternalStorageDirectory() = /storage/emulated/0Environment.getExternalStoragePublicDirectory(“test”) =/storage/emulated/0/testEnvironment.getRootDirec
2021-06-17 14:25:56
130
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人