Andorid
文章平均质量分 81
Andorid的学习心得
fanged
野生程序员。。。这里主要是一些学习笔记和心得。。。
注:标题带TODO的内容都是未完成,内容有可能不准确。觉得有帮助请:https://ko-fi.com/fanged
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
天马G前端的使用
本文探讨了打造复古掌机的两种方案:安卓与Linux系统掌机的优劣势对比。安卓掌机兼容性更广,支持PS2模拟器和云游戏,但启动慢、UI割裂;Linux掌机启动快、界面统一,但功能有限。作者选择闲置小米9(性能优于主流掌机)搭配手机手柄,安装天马G前端(UI框架+模拟器整合),实现了低成本高性能的复古游戏方案。文章还分析了模拟器核心技术JIT的原理,并指出天马G本质是管理前端,实际运行仍依赖各模拟器APK。整体方案兼顾经济性与实用性,成功盘活了闲置设备。原创 2025-10-10 22:53:30 · 2198 阅读 · 0 评论 -
Android Secure Boot
首先,Secure Boot功能的目的是什么?查了下资料,就是不让设备刷第三方的固件。类似圆环套圆环,圆环第一环是CPU,CPU定制了空间保存密钥,然后就是Boot,然后是OS,最后一直套到最后APP。稍微要注意的就是有一个efuse,保存了根密钥的hash值,可以用来验证后面的hash是否正确。就是电子保险丝,一旦写入之后就不能更改。在Andorid的层面,又进行了扩展。搞了一个Verified boot,运行时也可以校验。原创 2024-05-18 19:29:40 · 1542 阅读 · 0 评论 -
安卓学习24 -- 网络
(出处见水印)这两张是能找到的比较清楚的图。目前可以看出,底层的网络业务,还是传统的linux内核提供。在安卓上增加的两个比较重要的部分分别是ConnectivityService和netd。这两个都是在system分区。通过socket和底层通信。systemvendorinit.rcConnectivityService提供上层封装给app,通过binder连接netd,netd封装了底层网络功能和驱动HAL。原创 2025-04-20 04:34:45 · 300 阅读 · 0 评论 -
Android学习23 -- multimedia
这个部分我没有太仔细去研究,图片都是来自(整体看看Android的多媒体系统),就算原文是正确的,考虑到安卓更新速度快,有些内容可能已经更新了。。。原创 2025-01-26 15:25:08 · 258 阅读 · 0 评论 -
Android学习22 -- perfetto
在之前的工作中就偶尔见到同事分析性能的时候,拿出漂亮的火焰图,或者XX图,当时非常惊讶,觉得怎么可以做这么好。后面看多了,才知道这个原来是安卓的perfetto工具,专门用来分析性能的。所以现在自己也玩玩。原创 2025-04-12 04:05:29 · 647 阅读 · 0 评论 -
Android学习21 -- launcher
之前在工作中,第一次听到launcher有点蒙圈,不知道是啥,当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂,毕竟之前接触过windows的桌面,那叫一个复杂。。。后面查了一下,Android的桌面倒是没那么复杂,本质其实就是一个App,系统启动之后跑起来的第一个app。原创 2025-02-04 18:37:43 · 2345 阅读 · 1 评论 -
Android学习20 -- 手搓App2(Gradle)
后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉及到安卓。现在既然环境都搭建了,索性在上一篇的基础上一起弄弄Gradle看。原创 2025-02-04 02:27:13 · 995 阅读 · 0 评论 -
Android学习19 -- 手搓App
之前工作中,很多时候要搞一个简单的app去验证功能,Android studio又过于重型,之前折腾gradle堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想手搓一下,趁着现在有时间,终于体验了一把。我的环境是windows10,实验设备没有用虚拟机,用了一个安卓平板,荣耀平板5。原创 2025-02-03 23:37:47 · 2211 阅读 · 0 评论 -
Android学习18 -- Gradle
不过在这里,分成了几类:implementation:用于运行时和编译时的依赖。好了,感觉主要还是增加了网络功能。1 plugins插件,这部分可以分为java,application,kotlin等等。这个示例项目展示了一个简单的 Java 项目如何使用 Gradle 进行编译和运行。testImplementation:仅在测试时需要的依赖。首先还是下载,因为我第一次已经下载过了,所以这里没有。这个文件比较简单,主要就是项目的名称。在上面的流程中,我抓了一个详细的log。Gradle必须的是两个文件。原创 2024-03-25 10:51:33 · 232 阅读 · 0 评论 -
Android学习17 -- Soong编译系统
模块通常通过关键字来定义,每个模块代表一个构建目标或任务。原创 2024-03-28 18:06:56 · 1007 阅读 · 2 评论 -
Android上运行OpenCV(Android Studio)
不过最后还是有个问题,就是优化的事。都知道opencv的性能很重要,不知道是怎么调用的硬件加速,然后有些优化或者定制是不是还要自己去改那个opencv_java4。剩下的也不打算看的太详细了,我还是更喜欢python版本的。有兴趣可以去看看sdk里面带的sample,感觉还挺详细。很简单就能加载,不过现在新版Opencv android的一些api和视频上的已经不同,要稍微改改。可以看到,核心就是封装的opencv的jni库。init的操作也是直接去开的so。整体来说没什么难的,照着教程来做就好了。原创 2024-12-07 17:51:20 · 583 阅读 · 0 评论 -
Android学习15--charger
最近正好在做关机充电这个,就详细看看吧。还是本着保密的原则,项目里的代码也不能直接用,这里就用的Github的。核心代码压缩包只有3M,比起AOSP整包的极度臃肿真是对比强烈。原创 2024-12-05 11:33:18 · 744 阅读 · 0 评论 -
Android上运行Opencv(AOSP)
NDK 提供了更高性能的计算能力,特别是在图像处理和计算密集型任务中,与 OpenCV 结合可以充分利用高通平台的硬件资源(如 NEON SIMD 指令集和 GPU 加速)。类也可以直接在 C++ 层调用摄像头,但在 Android 上可能需要手动适配摄像头 ID 和权限管理。高通平台支持 Hexagon DSP,通过 Qualcomm SDK,可以进一步优化特定任务。通过这些步骤,你可以在高通安卓平台上使用 NDK 调用 OpenCV 并高效访问摄像头数据。,将帧数据传递给 OpenCV 进行处理。原创 2024-11-19 01:02:42 · 1336 阅读 · 0 评论 -
安卓的OTA
然后在misc分区中写某个指令,misc应该是传统linux的uboot env分区,可以在里面写参数。OTA的全升级是system 分区、boot 分区和 recovery 分区,好像缺了好几个,vendor不升,product也不升,升级boot分区是因为在安卓中boot分区还包含了kernel。后面谷歌搞的AB分区,其实就是路由器的“烧不死”,两套系统,我以前也参与过类似东西的设计。当然,谷歌花活多,现在又加了动态分区和快照的技术,当然,严格来说这个其实也不算OTA的东西。原创 2024-03-14 01:38:07 · 557 阅读 · 0 评论 -
嵌入式设备的分区
它使用了一种称为设备映射器(Device Mapper, dm)的技术,将一个大的物理分区(即 super 分区)映射为多个独立的逻辑分区。最后嵌入式linux的分区,是挂载到某个文件夹,并不是盘符,这些都是和windows电脑分区的区别。里面有一些奇怪的地方,比如/dev/block/dm-*,/dev/fuse,selinuxfs,overlay,binder。第二点就是super -> /dev/block/mmcblk0p13,super这个,照理说这个是最大的分区,却没有看到挂载,再查了一下。原创 2024-08-06 09:44:11 · 576 阅读 · 0 评论 -
JNI示例
其实可以看到,JNI整个也并没有做太多东西,整个也没有对操作系统,语言做一些很深层次的定制,大部分还是基于语言的特性来弄的。有空可以看看JNI那几个宏,就一切都明白了。中间可能会提示Java没有装,装下面几个就可以了。也不用全装,headless装一个就行了。Linux下,没有在Andorid下面搞,安卓开发效率太低了。这里会生成HelloJNI.class。之后会生成头文件,HelloJNI.h。之后就会生成libhello.so。原创 2024-02-21 01:53:44 · 278 阅读 · 1 评论 -
OpenGrok使用
以前都是用的find,或者VScode里面的浏览,但是到了Android这个就不行了,代码太多了。都在用OpenGrok,所以俺也用一下。这里有两个步骤,一个是安装,是一个使用。原创 2024-05-08 00:41:50 · 1218 阅读 · 0 评论 -
Android音频系统
最近在做UAC的项目,大概就是接收内核UAC的事件,也就是声音相关事件。然后就是pcm_read和AudioTrackr->write之间互传。感觉略微有点奇怪,所以简单总结一下。原创 2024-06-21 18:50:07 · 909 阅读 · 0 评论 -
Android学习10 -- 认证测试
包含了一系列测试用例,涵盖了 Google Play 应用和服务的各个方面,如应用下载、应用安装、应用更新、应用支付等。Vendor Test Suite,VTS 是由 Google 提供的用于 Android 设备厂商的测试套件,用于验证设备是否符合 Android 兼容性要求。CTS Verifier 包含了一系列测试用例,涵盖了设备的各个方面,如屏幕、相机、传感器、音频、蓝牙等。它包含一系列测试用例,涵盖了设备的各个方面,如硬件功能、软件功能、API 的正确实现等。也是国外运营商的要求。原创 2024-04-09 17:27:51 · 779 阅读 · 0 评论 -
Android学习13 -- 编译系统
安卓的编译真的太多吐槽的地方了,有必须到croot下编译的,有随便改个.c就要七八分钟编译的。我有时候真的不知道这么多开发人员是怎么挺过来的。算了,下面这个写的很好了,我先看看吧。今晚简单看看这个编译系统soong吧。原创 2024-03-13 01:17:56 · 504 阅读 · 0 评论 -
Android学习14 -- VINF和兼容性矩阵
本质上其实就是两部分,设备提供什么能力,系统需要什么能力。然后看两者能否兼容匹配上。这两者都是使用xml进行描述。主要是Android8之后,system和vendor分离,为了确保两者的兼容性搞出来的。周末搞这玩意欲仙欲死,没办法只有看看。VINTF是供应商接口对象(VINTF 对象),准确的说,这个是属于兼容性矩阵概念。有点想起了以前看过的一个电影,异次元杀阵。下面是谷歌官方的图。我看说的一般是在/vendor/etc/vintf下面增加。说是下面这个命令可以列出所有接口。原创 2024-03-17 03:10:19 · 6643 阅读 · 0 评论 -
Android学习7 -- NDK1--概念
JNI我们都知道,存在很久的东西了,那么JNI和NDK有什么关系呢?我的理解,JNI只是NDK技术中的一个,谷歌对NDK的定义是一个开发包,没有像Linux中那么自由,但是好处是明显的,移动端最尴尬的就是跨平台,他把这事给你干了,编译器,调试器,底层库,都给你弄了,写代码之后自动就是ARM,X86多平台,一些库的选择事情他也给你干了,不用自己再去移植。对于想赚差价的中间商,也是有三个好处的。另一个是C/C++的代码更有通用性,移植到其它平台更方便。说到NDK,首先绕不过去的问题就是这玩意存在的意义。原创 2024-03-16 15:10:05 · 226 阅读 · 0 评论 -
高通平台初步
涉及到的部件主要有HLOS,MPSS(medem),aDSP&cDSP,XBL(Boot build),AOP,TZ,WLAN,BTFM,video,WiGig,VENUS,SLPI,CPE,Secure processor。前面都是开源,从TZ开始后面的都是给bin。首先是安装环境,一些常规的,主要是Ubuntu,JDK,repo,ARM交叉编译器,Python,Perl,Samba(可选)。上面的图有点小怪,主要是Libraies,Framework,App,这部分感觉应该是Google的。原创 2024-03-20 14:42:03 · 2256 阅读 · 1 评论 -
Android学习16--生产测试软件
生产测试软件则是用在生产流水线上。两者的功能其实大差不差,但是生产测试软件要考虑到自动化以及流水线的工序等等。之前把这个和安卓工程模式搞混了,现在才知道两个是不同的。工程模式是用在维修手机中的,发现手机的问题。后面空了再看吧,,,来不起了。原创 2024-05-15 01:37:37 · 263 阅读 · 0 评论 -
Repo学习
首先,Repo本体就是一个Python脚本,1500行,随便一个程序员一周也能写出来。但是开发的时候,尤其是真正的工业级开发,很多人只会涉及到一个仓,很少有大佬改多个仓,就算能力够,精力也未见的够。在这一步中,会安装完全版的Repo,还有很重要的Manifest文件。第一次初始化的时候,repo确实很方便,一次正确同步很多仓库。实际上通常使用第三方的平台,都会把这一部分的内容换成自家的,此时里面的数据都是预先就提供,所以这一步就不需要弄。脚本的结构其实也不难,就是标准的switch结构。原创 2024-02-16 23:26:54 · 309 阅读 · 1 评论 -
Android学习2 -- SDK 1(概览)
是如果要自己编译安卓,电脑的硬盘配置和内存都要升级。硬盘要单独的500G,内存最少得搞到32G。目前绝大多数电脑只到32G,要分给虚拟机这么多的话,要么电脑只装ubuntu,要么就升级内存到64。最详细的资料还是去看官网为佳,我这里只能算一个概述或者学习笔记吧。这里有个现实问题,repo不稳定容易断,断了恢复起来很麻烦。将近100G,百度云不开会员限速200来K,得下差不多一周。是国内的话会被墙,所以用官网的命令是下不下来的。Android.bp就是新的构建文件,Android.mk则是老的。原创 2024-02-17 02:03:14 · 913 阅读 · 1 评论 -
Android学习4 -- ADB的使用
本质其实就是一个加强版的串口工具(这样理解大差不差)。adb命令其实对应一个server,在板子上有一个adb的守护进程。晚上大概试用了一下,就只是一个工具,真的是很乏善可陈。除此之外就是命令行工具,此外好像没啥了额。3 支持Android特色,可以安装apk。2 集成了ftp的功能,可以上传文件。1 支持网络,可以多客户端。原创 2024-02-22 23:43:36 · 360 阅读 · 0 评论 -
Android学习5 -- HAL-1 概述
首先IPC有很多种,管道,域套接字,message,共享内存,问题是谷歌为什么要搞出来一套新的呢?在接口中主要定义的还是函数,也就是说比管道这些更上层,更适合Java的调用。就算上层函数调用,其实也很多方式,比如COM,soap,rpc都是干这事的。有大神说直通式就是使用HAL,但还是在一个进程,绑定式是使用HAL,但是数据通过Binder转发。现代HAL(Conventional HAL),使用Iibhardware来管理so,同时下层的驱动使用一个单独的分区,vender.img,和system解绑。原创 2024-02-29 02:40:47 · 2548 阅读 · 0 评论 -
试手一下CameraX(基础)
有JDK的,有要翻墙下Gradle的,有dependencies的,总之就是很难顺利跑起来。记得之前还在上课,因为Gradle的问题也搞出来很多乌龙,折腾半天。真的,这玩意真的是我用过最难用的IDE,也许没有之一。IDE嘛,再加上应用程序框架,其实有很多,比如VC++,QT,IOS,安卓,甚至web也算一种,骨子里内容其实都是那些。GUI框架,各种控件,消息管理,大家你抄我我抄你,东西总的来说差别也不大。Android Studio神奇的是就算你现在别人的全套工程,在你本地也不一定跑的起来。原创 2024-03-02 13:53:28 · 350 阅读 · 0 评论 -
试手一下CameraX(APP)
name,contentValues,mediaStoreOutputOptions都是作为参数使用。在output中,好像是使用了lambda函数,弄了一些内置行为。name,contentValues,outputOptions都是作为参数传进去。大体的流程就是首先取得surface,然后使用cameraProvider.bindToLifecycle,将surface作为参数传进去。这个应该是camerax的控件。增加两个按键,分别是takephoto和capturevideo,并增加按键事件。原创 2024-03-03 22:22:28 · 489 阅读 · 0 评论 -
Android学习1 -- 从嵌入式Linux到嵌入式Android
最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。首先还是说Android是基于Linux内核的,所以说骨子里还是linux,但是针对移动端,进行了深度优化。原创 2024-02-27 23:55:07 · 2864 阅读 · 2 评论 -
Android学习3 -- SDK2 (实操三个小目标)
三个实际练手内容。原创 2024-03-06 23:49:43 · 852 阅读 · 0 评论 -
Android的自启动
最近要用到这个,所以也花时间看看。从分层来说,安卓的自启动也分成三种,app的自启动,framework服务的自启动,HAL服务的自启动。现在简单说说这三种把。原创 2024-06-16 15:33:31 · 1570 阅读 · 0 评论 -
Android学习12 -- SEAndroid
SELinux(Security-Enhanced Linux),提供了内核级的安全访问,比以前ACL强很多。从上图可以看出,实际上andorid selinux就是在访问文件时,内核中有一些回调钩子,如果配置了,就会去检查。就这么简单。安全上下文是 SELinux 的核心。安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。查询文件的上下文,ls -Z。原创 2024-03-15 02:25:49 · 651 阅读 · 0 评论 -
安卓启动流程
还是以高通为例子。这次整理并不是很完善,下来会再整理。。。原创 2024-06-13 20:04:35 · 3046 阅读 · 0 评论 -
Android在不同层面增加应用
应用代码一般在开发者的项目目录下,packages/apps/YourApp/,比如。用户安装的应用(从Google Play或其他来源安装的APK)位于设备的。直接使用JNI,貌似也是可以的,各有利弊。是由Zygote进程启动的,它包含了大部分系统服务,如。Framework服务的源代码主要位于。Framework服务的代码编译后成为。和其他相关JAR文件,位于设备的。对于系统应用,源代码可能位于。HAL服务的源代码通常位于。系统应用(预装应用)位于。实现HAL服务,用C++文件)的形式存在,位于。原创 2024-06-03 01:55:09 · 500 阅读 · 2 评论 -
Android的刷机模式
不过EDL模式不懂也正常,因为这个是高通独有。感觉有点类似JTAG那种刷机吧。我的理解OTA是操作系统层面的升级,FastBoot是bootloader层面的升级,EDL就是类似JTAG的层面。不看不知道,一看原来这么多。想以前做博通方案,就是一个web刷机包刷到死。到底是技术进步了还是以前太浅薄?常用的应该就是OTA,FastBoot。EDL好像都很少用吧,不过今天确认用到了,还让我自己去焊接,我真无语了。原创 2024-05-31 01:20:00 · 1094 阅读 · 0 评论 -
Google Attestation Key
高通RPMB(Replay Protected Memory Block,重放保护内存块)是一种专用于存储敏感数据的安全存储区域,通常用于存储如认证密钥、加密密钥和其他安全性相关的数据。RPMB的主要特点是其重放保护功能,确保数据的完整性和安全性。安卓的key还是不少,比如widevine drm,attestation,ifaa,soter key。现在是出厂的时候要预置这个,如果没有会导致CTS出错。参考下面高通的文档,大概是以下的步骤。从产线的角度来看,手动步骤还是比较多的。原创 2024-05-29 15:36:27 · 2023 阅读 · 0 评论 -
Android学习24 -- Framework层
当应用程序需要发送通知时,会创建一个 Notification 对象,该对象包含了通知的各种属性,如标题、内容、图标、声音等。这篇文主要就只是讨论一下安卓的Framework,我对Framework的理解就是上层的类库,类似一个手机版的Windows平台的MFC。窗口信息:列出当前系统中所有的窗口,包含窗口的类型(如应用窗口、系统窗口)、窗口的布局参数(位置、大小)、窗口的焦点状态等。帮助应用程序访问不同的资源(如字符串、图像、布局文件等),同时支持不同的屏幕大小和分辨率等配置。这些还是简单写一些概要吧。原创 2024-05-29 01:36:27 · 780 阅读 · 0 评论 -
Android的烧写(基于高通平台)
这个看起来简单,实际也有很多门门道道,而且有时候这个是bringup的第一步,有可能在这里烧写会失败,要去定位分析。此外对高通的firehose协议也要有一定了解。最后还是要说说分区表,其实不管是QFIL还是fastboot,都是将bin烧写到分区表制定的地址。这部分之前有说过,就不多说了。大概是以上的分区,这些和安卓和高通设备都是强相关,可能换一个版本就不同了。这个就是第二种烧写办法,直接把bin写到分区中。原创 2024-05-18 19:33:35 · 562 阅读 · 0 评论
分享