Hi 欢迎光临

这里记录着一些思想🤔️ … …

配置gradle默认使用阿里云Maven

网上看到不少在init.gradle中的allprojects配置全局maven的代码。 但是在新版AndroidStudio的gradle.kts模板中(或高版本gradle),想要不修改直接使用是不行的,会抛出如下错误。 ...

十二月 17, 2023 · 1 分钟

小米设备互联NFC标签协议解析

致谢 首先感谢酷安各位小米设备拥有者的NFC数据的无私分享,目前设备互联的NFC协议已经基本解析完毕。 酷安名:@星逝之殇、@云鹤霄、@潮風漢韵、@ChsBuffer、@醋友29999999、@橙米、@Cp0204。 本文初期只解析了一碰妙享的NFC数据,目前已经可以涵盖一碰妙享(屏幕镜像,文件快传),小米音箱妙播,小米蓝牙音箱的协议。 从代码来看,以下解析内容已经基本覆盖了多数可能的NFC数据类型,如有错误和更新欢迎指出。 本文重写并更新了之前的内容,修复了一些错误的描述,将协议和样例分开便于各位查看。 ...

十二月 8, 2023 · 16 分钟

小米HyperOS系统判断

通过ADB查看build.prop可以得到: adb shell "getprop | grep mi.os" [ro.mi.os.version.code]: [1] [ro.mi.os.version.incremental]: [OS1.0.23.11.19.DEV] [ro.mi.os.version.name]: [OS1.0] 所以与判断MIUI系统的方法类似,更换了几个build.prop中的字段。 private const val KEY_MI_OS_VERSION_CODE = "ro.mi.os.version.code" private const val KEY_MI_OS_VERSION_NAME = "ro.mi.os.version.name" private const val KEY_MI_OS_VERSION_INCREMENTAL = "ro.mi.os.version.incremental" @SuppressLint("PrivateApi") fun isXiaomiHyperOS(): Boolean = runCatching { val cls = Class.forName("android.os.SystemProperties") val getProperty: (String) -> String? = { cls.getMethod("get", String::class.java)(null, it) as? String } !(getProperty(KEY_MI_OS_VERSION_CODE).isNullOrBlank() || getProperty(KEY_MI_OS_VERSION_NAME).isNullOrBlank() || getProperty(KEY_MI_OS_VERSION_INCREMENTAL).isNullOrBlank()) }.getOrDefault(false)

十一月 28, 2023 · 1 分钟

使用AdBlock屏蔽Bilibili广告

AdBlock下载: Chrome Edge Firefox AdBlock 规则: www.bilibili.com##.video-page-special-card-small www.bilibili.com##.adblock-tips www.bilibili.com##.bili-video-card:has(.bili-video-card__info--creative-ad) www.bilibili.com##.floor-single-card www.bilibili.com##.bili-video-card:has(.bili-video-card__info--ad) www.bilibili.com##.reply-notice www.bilibili.com##.ad-report www.bilibili.com##.pop-live-small-mode www.bilibili.com##.feed-card:has(.bili-video-card__info--creative-ad) www.bilibili.com##.feed-card:has(.bili-video-card__info--ad) bilibili.com##.vip-wrap bilibili.com##.vip-entry-containter bilibili.com#?#.v-popover-wrap:has(span:-abp-contains(会员购)) bilibili.com#?#.v-popover-wrap:has(span:-abp-contains(游戏中心)) bilibili.com#?#.v-popover-wrap:has(span:-abp-contains(漫画))

十月 31, 2023 · 1 分钟

一种老旧安卓电视通用Root与优化方案-以创维G7200_8H87为例

前言 众所周知,国内智能电视的各种广告和安装限制一直是令人头疼的问题。 或许对于新出的智能电视还可以接受,但是在一些老旧的智能电视上已经会导致严重的卡顿问题。 ...

九月 20, 2023 · 16 分钟

在Android Studio中配置Kotlin Symbol Processing (KSP)

简介 Kotlin Symbol Processing (KSP) 是Google提供的基于Kotlin编译器提供的符号处理工具,相比KAPT有更快的速度。 简单使用方法 此处以Jetpack AndroidX Room的KSP为例,在app的build.gradle.kts中添加以下代码 ...

二月 9, 2022 · 3 分钟

关于NAU课程表相关的事情以及未来的规划

现在回头看看,从2018年2月开始,NAU课程表已经更新了3年了。依稀记得大一寒假的我写下第一行代码时的想法:做一个简单干净的课程表APP。 目前可以看到的最早的一条代码提交记录是2018年2月27日,但是这个想法1月份左右就有了,之后就通过自学验证了一些当时对我来说的技术难点,证实这个APP是可以被我实现的。接着又花了2周时间,第一个版本就这么面世了。 ...

二月 17, 2021 · 5 分钟

解决Android Flow无法收到更新的数据的问题

使用场景 最近在做项目的时候遇到了一个需求。从DataStore获取最新的ID,并根据ID到Room数据库内获取相应的内容。由于DataStore和Room都可以通过Flow获取到最新的数据更新,因此我设想是否能通过数据驱动界面的方式,抛开以往的通知界面更新方法,直接对数据源的变动进行监听并设置界面。 需要实现以上的需求就需要对DataStore的ID进行监听的同时,还要对Room数据库内相应ID的数据进行同步监听,保证两个数据源的数据的变化都可以监听到。 ...

十二月 18, 2020 · 5 分钟

Jetpack Preferences DataStore 入门

1. 简介 DataStore是Google Android Jetpack组件新推出的数据存储解决方案,其主要优点如下: 允许使用Protocol-Buffers存储键值对或类型化对象 使用Kotlin协程和Flow来异步、一致和事务性地存储数据 DataStore并不被建议用来存储大量复杂的数据,并且无法局部的更新数据,如果有类似的需求可以使用Room组件替代。 ...

十二月 9, 2020 · 8 分钟

使用ApkSigner与zipAlign进行APK签名与优化

安卓7.0开始,谷歌提供了apksigner用以进行apk的V1与V2签名,尽管多数时候只需要在AS里勾选即可签名,但是在使用自动化构建集成时就需要手动签名。 ...

十一月 8, 2019 · 1 分钟