![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 79
图王大胜
一名Android FWK程师;专注系统思维
展开
-
ijkplayer编译 android版本
至此,就可以成功编译出来ijkplayer工程。注意:这里编译出来的不仅仅是so库,本身就是一个Android Studio可以直接打开的工程。至此,就可以成功编译出来依赖的ffmpeg库。环境安装和配置完成后,开始编译ijkplayer项目。原创 2024-06-14 05:00:00 · 653 阅读 · 2 评论 -
Android Framework 常见解决方案(29)添加应用开发的共享库
通过设置配置文件public.libraries.txt以及在system分区下添加so动态库的方式,让系统扩展动态库。关于动态库的拷贝较为简单,直接配置即可,这里主要解读下配置文件public.libraries.txt。原创 2024-04-15 16:59:32 · 1653 阅读 · 0 评论 -
Android Framework 常见解决方案(28)system分区自定义方案
一般在定制系统时,都会做预置apk和各类其他资源,很有可能超出系统默认设置的系统分区大小,也就会导致编译system时因超出默认设置的分区大小而失败。一般的做法是修改android framework时,修改对应项目的BOARD_SYSTEMIMAGE_PARTITION_SIZE的值。BOARD_SYSTEMIMAGE_PARTITION_SIZE是在 Android 系统构建过程中使用的板级配置变量之一。它在 Android 框架中的主要作用是指定系统镜像(system partition)的大小。原创 2024-04-02 16:11:52 · 1473 阅读 · 0 评论 -
Android Framework 常见解决方案(27) adb局部命令生效解决方案
这样的改动一般是为了防止客户拿到定制设备后对软件偷家,但同时我们又需要一些特殊定制,比如抓日志logcat这种。因为针对前者的限制,我们完全可以值接禁用adb即可,不需要再做特殊修改。但基于前者的需求我们又希望能有一些定制的命令或者极少常见命令可以正常使用,那么就需要对adb有一定了解的情况下定制修改了。这里的原理是主要针对adbd中关键位置进行过滤和特殊处理操作。原创 2024-01-15 19:00:00 · 786 阅读 · 0 评论 -
Android Framework 常见解决方案(26)user版本可root方案
User版本默认是没有root权限和remount功能的,一般该方法用于调试性能相关问题。如果使用debug版本对照,差异过大,因此就有了这样的需求。修改的核心原理就是调整adbd及相关属性中的一些判定,即user和debug版本的区别点入手。另外就是user版本中本身是没有remount的,需要单独添加才行。同时也需要修改should_drop_privileges的返回值以防止降低adbd进程的权限等限制。原创 2024-01-10 19:00:00 · 1155 阅读 · 0 评论 -
Android Framework 常见解决方案(25-1)定制CPUSET解决方案-framework部分修改
由于修改中涉及代码量过大,这里拆分成两节进行展示。本章节主要针对第1部分修改进行说明。下一篇文章主要对第2和第3部分修改进行说明。原创 2024-01-09 20:25:07 · 1378 阅读 · 0 评论 -
Android Framework 常见解决方案(25-2)定制CPUSET解决方案-system修改及编译部分调整
由于修改中涉及代码量过大,这里拆分成两节进行展示。本章节主要针对第2部分和第3部分修改进行说明。上一篇文章主要对第1部分修改进行说明。原创 2024-01-09 20:25:04 · 1283 阅读 · 0 评论 -
ALVR 编译 windows && android [Streamer &Client]
说明:因为在实际操作中发现,在真机上直接编译会影响环境变量和其他项目的编译,因此这里使用docker的编译,也更为稳妥。原创 2023-12-19 21:30:00 · 799 阅读 · 0 评论 -
Android Native崩溃信息分析和 工具(addr2line和ndkstack)使用
针对native的崩溃信息。一般来讲,较快的方式是直接检索到backtrace,然后通过分析和使用工具addr2line和 ndk-stack等定位到出问题的地方。原创 2023-11-15 20:48:55 · 1341 阅读 · 0 评论 -
Android Framework 常见解决方案(24)屏蔽FallbackHome,去除 Android正在启动,直接进入Launcher
开机以后,设备会有一个“android正在启动”这样的弹框,这个界面是一个叫FallbackHome的Activity来展示的。FallbackHome机制是Android系统启动过程中的一种降级处理机制。当系统启动时,如果默认的Launcher应用无法正常加载或出现错误,系统会自动启用FallbackHome来替代默认Launcher。但一般为了改善产品体验,最终决定移除弹窗页面,直接进入默认的Launcher,避免弹窗对用户界面的干扰。原创 2023-11-01 17:34:37 · 2876 阅读 · 4 评论 -
Android 理解/生成/使用/查看 签名(V1-V4)
签名的生成主要通过Android Studio/工具keytool使用(普通签名)或者Android Framework生成(主要针对系统签名)。这里的Keytool是Android开发工具包(Android SDK)中的一个工具,用于生成和管理数字证书、密钥对和证书请求。它是一个命令行工具,用于执行与密钥和证书相关的操作,例如创建密钥存储、生成密钥对、导出证书等。生成密钥对:Android Keytool可以生成公钥和私钥对,这对密钥可以用于加密、解密和数字签名等操作。原创 2023-10-27 15:08:48 · 2955 阅读 · 0 评论 -
Android Framework 常见解决方案(23)三方应用APP启动绑核setAffinity设置
一般来说这个需求主要是为了应用启动时设定绑核相关操作,但是如果没有三方应用的源码想要让其绑定再其他核心上就要修改framework源码了。framework源码修改的原理是:在zygote创建应用子进程(Fork操作)时做白名单处理,针对不同的应用APP进程进行可以有不同的绑核策略。关于Zygote的初始化以及创建APP进程的流程这里就不多说了,最终创建进程回调用到这里:com_android_internal_os_Zygote.cpp中的。原创 2023-10-12 21:23:46 · 602 阅读 · 0 评论 -
Android SurfaceFlinger导读(04)理解BufferQueue
说明:关于导读:导读部分主要是方便初学者理解SurfaceFlinger代码中的机制,为后面分析代码打下一个更好的基础,这样就可以把更多的精力放在surfaceFlinger的业务逻辑分析上。关于代码分支:以下代码分析均在android5.1.1_r3分支上 目录frameworks/native/services/surfaceflinger为root目录总之,理解这些概念是 Android 图形渲染和显示的关键,尤其是在处理图形性能和显示质量时。原创 2023-10-07 00:13:08 · 908 阅读 · 0 评论 -
Android Framework 常见解决方案(22)防应用被LowMemoryKillerDaemon(LMKD)杀掉
LMKD 借助 Linux 内核的 OOM(Out of Memory)机制来管理内存。当系统内存不足时,OOM 触发器会发送信号给LMKD,通知其进行内存管理。LMKD根据预先定义的策略和优先级,选择性地终止一些进程,以释放内存。这里选择运行到第4步时进行进程终止过滤,即使用包名进行过滤。原创 2023-09-28 22:00:00 · 769 阅读 · 3 评论 -
Android Framework 常见解决方案(21)默认开启adb
文件 AOSP/frameworks/base/services/core/java/com/android/server/adb/AdbService.java。设置默认ADB Enable为真,android的user版本中也默认为真。在该文件的systemReady中修改。原创 2023-09-20 17:54:54 · 1249 阅读 · 2 评论 -
Android SurfaceFlinger导读(01) surfaceFlinger设计师
surfaceFlinger是一个名为Mathias Agopian的工程师编写的。作者Mathias Agopian有着BE和PalmSource的工作经历,于2006年加入了Android团队。他是一个晚睡晚起的人,常常很晚到公司,也很晚才离开。他是一个喜欢专注写代码而尽量避开所有会议的人。他是一个童年时期就学习电脑编程,并有所成就的人(曾为雅达利猎鹰开发图形和音频程序,并未计算机杂志撰写文章,后为Be开发了打印机驱动程序)。原创 2023-09-20 00:27:13 · 595 阅读 · 0 评论 -
Android SurfaceFlinger导读(03)理解MessageBase
/说明:以下代码分析均在android5.1.1_r3分支上 目录frameworks/native/services/surfaceflinger为root目录。原创 2023-09-11 23:54:30 · 565 阅读 · 0 评论 -
Android Framework 常见解决方案(20)UDP广播无效问题
该问题同时存在于androidApp和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效,有意思的是有的android系统可以,有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的,代码不变,只是简单的编译移植过来就变得莫名其妙的不行了,头还真是大的不行。在移植到android的过程中实际上是使用android走JNI调用C++的方式来使用,这里就不详述了。最后分析,发现,果然是android的问题。原创 2023-08-19 09:56:22 · 1266 阅读 · 0 评论 -
Android Framework 常见解决方案(18)开机启动并设置默认输入法
在aosp/frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java的loadSecureSettings函数中添加。在aosp/frameworks/base/packages/SettingsProvider/res/values/defaults.xml添加。可以根据自己的实际情况调整脚本内容。原创 2023-04-07 19:02:37 · 909 阅读 · 1 评论 -
趋势信息整合(01) 谷歌google开发者 那些事儿
说明:本文是知乎上 谷歌开发者中 内容的索引,为啥我要整理这玩意儿呢?原因如下:便捷查找相关信息,毕竟知乎上633篇文章快速找些关键信息不容易。 该账号从2018到现在一直还在维护着,墙内更新不算太慢,内容较为系统。 用 这样的方式了解谷歌最新的技术趋势 较为方便。关于整理:整理内容包括google开发者大会、android studio、flutter、kotlin、jetpackCompose、Hilt、workManager、TensorFlow、Android版本等的更新信息。 整理原创 2022-04-13 13:20:10 · 2773 阅读 · 0 评论 -
android系统核心机制 基础(10)Ashmem匿名共享内存机制
1 Ashmem匿名共享内存机制 简介Ashmem是一种匿名共享内存机制,主要用于进程间大量传递数据。1.1 为什么要有Ashmem匿名共享内存机制?Android系统已经添加了Binder这个高效的跨进程通信的机制,那为什么还要搞一个Ashmem 匿名共享内存机制呢?因为binder机制主要用于进程间的通信,适合进程间的方法调用(A进程的X方法调用B进程的Y方法),但如果进程间需要传输大量数据则并不可行,关于binder传递数据的限制我们可以看Binder初始化时的宏定义($AOSP/fr原创 2022-03-03 16:07:47 · 3930 阅读 · 0 评论 -
Android APP OpenGL ES应用(02)GLSurfaceView 纹理
1 纹理解读@1 纹理概念:纹理是一种图形数据,用于包装不同的物体,就像衣服一样,衣服的各种展示样式就是我们所说的纹理。@2 纹理与渐变色:渐变色:光栅化过程中,计算出颜色值,然后在fragment shader中赋值。 纹理:光栅化过程中,计算出当前片段在纹理上的坐标,然后在fragment shader中根据纹理坐标获取相应的颜色值。@3 纹理坐标(也叫ST纹理坐标 或 UV坐标)与顶点坐标的对比:顶点坐标 & 纹理坐标 草图@4 顶点坐标 &立方体面数组 &.原创 2022-02-13 15:10:59 · 2665 阅读 · 0 评论 -
Android APP OpenGL ES应用(01)GLSurfaceView 2D/3D绘图基础
1 Android 3D图形基础简介1.1OpenGL ES简介OpenGL本身是开放图形库的一种标准,定义了一个跨语言、跨平台的编程规范,主要用于3D图形编程。OpenGLES是OpenGL的裁剪版本,主要是针对嵌入式设备/移动设备(像手机、游戏机这种等等。。。)进行裁剪后的库。对于Android设备来说主要是用OpenGL ES。从初学者角度来讲 OpenGLES和OpenGL差别不大。OpenGL主要使用GPU进行绘图,关于CPU和GPU的对比如下所示:CPU:计算量小,适用于复.原创 2022-02-13 11:48:19 · 3608 阅读 · 0 评论 -
Android Framework 常见解决方案(17)Broadcast调起输入法界面并实现文本传输的方法
收广播,在android framework层需要修改InputMethodService.java,文件对应的具体路径为:$AOSP/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java。原创 2022-02-10 13:10:30 · 1555 阅读 · 1 评论 -
Android APP完整基础教程(18)存储
1 SharedPreferences和Editor@1SharedPreferences和SharedPreferences.Editor解读SharedPreferences用于存储类似配置信息的内容,主要是简单的键值对(key-value)。对于数据存储,无非是 读和写。关于SharedPreferences存储数据:SharedPreferences本身用于读取(getXXX(key,defvalue))数据。没有关于写数据的方法。 SharedPreferences通过edit.原创 2022-02-08 14:32:07 · 1466 阅读 · 0 评论 -
Android APP完整基础教程(17)图形系统-SurfaceView
1 SurfaceView的绘图机制@1 理解SurfaceView为什么要使用SurfaceView,而不是直接使用View?这里要考虑到动态场景和静态场景的差异,相对于动态场景:View组件缺少双缓冲机制。存在图像撕裂/显示不全的情况。 View组件无法局部更新。当程序需要更新图片时,程序必须重新绘制View上的整张图片 View的更新受限:新线程无法直接更新View。可以理解为:静态绘图用View更合适,但动态绘图SurfaceView更适合。2 SurfaceView实战原创 2022-02-06 21:54:35 · 4559 阅读 · 3 评论 -
Android APP完整基础教程(16)图形系统-图像特效
该部分主要基于Canvas的绘图系统介绍一些常见的特效。1 扭曲特效这里使用Canvas的drawBitmapmesh对图像的局部进行扭曲特效处理。该效果主要是在APP上显示“水波荡漾”、“红旗飘扬”等扭曲效果,非常灵活。drawBitmapmesh定义如下:public void drawBitmapMesh (Bitmap bitmap, int meshWidth,int meshHeight, float[] vert原创 2022-02-06 10:50:50 · 2256 阅读 · 0 评论 -
Android APP完整基础教程(15)图形系统-Canvas绘图
1 绘图基础1.1 绘图基础类解读与实战绘图基础类涉及 Canvas(画布)、Paint(画笔)、Path(多条直线任意图形)。@1 Canvas类解读Android绘图方式是继承View组件,并重写它的onDraw()方法来实现绘制。Canvas的绘制方法有:API详细内容可以参照文档:Android Canvas 各种drawXXX绘制方法除了绘制drawXXX方法,还有rotate(旋转)、scale(缩放)、skew(倾斜)、translate(平移)来对其进行坐标变换。原创 2022-02-05 17:48:00 · 3280 阅读 · 0 评论 -
Android APP完整基础教程(14)图形系统-Bitmap类及拓展
1 Bitmap简介Bitmap(位图)本质上就是一张图片的内容在内存中的表达形式。它将图片的内容看做是由存储数据的有限个像素点组成;每个像素点存储该像素点位置的ARGB值。Android可以将所有的图片资源的内容以Bitmap对象的形式加载到内存中,再通过ImageView的setImageBitmap(Bitmap b)方法即可展示该Bitmap对象所表示的图片内容。为什么不直接通过XML引用资源,还要使用bitmap?如果是需要展示项目中的图片资源文件,我们只需要调用ImageView的s原创 2022-02-03 16:58:59 · 1009 阅读 · 0 评论 -
Android APP完整基础教程(11)应用资源-基础2
1 属性资源1.1 XML属性资源基础主要针对自定义组件的属性,具体格式如下:<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="test" format="string" /> <declare-styleable name="MyView"> <attr name="textColor" format="color"...原创 2022-01-29 22:50:34 · 1559 阅读 · 0 评论 -
Android APP完整基础教程(12)应用资源-Pull解析
1 XML资源文件简介android程序自带的xml文件一般放在values/xml/xml_name.xml处,这里需要使用new->file创建一个新的xml文件。xml文件的版本代码如下:<?xml version="1.0" encoding="utf-8"?>java代码中引用:R.xml.xml_name来表示xml资源文件,获取xml属性方法如下://获取一个解析器对象,返回的是一个XmlResourceParser对象Resources.getXml(原创 2022-01-29 14:51:10 · 1401 阅读 · 0 评论 -
Android APP完整基础教程(13)应用资源-动画
动画模式在android系统中被分为三类,分别为:tween(view) animation:补间动画 frame(drawable) animation:逐帧动画 property animation:属性动画本章节分别对齐进行解读。1Tween Animation1.1 Tween Animation基础Animation是以XML格式定义的,XML文件存放在路径res/anim下。这里按照XML文档的结构{父节点|子节点|属性}来介绍Tween Animation。先介绍Twe.原创 2022-01-28 23:36:32 · 1524 阅读 · 0 评论 -
Android APP完整基础教程(10)应用资源-基础1
1 Android应用资源简介Android应用程序主要由两部分内容组成:代码和资源。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就可以支持不同的UI布局。这种特性使得应用程序在运行时可以适应不同的屏幕大小和密度, 以及不同的国家和语言等。2 Android应用程序资源的分类Android应用程序资源主要分为两大类,分别是assets和res。2.1 assets类资源原创 2022-01-27 17:35:59 · 1174 阅读 · 0 评论 -
Android APP完整基础教程(09)四大组件-载体Intent
Intent简介intent理解为通信载体,系统是“大海”,应用为“各个国家”,组件为“国家的岛屿”,通信载体为“小船”。intent可以是启动某个组件的“意图”,也可以是程序组件之间的通信媒介。通过intent可以启动activity、service,还可以发送广播等。Intent的分类:显式Intent:通过组件名指定启动的目标组件(就像女孩子相亲,她就要找“梁山伯”)。 隐式Intent:指定Intent的Action、Data、Category,当启动组件时, 会匹配AndroidMa原创 2022-01-26 16:26:48 · 1038 阅读 · 0 评论 -
Android APP完整基础教程(08)四大组件-ContentProvider
1 ContentProvider相关概念ContentProvider是跨应用数据交换的标准,主要用于在许可的情况下获取其他应用的数据。为了更好的了解ContentProvider,我们需要了解URI和MIME。1.1 URI(Uniform Resource Identifier)统一资源标识符这个标识符主要用于唯一标识 ContentProvider和其中的数据。URI 为系统中的每一个资源赋予一个名字。1.1.1 URI格式解读每一个 ContentProvider 都拥有一个公原创 2022-01-24 17:00:15 · 818 阅读 · 0 评论 -
Android APP完整基础教程(07)四大组件-BroadcastReceiver
1 BroadcastReceiver简介BroadcastReceiver本质上是一个全局监听器,用于监听系统全局的广播消息(在android O系统之后进行了改动,启动BroadcastReceiver的Intent必须是显式Intent,就像启动service的intent一样。要么直接设置BroadcastReceiver类名,要么通过action和package来设置显式Intent)。对比监听器onXXXlistener 和 BroadcastReceiver:onXXXlisten原创 2022-01-22 23:29:38 · 1157 阅读 · 0 评论 -
Android APP完整基础教程(06)四大组件-Service
1 一张图解读Service这里用一张图解读 生命周期 & 基本概念 & 关键回调方法解读2Service类关系解读关于Service类的父类、子类的继承关系图如下所示:3 配置ServiceService和Activity都是android系统组件,都需要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Service。简单的service组件内容如下:<service android:name=".FirstSer.原创 2022-01-20 01:00:35 · 1034 阅读 · 0 评论 -
Android APP完整基础教程(04)UI-事件机制
上一节UI组件的学习和练习主要是让我们对绘制有一定的了解,接下来主要谈论UI组件对触摸、滑动。。。等动作的响应和处理部分,而这就涉及到android中的事件处理机制。android中提供2种事件处理机制:基于回调的事件处理:重写组件的回调方法,代码相对简洁。 基于监听的事件处理:绑定事件监听器,事件发生则自动调用对应的方法处理。1 基于监听的事件处理2 基于回调的事件处理3 Configuration获取系统设置4 handler Message事件机制5 AsyncTask事件原创 2022-01-16 22:36:49 · 844 阅读 · 0 评论 -
Android APP完整基础教程(05)四大组件-Activity
1 一张图解读activity这里用一张图解读 生命周期 & 基本概念 & 关键回调方法解读2 activity类关系解读关于activity类的父类、子类的继承关系图如下所示:3activity加载模式解读@1 为什么activity要 指定加载模式?因为android 使用task(栈结构)来管理activity,当启动一个应用时,android会为之创建一个task(可以理解为activity栈),然后启动这个应用的入口activity。但androi.原创 2022-01-18 12:31:09 · 1545 阅读 · 0 评论 -
Android APP完整基础教程(02)UI-基础和Layout布局
该系列文章主要基于AndroidQ平台,主要介绍Android应用基础开发相关知识。主要针对安卓应用开发路径的完整解读和coding练习内容的解读。文章持续更新中。。。1View组件解读Android应用开发中 大部分UI组件都放在android.widget包及其子包、android.view包及其子包中。Android应用的所有UI组件都继承了View类(表示一块空白区域)。View类还有一个重要的子类ViewGroup,可以作为其他组件的容器使用。Android采用“组合器”设计模式来设计V.原创 2022-01-13 21:47:05 · 1516 阅读 · 0 评论