自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

知识应该共享,创造才应收费

尽我所能,尽我所知。

  • 博客(145)
  • 收藏
  • 关注

原创 Android Studio Gradle 莫名问题解决(元素类型 “breakBuildOnBinaryIncompatibleModifications“ 必须由匹配的结束标记)

本文主要介绍android studio在构建项目时出现的奇怪问题以及这类问题的分析和解决办法。

2024-07-25 15:05:04 176

原创 Ubantu安装电脑控制手机投屏软件screen copy

ubantu的命令安装手机投屏软件是旧版本的,可能会有一些问题,而且无法做到实时更新,比如scrcpy新版本发布了,使用上面的方法是无法更新到最新版本的,所以本文将介绍一种源码安装的方式。

2024-07-25 10:34:37 190

原创 Android Jetpack Compose 实现一个电视剧选集界面

我们经常能看到爱奇艺或者腾讯视频这类的视频APP在看电视剧的时候都会有一个选集的功能。如下图所示这个功能其实很简单,就是绘制一些方块,在上面绘制上数字,还有标签啥的。当用户点击对应的数字式时可以切换到对应的剧集。如果剧集太多,屏幕展示不完,就可以滑动屏幕查看更多的剧集,就这么一个很简单的UI小组件。我们使用Compose来实现下。本文主要介绍的是一个剧集选集的功能,这里只是介绍了实现的方式,比较粗糙,读者可以按照自己的需求修改,有更好的实现方案也可以在评论区交流。

2024-06-11 18:46:40 609

原创 Android gradle kts 8.0以上版本配置签名和修改APK输出名字

之前写过一篇文章是通过Kotlin的Dsl结合gradle编写的插件来管理项目依赖,我是从一个开源项目叫DanDanPlayAndroid项目上学到的,那时还没有使用toml文件来管理项目依赖的技术。不过虽然现在有了toml文件管理依赖的技术,但我觉得使用插件的方式也很好,读者自己选择吧。这里提这个插件的原因就是在插件中涉及到修改输出的APK名字和签名配置的问题,在最新的gradle kts 版本中,这些配置有点小变化,所以在此处记录下。

2024-06-05 20:42:41 1223 1

原创 过去的六年,教会了我很多事

然后就开始面试阿里,面了五面,都通过了,我以为百分百能进阿里了,我花名都想好了,然后提了离职。当我觉得自己无所不能的时候,紧接着就收到了报应,领取了人生中的第一次失恋体验卡,我那时觉得世界崩塌了,因为我拼命赚钱,努力变得更好,都是想让那个自己喜欢的人为我而感到骄傲,我甚至都忘了,那含辛茹苦养育我长大的父母。

2024-05-29 13:17:26 727 1

原创 基于Ubuntu的Bash脚本实现SystemUI的编译真机验证

当开发SystemUI的时候,开发完一个需求后需要到真机上验证,虽然SystemUI模块开发最后的产物也是APK,但是这个APK 却不能单独安装查看效果,因为SystemUI是系统级别的应用,需要放置到系统指定的目录下。然后再通过top命令找出SystemUI的进程,使用kill命令杀一次进程让其重启,这样我们的修改才能生效。这个过程比较的繁琐,如果每次修改都需要操作这么多的步骤,那么效率就很低了,所以本文介绍使用bash脚本的方式,将这一系列的操作通过bash脚本描述出来,我们下次修改完SystemUI代

2024-05-27 13:22:25 415

原创 使用Java 将字节数组转成16进制的形式

在很多场景下,需要进行分析字节数据,但是我们存起来的字节数据一般都是二进制的,这时候就需要我们将其转成16进制的方式方便分析。比如在做音视频的时候,需要看下我们传输的视频h264数据中是否有对应的I帧或者B帧等数据,做ASM插桩的时候,可以使用输出类结构的16进制辅助分析了解问题。测试投屏的时候尤其有用,比如说投屏到电视上后,发现没有画面,或者是画面很卡顿,这时候就需要对我们传输的视频数据做分析,所以我们将视频的数据转成16进制的形式,并且以一定的格式输出,可以很方便的帮助我们定位问题。

2024-05-26 19:14:38 623

原创 设计模式之创建型模式---原型模式(ProtoType)

在有些系统中,往往会存在大量相同或者是相似的对象,比如一个围棋或者象棋程序中的旗子,这些旗子外形都差不多。使用原始创建对象的方法会很耗时,而原型设计模式会让对象的生成高效很多,本文将介绍原型设计模式

2024-05-22 13:39:57 972

原创 Android AOSP Ubuntu源码编译电脑卡顿问题定位解决

开发SystemUI时,使用内存为16G的主机,Ubuntu 20.04的系统编译SystemUI的源码,编译的过程中发现电脑卡顿,鼠标不能移动。必须重启电脑才可以使用,如果继续编译代码,还是会出现卡顿的问题,严重影响开发效率。最后通过设置交换分区解决了这个问题。本文介绍的就是如何发现及解决这个问题。

2024-05-11 21:08:33 1102

原创 使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

我们都知道Android的系统源码量非常之大,大致有frameworka层源码,硬件层(HAL)源码,内核层(Kernel)源码,之前了解到大佬看源码都是使用Source Insight,所以我也去学着使用Source Insight 看android的源码,但是作为一个六年的android应用开发来说,Android Studio的使用已经深入骨髓,再去联系使用Source Insight非常不适应。那能不能使用Android Studio去看源码呢?

2024-05-02 18:26:00 1324 1

原创 Android AOSP探索之Ubantu下Toolbox的安装

由于最近需要进军android的framework,所以需要工具的支持,所以在此记录下从同事那里学来的ubantu 系统下Toolbox的安装,分享给准备研习android的小伙伴们

2024-05-01 21:47:59 1012 4

原创 ASM字节码操作库---入门环境搭建

ASM可以对字节码数据做修改,然后生成一份新的字节码文件,而且ASM还可以在什么都没有的情况下,直接生成一个.class文件。本文的demo就是演示这个场景,除此之外,ASM还能做分析操作,分析操作是指它可以对一份字节码做分析统计的操作,但是不生成新的字节码文件,也就是说它只是单纯分析,不做任何修改。本文使用JAVA语言作为ASM的演示demo。

2024-04-27 11:19:33 797 2

原创 Flutter开发之--初识Flutter

Flutter 是由Google公司研发的一种跨端开发技术,在2018年正式推出。Flutter自带Skia图形绘制引擎,采用自绘制的方式,不管是在Android还是IOS上,Flutter都统一使用Skia引擎进行绘制,因此两端的渲染过程完全一致,能够实现像素级别的双端一致性。在执行效率方面,众所周知,不管是哪个跨端框架,执行效率通常都是低于原生的。但是Flutter的执行效率接近原生。

2024-04-22 17:40:13 1245 1

原创 设计模式之创建型模式---工厂模式

工厂模式从名字就能看出,这种模式是用于创建对象的,因为现实生活中,工厂就是用于生产产品的嘛。所以工厂模式的名字起得非常的贴近生活。工厂模式根据应用场景的不同,分为简单工厂,工厂方法,和抽象工厂三种。现实生活中的工厂有的可以生产几种产品,客户根据工厂提供的产品定制就行。比如生产A,B两种品牌的车。这种情况对应到工厂设计模式中就是简单工厂模式。用户只需要给工厂说我要A或者B品牌的车就行。

2024-04-19 11:57:18 926

原创 Android JetPack Compose+Room----实现搜索记录功能

搜索功能是很多APP都会重点维护的功能,因为搜索功能可以很好的帮助用户找到自己需要的内容,与此同时,为了增强用户体验,引入了搜索记录的功能,本文就是介绍一个基于Compose+Room搜索记录功的实现

2024-04-16 22:09:59 1296

原创 设计模式之创建型模式---建造者模式

建造者模式是一种广泛使用的设计模式,在三方开源库和各种SDK中经常见到。建造者设计模式在四人帮的经典著作《设计模式:可复用面向对象软件基础》中被提及,它的定义为,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式目前主要有两种,一种是经典的建造者模式,另外一种是变种的建造者模式。本文就是介绍建造者模式的两种形态的Java实现。

2024-04-09 21:15:54 1250

原创 Android自定义View 实现一个带音效和震动的SeekBar

SeekBar的出现是为了方便用户设置值,用户通过滑动然后就可以设置值,系统提供了一个SeekBar,但是不太美观用户体验也不好,所以本文介绍了设计一个带音效和震动效果的SeekBar,增强用户体验

2024-03-23 18:23:51 692 1

原创 使用Android Native Hook技术解决VLC播放器闪退的问题

在做公司的一个TOB的需求时,发现调起Unity提供的3D播放器播放网络在线视频时闪退了,然后就拉着相关部门的人一起分析问题,最后定位到是VLC里面用到的系统日志打印函数在部分的系统上会出问题,于是各部门的同事就开始想各种解决方案,当时主要是两个部门的同事提出了两种解决方案,一方面是系统部门的人提出直接在系统上改,因为ROM是我们自己的所以可以改系统的代码。禁用掉日志打印函数中引发闪退的部分,但是这样就会导致其他APP使用这个日志打印函数时就无法获取到日志了。但也不失为一个解决办法。

2024-03-04 20:35:33 1211 2

原创 Android AOSP源码研究之万事开头难----经验教训记录

做了四五年的android应用层开发后,想研究下底层源码的实现,所以想下载源码研究下,但是万事开头难,源码下载的过程非常坎坷,我使用的是双系统(ubantu 和windows),主机的固态只有1TB,而android的源码下载完一个版本也有几百个G。所以我想到了使用移动硬盘来保存下载的Android源码。也就是这个决定,让我折腾了两个多月。所以本文主要介绍整个下载源码编译到刷机的教训。

2024-02-08 00:47:52 1390

原创 Android Jetpack Compose 沉浸式状态栏的实现

说到沉浸式状态栏,很多小伙伴可能不太熟悉,其实让Android的状态栏的颜色和APP的主题颜色相同,给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服,实现沉浸式状态栏也很简单,首先就是配置主题,然后设置状态栏的颜色,之前的博客中实现沉浸式状态栏是通过将状态栏的颜色设置成页面背景的颜色,这样状态栏就和背景融为一体了,但是这种办法在每个页面都需要设置一遍,非常废了,最好的 方式就是将状态栏设置成透明的颜色,然后将我们的页面"顶"到屏幕的顶部,而不是位于状态栏下面。

2024-02-05 13:18:26 2487 11

原创 Android Jetpack Compose之底部导航栏的实现

写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架Scaffold,利用它我们可以很快的实现一个现代APP的主流界面架构,即一个带顶部导航栏和底部导航栏的界面架构,我们基于这个架构可以快速的搭建出我们想要的页面效果。而今天的文章就是要介绍如何实现一个有特点的底部导航栏。

2024-02-01 14:58:18 2717

原创 使用Android Compose实现网格列表滑到底部的提示信息展示

目前大多数的APP都会使用列表的方式来呈现内容,例如淘宝,京东,腾讯体育的评论区等都会使用列表布局。在Android传统的View中主要是使用RecyclerView控件来实现大量数据的展示。而在Compose中使用的是LazyColumn或者是LazyGrid组件。这些组件的使用都很简单,网上有很多的例子,不是本文的重点,本文的重点是介绍实现当我们需要展示的数据展示完了后,即列表滑动到最底部的时候,我们需要展示给用户一个提示信息:比如:”已经到底“。

2024-01-09 14:09:45 1386

原创 Git命令之本地分支与远程分支支关联/解除关联

在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,但是有时候会出现运行命令后报错:Your configuration specifies to merge with the ref 'refs/heads/xxx'from the remote, but no such ref was fetched.

2023-12-14 17:20:29 1680

原创 Jetpack Startup 优雅完成库的初始化和方法接口简化

Startup允许库的开发者和App的开发者共享一个ContentProvider,用于完成各自的初始化逻辑,并且支持设置组件之间的初始化顺序。因此可以做到无需用户调用初始化方法就能获取到安卓上下文

2023-12-13 20:19:53 946

原创 C/C++跨平台构建工具CMake-----灵活添加库并实现开发和生产环境的分离

在本文中,我们将会学习如何使用Cmake工具创建一个项目,然后介绍如何在项目中添加和使用库以及如何将我们的库设置成可以动态切换的。这里可动态切换的意思是,使用命令切换,便于调试项目

2023-10-29 12:01:22 749 1

原创 C/C++宏定义和宏函数

作为Android的开发者,熟悉jni和C++是必须的,最近看到jni的代码中有很多的宏相关的知识点,去学习了解了下整理了本文,本文会介绍宏的定义,包括宏替换和宏函数,以及一些特殊的宏和命令符号

2023-10-27 13:25:16 572

原创 Android Jetpack Compose之生命周期与副作用

借助于Kotlin的DSL语言特性,Compose可以很形象地描述UI的视图结构,视图结构对应的是一棵视图树的数据结构,这棵树在Compose中称为Composition,Composition会在Composable初次执行时被创建,当在Composable中访问State时,Compose记录其引用,当State变化时,Composition触发对应的Composable进行重组,更新视图树中的节点,然后达到刷新UI的目的。

2023-10-11 13:22:41 776

原创 C++指针的使用

C/C++的指针使用非常的广泛,也是一大难点,本文将介绍指针的使用,因为害怕每次看了又忘记,所以记录下。因为现在AR的兴起,C++也越来越火,因为OpenGL渲染基本都是用的C++,所以值得好好学习。

2023-10-01 20:51:45 695

原创 Android 使用Kotlin封装RecyclerView

在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装,个人觉得非常方便,所以就将这个封装摘了出来,记录下,方便以后使用,这个开源的项目叫[DanDanPlayForAndroid](https://github.com/xyoye/DanDanPlayForAndroid)点击链接可以查看具体的开源项目代码。

2023-09-30 22:58:48 1624

原创 C/C++跨平台构建工具CMake-----在C++源码中读取CMakeLists.txt配置文件中的内容

本文介绍如何在C++代码中访问CMakeLists.txt文件中配置的值,比如我们的程序中想要区分debug环境和release环境的时候就可以在CMakeList中添加配置,就像Android 的gradle 插件生成的BuildCongfig类一样,我们可以方便的用这个类的DEBUG和RELEASE来区分开发环境和正式环境

2023-09-30 18:30:15 1475

原创 C/C++跨平台构建工具CMake入门

本文主要是介绍在windows上搭建CMake的构建环境并基于MinGW编译工具编译跑通一个C++程序,并且提供给读者学习CMake的方法。并鼓励读者那能够使用博客的方式将自己的理解记录下来,否则过一段时间就忘了,本文的最重要的目的也是防止自己忘掉。故记录一下。

2023-09-29 23:05:57 613

原创 Android Jetpack Compose之确定重组范围并优化重组

Composable函数在进行重组时会尽可能的跳过不必要的重组,只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢?或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生,那么对UI的性能会是一个很不稳定的状态,时而好,时而坏。而且如果编写的UI代码有问题,那么重组将会带来状态的混乱,导致UI显示出错。所以弄清楚Compose重组的范围确定才能更好的避免重组的坑,并且可以针对具体的范围做优化,所以本文将介绍如何确定Compose重组及性能的优化

2023-09-26 13:23:55 431

原创 Android Jetpack Compose之UI的重组和自动刷新

在传统的View中,若要改变UI,需要我们修改View的私有属性,比如要修改一个TextView的文字,我们需要通过它的setText(“xxx”)方法去修改。而Compose 则是通过重组来刷新UI。在之前的状态管理的文章中也提到过重组的概念。本章主要就是介绍Compose的重组和刷新相关的内容。

2023-09-20 13:14:17 427

原创 Kotlin使用infix关键字构建高可读性代码

相比于Java语言,kotlin集各家所长,可以使用更少的代码,实现更复杂的需求,还能保持高可读性,infix 函数就是Kotlin提供了一种高级语法糖特性。可以增加代码的可读性

2023-09-17 10:58:15 137

原创 Android Jetpack Compose 使用 ViewModel

所以,在复杂的业务逻辑下,我们可以将Stateful的状态提到ViewModel中管理,这样Stateful Composable也就变成了一个Stateless Composable,通过参数传入不同的ViewModel即可替换具体的业务逻辑,大大增加了可复用性和可测试性

2023-09-13 13:22:32 1485 2

原创 Android Jetpack Compose之状态持久化与恢复

我们都知道remember可以缓存创建状态,避免因为重组而丢失。使用remember缓存的状态虽然可以跨越重组,但是不能跨Activity或者跨进程。比如横竖屏切换等ConfigiurationChanged事件发生时,假设没有重写对应的onConfigurationChanged函数,Activity就会被销毁重建,导致remember保存的状态丢失。为了解决这个问题,Compose提供了rememberSavable解决这个问题

2023-09-11 13:41:54 583

原创 Android Jetpack Compose 用计数器demo理解Compose UI 更新的关键-------状态管理(State)

假如我们把Composable的执行看成是一个函数的运算的话,那么状态就是函数的参数,输出就是生成的布局。由于唯一的参数决定唯一的输出,所以只有当函数的参数发生了变化,生成的布局才会相应的跟着变化。

2023-09-06 15:00:09 1380 1

原创 Android使用Gradle kotlin dsl 优雅配置构建项目

Gradle的出现可以说是为Android的项目构建插上了翅膀,让Android的apk打包构建更简单高效。但是Gradle是使用Groovy语言开发的,虽然说是和JAVA语言差不多,语法啥的差异也不大,但是终究他们两个还是不同的语言,开发者要想做Android打包的配置,还需要去了解Groovy语言,这无疑增加了开发者的负担。而使用Kotlin gradle dsl可以有效的解决这一痛点,只使用kotlin一种语言就可以完成Android的编写、构建、,本文将介绍基于Kotlin DSLgradle的使用

2023-08-14 08:52:03 4036 15

原创 解决Git拉取代码仓库时显示文件名太长无法创建的问题解决

拉取鸿蒙仓库应用示例代码时,发现能下载成功,但是会报一个错误,文件太长,无法创建,这时候运行git status 会发现很多修改的文件,看着不舒服,本文就是为了解决这个问题

2023-07-22 23:23:59 835

原创 解決JetpackCompose 编译通过但是运行报错的问题

解决Compose UI 运行报错的问题,编译啥的都能通过,也能安装成功,但是就是运行无法成功,启动就闪退。

2023-07-22 17:35:14 227

SystemUI编译验证脚本

使用此脚本,可以在编写完SystemUI的需求后,连接真机,将脚本放到AOSP源码的根目录下,运行脚本,可以支持快编和全编。运行完脚本后,编译后的结果会自动推到手机并重启相关的进程,只需要运行脚本,就能在机器上看到自己修改后的SystemUI需求

2024-05-27

opengl-glm.zip

GLM是OpenGL Mathematics数学库,,它是一个只有头文件的C++库,兼容Windows,MacOS和Linux,它可提供与图形概念相关的类和基本数学函数,例如矢量,矩阵和四元数,它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视矩阵和视角矩阵

2023-05-02

glew-2.2.0.zip

GLEW(OpenGL extension wrangler),即OpenGL扩展牛仔,OpenGL是围绕一组基本功能和扩展机制进行组织的,随着技术的发展,扩展机制可以用来支持新的功能,所以GLEW 就是用来干这个活的,这个库适应的人群是OpenGL的研究者,对OpenGL感兴趣的入门者都可以。主要也是和OpenGL一起搭配使用

2023-05-02

SOIL2-1.3.0.zip

OpenGL 纹理图像加载库,使用人群:OpenGl 开发者

2023-05-02

premake-5.0.0-beta2.zip

安装SOIL2的工具,使用于想要集成SOIL2库的开发人员

2023-05-02

glfw-3.3.8.bin.WIN64.zip

用于在Windows,MacOs,Linux以及其他操作系统上负责将帧缓冲区中的内容绘制到屏幕中的窗口中的API,适用于在Windows电脑上做OpenGL开发的人群,包括学生,程序员以及对OpenGL 感兴趣的小伙伴

2023-05-02

sqliteSpy工具windows版本

查看Android上的sqlite生成的数据库文件

2022-10-15

Kotlin Base64编解码类

Kotlin Base64编解码类,可以对AES/DES的加密密文作编码和解码,防止出现加解密出错的问题。 encrypt before size: 16 encrypt after size: 24 使用DES作加密解密时,咱们会发现加密后的密码变长了,这样会直接导致加解密失败,而且会有乱码的情况。这时就需要Base64编码和解码,然后就可以使用了。 Base64 Des 加密= v�W�� �ZDž��.���Ou��� Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher at java.base/com.sun.crypto.provider.CipherCore.prepareInputBuffer(CipherCore.java:1007) at java.base/com.sun.crypto.provider.CipherCor

2022-10-01

空空如也

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

TA关注的人

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