- 博客(141)
- 资源 (12)
- 收藏
- 关注
原创 Battery Historian电量分析工具安装运行详解
文章目录Battery Historian安装Docker安装虚拟功能Android模拟器冲突源码编译安装下载配置问题working directory is not part of a module单步执行closure-library错误运行获取bugreport.txt渲染分析在线分析Battery HistorianBattery Historian是开源的工具,代码链接地址。工具可以用于分析Android(5.0及以上)设备——不插电前提下——运行过程中电池相关的信息和事件。工具可使应用开发
2020-07-28 22:55:28 3307
原创 Android Settings 设置项修改
在 Android 系统上,这个权限从 API 1 就已经开始有了。通过在 app 中设置权限允许 app。意思是在 app 的目标 api 是 23 (Android 6) 或更高版本时,app 用户必须显示地通过一个权限管理页面授权 app 拥有的权限。使用Intent和打开这个权限管理页面,让用户决定是否授权给 app。在 app 中可以调用查询系统设置是否可以修改。
2024-10-15 22:03:54 1492
原创 Compose UI 之 Card 卡片组件
Card是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。Card出上面列出的 3 中场景,还有其较多的场景可以使用卡片组件,这里不再一一列出。Compose UI 库中定义了 3 种样式的卡片组件。分别是 Filled Card,Elevated Card,Outlined Card。3 种卡片的设计准则是一致的。它们执行后的样式有所区别。默认情况下,Card。
2024-04-11 16:01:35 526
原创 Compose UI 之 FloatingActionButton 按钮
FAB 是最具突出效果的悬浮按钮,出现在屏幕右下角。通常位于屏幕右下角,具有显著的圆形形状和浮动的定位,用于呈现应用程序的主要操作或常用操作,例如开始一个新的任务、分享内容、启动一个动作等。Compose UI 库中,FAB 的样式有 4 种。下面看下不同类型的 FAB 大小效果。
2024-03-28 17:50:24 426
原创 Compose UI 之 Checkbox 复选框 & RadioButton 单选框
Checkbox和都是用于用户交互的常用组件,但它们的功能和用途有所不同。Checkbox是一个可以勾选或取消勾选的复选框,用户可以选择多个选项。它通常用于表示一系列可选项目,用户可以根据自己的需要选择任意数量的选项。在 Android Compose 的视觉呈现上,Checkbox可能具有特定的样式和动画效果,以符合 Material Design 或其他设计规范。则是一个单选按钮,它表示一组互斥的选项。在一组中,用户只能选择其中一个选项,一旦选中某个按钮,其他按钮会自动取消选中状态。
2024-03-24 20:27:11 677
原创 Compose UI 之 Segmented buttons 分段按钮
单选和多选都有其各自的优点和缺点。**单选**它的外观简洁直观,在选项较少的情况下,单选的分段式按钮占用空间小,且操作体验很好。但若选项较多(多于 5 个可选项)或复杂交互的情况下,使用单选分段式按钮就显得不够友好。**多选**它允许用户选择多个选项,适用于需要复杂筛选或配置的场景。当每个按钮被点击独立选中时,可以提供清晰的视觉反馈。与单选相比,多选的实现可能更复杂,需要处理更多的状态和交互逻辑。
2024-03-18 12:16:29 337 1
原创 Compose UI 之 Buttons 按钮 & IconButtons 图标按钮
5 中类型的Button在渲染的效果上不尽相同,因此对于它们的使用描述总结如下。Button即:它是一个基础组件,通过不同的参数和子组件来创建特定的视觉效果和行为。在需要使用通用按钮,并且希望通过自定义来实现特殊外观或行为时,开发者直接使用Button。:它通常用于突出显示主要的操作或强调一个重要的交互点。它的背景色通常与品牌的主题色或强调色相一致,以便吸引用户的注意力。当用户看到一个填充按钮时,他们通常会认为这是页面上的一个主要行动点。:它是一个带有描边的按钮,但没有填充色。
2024-03-14 16:40:15 551
原创 Compose UI 之 BottomAppBar 底部应用栏
是一种比较特殊的应用栏,通常显示在屏幕的底部。它为用户提供了一个便捷的方式来访问应用的主要导航和功能。位于屏幕的底部。它适用于需要在屏幕上方显示主要内容的应用,如视频播放器、地图应用或阅读器等场景。上的项可以是图标或文本。这样允许用户快速访问应用的不同部分或执行特定操作。可与 FAB 协同工作。FAB 是一个突出的悬浮按钮,通常用于执行应用中最主要的操作,如创建新内容或开始新的任务。与ScaffoldScaffold提供了一个基本的布局结构,包括顶部应用栏、底部应用栏和内容区域。通过可以将。
2024-03-11 18:12:56 424
原创 Compose UI 之 Medium&Large TopAppBar
前面文章介绍了 Small 类型的TopAppBar。下来介绍 Medium 和 Large 类型的。
2024-03-08 15:23:27 287
原创 Compose UI 之 Small TopAppBar
AppBar 主要由2类,顶部 AppBar和底部 AppBar。顶部 AppBar 包含了 4 中类型:TopAppBar下面会逐个介绍 AppBar 的类型及给出示例。
2024-03-06 12:15:17 316
原创 Compose UI 之 Scaffold 脚手架
Scaffold脚手架组件是一个核心组件,它为开发者提供了一个标准的、可定制的应用界面框架。包含了应用界面的基础元素,如状态栏、导航栏、顶部应用栏(TopAppBar)等。通过Scaffold,开发者可以轻松地为应用添加这些常见组件,并对其进行自定义。
2024-03-01 17:23:46 356
原创 Components 概览
中文意思是可组成的/可合成,也为了与原来 xml 和 View(ViewGroup)做出区分。Compose 提供了 Material Design 的实现,后者是一个用于创建数字界面的综合设计系统。上面表格中包含了大的组件类别,其中还有具体的组件类并未列举,下图是 Compose UI 库内组件类别及相关类的结构图。下表中整理出目前 Compose 组件篇里的组件类别,在过程中根据 Compose 库的更新情况跟随着更新。后续的文章将结合上述表格和结构图中的组件类进行介绍,并给出示例及运行结果。
2024-03-01 15:28:56 113
原创 Compose 介绍
通过基于 Kotlin 的声明式UI、高效的智能重组机制、响应式编程与数据流以及布局与测量的结合,Compose 为开发者提供了更高效、更灵活的UI构建方式。与传统的视图系统不同,Compose 通过声明式的方式描述 UI,这意味着我们只需要告诉系统我们想要的 UI 状态,而不需要关心如何实现渲染和更新。每个可组合函数都可以返回一个UI元素,该元素可以是基本的绘图元素(如文本、形状等),也可以是更复杂的布局容器(如行、列、网格等)。当状态发生变化时,Compose 会自动触发重组过程,更新相关的UI组件。
2024-02-29 10:42:13 516
原创 从app bindService分析binder客户端
大家都知道的是 Binder 采用的是 C/S 架构思想,由 Client 端发起调用请求,由 Server 执行请求并返回结果(没有结果)。写 App 程序进行 IPC 调用时,需要在调用端中获取服务端的Binder接口对象,再调用方法。这篇文章尝试通过方法的核心调用过程,分析Binder客户端的流程。我们在Activity中写到的调用到的是中的方法。在调用到了,最终会调用到方法。
2023-12-14 15:47:07 299
原创 vmware_ubuntu_双向拷贝问题
在 vmware workstation 中最小化安装好 ubuntu 20.04 后,开机后发现无法将 Host 机中拷贝的内容粘贴到 ubuntu 中。实践搜索到的方案:https://blog.csdn.net/luobeihai/article/details/123885756,可以直接跳转查看。执行上述命令后,直接重启 ubuntu 系统。
2023-12-04 15:26:03 293
原创 ubuntu内移除snap
snap 是 ubuntu 的集中式管理的软件商城,但在使用过程中软件更新没有很及时。ubuntu 20.04 在安装开始就有预装了 snap,所以我想把它移除掉,省出系统空间。具体参考链接:https://cloud.tencent.com/developer/article/2168090,可以直接跳转查看步骤。
2023-12-04 15:25:04 907
原创 2. OpenHarmony源码下载
现在的 OpenHarmony 4.0 源码已经有了,在 https://gitee.com/openharmony 地址中,描述了源码获取的方式。下来先写下 windows 的获取方式,再写 ubuntu 的获取方式。获取源码前,还需要的准备工作是在 gitee 上添加 ssh 公钥来保证 PC 可以正确发起请求并下载。具体的生成 ssh 公钥方式,在 gitee 官网上按照步骤操作就可以了。
2023-11-23 15:03:19 1033
原创 App启动——Application的创建
一个 app 启动时候创建一个对象。这个对象的创建时间在 frameworks 中调用创建的,创建流程可见下图,涉及的几个主要的类调用。
2023-11-07 10:40:38 316
原创 理解android AIDL
Android 接口定义语言 (AIDL) 是一种让用户抽象出 IPC 的工具。给定一个接口(在.aidl文件中指定),各种构建系统使用aidl二进制文件来构建 C++ 或 Java 绑定,以便该接口可以跨进程使用,而不管那里的运行时或位数如何。AIDL 可以在 Android 中的任何进程之间使用:平台组件之间或应用程序之间。// 与普通java文件定义一样有包名// 可以是在其他地方定义的类型服务器进程注册一个接口并为其提供调用服务,而客户端进程则调用这些接口。
2023-10-30 13:40:45 414 1
原创 Looper分析
在 Handler 机制中,Looper的作用是提供了一个消息循环 ( message loop ) 的机制,用于处理和分发消息。Looper是一个线程局部的对象,每个线程只能有一个Looper对象。它通过一个无限循环来不断地从消息队列中取出消息,并将消息分发给对应的Handler进行处理。在使用 Handler 机制时,我们可以通过调用方法来创建一个Looper对象,并通过方法来启动消息循环。在消息循环开始后,Looper会不断地从消息队列中取出消息,然后将消息分发给对应的Handler进行处理。
2023-10-19 17:29:32 699
原创 Message&MessageQueue分析
Handler机制中对象是跨线程间通信的桥梁。Message对象是架起这座桥梁的材料。在 App 进程中,通过消息队列的方式,实现在不同的线程间传递消息,进而实现跨线程的通信。
2023-10-19 11:16:10 164
原创 Handler-ThreadLocal分析
提供了线程本地变量保存的功能。线程本地变量的修改由的set()实现,读取由的get()方法实现。实例通常会被定义成static字段,这些字段与一个线程的状态关联 ( 例如,用户ID 或 业务ID )。依据 app 启动过程,主线程下的使用进行对应的分析。
2023-10-13 18:14:51 319
原创 Java高级特性-泛型通配符
在泛型中,问号叫做通配符,它表示了未知的类型。在使用上,通配符可以用来定义参数类,字段或本地变量,有时也可以作为方法返回类型。
2023-10-10 16:15:14 212
原创 Java高级特性-泛型类型推断
Java泛型类型推导是Java 7中引入的一种新特性,指 Java 编译器根据上下文推断出泛型类型参数的类型。类型推导的目的是简化泛型编程,减少代码中的冗余。在 Java 7 之前,需要在定义泛型类型或调用泛型方法时显式指定泛型类型。使用类型推导后,可以让编译器根据上下文推断出泛型类型的实际类型,从而简化代码。
2023-10-07 21:26:19 513
原创 Java高级特性-泛型继承与子类型
在Java中,泛型继承关系是通过使用类型参数来实现的。类型参数是一种在编译时指定类型的机制,它使得我们可以在编写代码时使用一般化的类型,而不必关注具体的类型。其中 T 是类型参数,extends 关键字用于指定继承关系。
2023-09-29 07:30:10 540
原创 Java高级特性-受限类型参数
你有时可能需要限制类型参数的类型。例如,我们可能希望创建一个操作数字的类,并希望确保只有数字类型可以作为类型参数。这可以通过使用受限类型参数来实现。
2023-09-25 14:01:18 357
原创 Java高级特性-泛型方法
上面示例代码中, 是类型参数,它表示一种未知的类型。在调用方法时,可以传入任何引用类型的参数,例如 Double,String 等。T 在方法签名中的返回类型和参数类型中被使用,表示输入和输出都是同一种类型。在这个例子中, 是类型参数,表示两种未知的类型。在调用方法时,可以传入任何类型的参数。// 泛型方法// 输出数组元素。
2023-09-25 10:43:44 379
原创 Java高级特性-泛型类
其中,T1, T2, …, Tn 是类型参数,它们在实例化类的时候会被具体的类型替换。看下使用了泛型定义后的Box类。注意:类型参数T不能是原始数据类型。将原始类型传给类型参数,编译器会报错// 在代码中创建Box实例,将int类型传入,代码编译时报错。found: int1 error正确的创建使用方式。
2023-09-23 15:41:27 736
原创 mmap使用测试
Linux系统调用api说明,这个系统函数在频繁读写文件是很高效。mmap在调用进程内开辟一块内存空间,将文件(或文件部分)内容映射到调用的进程的虚拟空间中。进程通过操作这块mmap开辟的虚拟内存,就相当于直接操作文件本身了,其余的细节都由kernel,cpu中的mcu负责完成。这样与传统的I/O操作相比,不仅省去了写入I/O缓存,再有I/O写出的次数,还更加稳定可靠。这篇文章主要尝试使用mmap进行频繁写文件操作尝试。
2023-09-21 12:19:17 190
原创 VMware(Ubuntu)共享文件夹设置
第一种解决方案,使用 rc-local.service 方式,但由于在新版本中,rc-local.service 默认就关闭了,因此不选择这种方式。安装完成ubuntu虚拟机后,需要建立共享文件夹来方便在Host主机和虚拟机ubuntu之间分享文件。这样创建出来的挂载共享文件夹,在虚拟机重新启动后,会消失不见。在虚拟机中,在ubuntu终端中使用指令设置挂载路径。目录中可以看到创建的共享文件夹名。项,在右侧添加共享文件夹。后是要挂载的 本地路径。文件中,新增一条指令。指令中,可能修改的是。
2023-06-06 14:59:17 5242
原创 Android基础理解线程与进程
Android中,当一个应用程序启动并且应用程序没有组件在运行时,系统会为应用程序创建一个新额单线程的进程。默认情况下,一个应用程序的所有组件都运行在同一个进程中,以及同一个main线程。在系统中已经有应用程序正在运行时,被启动的组件会在这个应用程序的同一进程中运行。然而,组件的运行也可以被设计安排在一个不同的进程中执行,并且在任一进程中创建不同的线程。
2023-05-29 15:25:19 906
原创 non-protected broadcast场景分析及解决
在两个app之间互相送消息使用,有时在运行过程中在logcat工具中会发现大片的飘红消息。要消除这些错误信息,需要在广播的和做部分的修改。
2023-05-24 17:04:26 1447
原创 Android AIDL示例及高版本问题
按照blog解释,基于对私有数据越来越严格的控制,且在一般场景下,app不需要完全查询调用一个设备上的其他所有的应用。在Android 11(API Level 30)以上,App可查询的应用列表被看作是私有敏感数据,即要查询或调用其他app时,会受到系统限制,也就是Android上对应用的访问查询做了更加严格的限制。关于Android AIDL不论是官方文档,还是网络上的资料信息,都讲解的很完整,包括Binder机制。上述的AIDL定义,程序实现,调用均在Android 8上执行,可以成功调用。
2023-03-16 16:55:58 861
原创 neovim搭建cpp环境
在开发过程中习惯在DIE环境中使用vim作为编辑器,在单独的编辑器也常使用gvim图形化编辑器。其实在vim下,已经有编译完整的ctags可以安装使用。windows下ctags若才用自己下在开源代码,编译的方式会比较花时间,在自己尝试之后还是失败,对编译部分的知识还不够。文件中,保存后打开nvim,输入指令:PlugInstall即可安装。在安装tagbar之前需要先安装ctags,因为对ctags有依赖。在安装了ctags插件后,接着就可以i安装tagbar插件。结合在安装过程中的问题做一定的补充。
2023-02-13 15:24:11 2918
原创 3. Android逆向-基于Frida的工具Objection
在Windows上直接尝试了安装最新版本的Frida及Objection,遇到了问题,安装的坑,Objection安装版本需要配合Frida版本,不能在不指定版本的情况下直接安装Frida,因为默认会安装Frida最新版本,这样在运行objection会提示错误。在开始熟悉Frida时,接触的示例是需要frida-server在一个root过的os环境中运行,便于读取/访问所有需要的数据或其他app。一般开发时AS会完成对AAPT工具的使用。使用的frida版本不会是最新的,需要注意版本的一致。...
2022-08-28 16:46:13 6714
原创 2. Android逆向-Frida示例
由于设备要解锁bootloader需要一台专门android设备,暂且使用genymotion模拟器进行测试(保证frida-server具有root权限)。使用Frida尝试hook,做第一个示例代码。遇到这样的我问题,可以考虑使用另一个命令。代码注入到本地android项目上的。...
2022-08-28 16:42:14 1196
原创 1. Android逆向-Frida环境搭建
Frida时当下比较流程的逆向工具,其本身是开源的。在Github上可以找到项目。抱着对Android逆向的好奇,来对这个Frida工具做些了解且学习。使用的OS是 Ubuntu 20.04,软件工具:JDK 13,Android Studio,python3等。......
2022-08-28 16:40:31 1214
AdvanceRestClient加载的json文件definitions.json
2013-12-05
android4.0 actionbar API
2011-12-24
把外部ndk-android工程放入系统源码内一起编译
2011-07-03
修改系统首选项(preferences)
2011-07-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人