使用Compose Desktop开发一款适用于安卓开发的桌面工具
前言由于政策的改动,现在的App必须要经过备案才能上架应用商店,备案需要获取签名的md5和modules,刚开始都是在使用jadx这款工具来获取,后来在使用中发现,他会先把apk解析出来,当我点击Apk signature时才开始签名的校验,步骤过于繁琐,并且解析apk还需要时间。后来就想着能不能自己做一款桌面端工具出来,将我想要的功能都集成进去呢。
说干就干,由于本人是Android开发,寻找解决方案时发现了compose-multiplatform,由于工作繁忙,没有学习过compose,但是对compose又非常感兴趣,就想着借着这次机会好好的学一学,于是,AndroidToolKit就诞生了。
功能一览AndroidToolKit是支持windows和mac的,并且支持深色和浅色模式,下面的截图都是在浅色模式下。
签名信息该工具的主功能,也是本人最常用的功能之一。
上传APK文件后使用ApkVerifier进行签名校验,并拿到X509Certificate,从中获取到modules、md5、sha-1、sha-256等信息。
当然,图中可以看到是支持上传签名文件的,使用Key ...
ApkVerifier的使用
本文介绍如何使用ApkVerifier获取APK的签名信息。引入1implementation("com.android.tools.build:apksig:8.2.2")
使用123val verifier: ApkVerifier = ApkVerifier.Builder(inputFile).build()val result = verifier.verify()val isSuccess = result.isVerified
inputFile为输入Apk的文件路径,构造一个新的Builder来验证提供的 APK 文件,该验证器旨在密切模仿 Android 平台的行为。这是为了使验证器能够用于检查 APK 的签名是否需要在 Android 上进行验证。
使用verifier.verify()获取结果。如果结果的ApkVerifier.Result.isVerified()返回true ,则可以认为 APK 已验证。验证结果还包括错误、警告以及有关签名者的信息(例如签名证书)
通过ApkVerifier.Result.errors获取错误信息。
1 ...
深入理解Android中的自定义属性
本文出处:http://blog.csdn.net/lmj623565791/article/details/45022631本文出自:【张鸿洋的博客】
引言对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现:
自定义一个CustomView(extends View)类
编写values/attrs.xml,在其中编写styleable和item等标签元素
在布局文件中CustomView使用自定义的属性(注意namespace)
在CustomView的构造方法中通过TypedArray获取
ps:如果你对上述几个步骤不熟悉,建议先熟悉下,再继续~
那么,我有几个问题:
以上步骤是如何奏效的?
styleable 的含义是什么?可以不写嘛?我自定义属性,我声明属性就好了,为什么一定要写个styleable呢?
如果系统中已经有了语义比较明确的属性,我可以直接使用嘛?
构造方法中的有个参数叫做AttributeSet(eg: MyTextView(Context context, AttributeSet attrs) )这个参数看名字就知道包含的是参数的数组, ...
自定义View的流程
文章很长,主要从两方面说起:
1,安卓View的绘制流程(比较简单,想要深入的可以去看源码)
2,安卓自定义View的绘制步骤
自定义View是一个老生常谈的问题,对于一个Android开发者来说是必须掌握的知识点,也是Android开发进阶的必经之路。
要想安卓理解自定义View的流程,首先我们要了解View的绘制流程。分析之前,我们先来看底下面这张图:
View的绘制流程
DecorView是一个应用窗口的根容器,它本质上是一个FrameLayout。DecorView有唯一一个子View,它是一个垂直LinearLayout,包含两个子元素,一个是TitleView(ActionBar的容器),另一个是ContentView(窗口内容的容器)。关于ContentView,它是一个FrameLayout(android.R.id.content),我们平常用的setContentView就是设置它的子View。上图还表达了每个Activity都与一个Window(具体来说是PhoneWindow)相关联,用户界面则由Window所承载。
ViewRoot在介绍View的绘制前, ...
Android CameraX CameraController
CameraX currently provides CameraView, a View that displays a preview of the camera, while also providing methods to take pictures, control the camera, and query camera information. CameraView clearly takes on more responsibilities than a View should, as it participates in the View hierarchy and displays content, while also owning camera resources that exist outside the scope and lifecycle of the View hierarchy.
CameraView violates the separation of concerns principle, making it harder to guaran ...
HomeBrew 常用指令
信息查询1234567891011121314151617181920212223# 查看 Homebrew 版本brew -v# 列出已安装的软件brew list# 使用浏览器打开 Homebrew 官网brew home# 查看包的详细信息brew info 包名# 检测系统中与Homebrew有关的潜在问题brew doctor# 查看包的所有版本brew list --versions | grep 包名# 查看已安装软件版本号brew list --versions# 以树形展示所有已安装包的依赖brew deps --installed --tree
查找软件包12brew search gitbrew search /^git$/
安装软件包12345678# 默认安装最新版brew install 包名# 安装指定版本brew install node@14.16.8# 切换版本brew switch node 16.0.0
卸载软件包1brew uninstall 包名
自身更新1brew update
更新包12345678# 查看哪些包有新版本可更新b ...
Android CameraX中使用Camera2
前言CameraX 基于 Camera2 构建而成,并且 CameraX 提供了在 Camera2 实现中读取甚至写入属性的方式。如需了解完整详情,请参阅互操作性软件包。
那么该如何使用呢
注意:在 CameraX 中,设置底层 Camera2 属性会被标记为“实验性”,因为 Google 希望开发者能了解其使用情况。您设置的值会替换 CameraX 所设置的任何值。我们建议您仅在绝对必要时执行此操作,也建议在您这一端进行其他测试。
Camera2CameraInfo使用 Camera2CameraInfo 读取底层 CameraCharacteristics
12345val c2ci = Camera2CameraInfo.from(cameraInfo)c2ci.apply { // 获取设备支持的硬件级别 val level = getCameraCharacteristic(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) ?: INFO_SUPPORTED_HARDWARE_LEVEL_LIMIT ...
Android CameraX的基本使用
前言虽然网上有很多CameraX的教程,但是每次用CameraX的时候总要在翻一翻官方的文档或者网上的教程之类的,这次就自己记一下吧,翻自己的总比翻别人的好吧🤪
声明依赖项要添加 CameraX 的依赖项,您必须将 Google Maven 代码库添加到项目中。
打开项目的 settings.gradle 文件并添加 google() 代码库,如下所示:
GroovyKotlin1234567dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() }}1234567dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositorie ...
使用 sourceSets 管理风味特定的 AndroidManifest.xml
当使用 sourceSets 管理风味特定的 AndroidManifest.xml 配置时,下面是一个基本的代码示例
项目结构1234567891011121314app/|-- src/| |-- main/| | |-- AndroidManifest.xml (包含公用配置)| | |-- java/| | |-- res/| || |-- xiaomi/| | |-- AndroidManifest.xml (风味特定配置)| || |-- other/| | |-- AndroidManifest.xml (风味特定配置)| || |-- ...
app/build.gradle123456789101112131415android { // ... 其他配置 ... sourceSets { xiaomi { // 指定风味特定的 AndroidManifest.xml 文件 manifest ...
【自定义 View】相机预览点击聚焦框(带对焦动画,曝光调整)
时隔十个月,今天再次来分享项目中使用到的自定义View,话不多说,直接开始,主要在相机预览的时候点击预览界面对焦时使用,并增加了对焦动画,可调节曝光。可以设置曝光的上限和下限,用于调整曝光时回调,点击后无操作5秒后隐藏。总的来说就是这些,下面开始上代码
对焦框123456789101112131415161718192021222324252627override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, heightMeasureSpec) val width = MeasureSpec.getSize(widthMeasureSpec) val height = MeasureSpec.getSize(heightMeasureSpec) frameRadius = width / 5f frameRectF.left = (width / 2f) - frameRad ...