- 博客(381)
- 资源 (10)
- 收藏
- 关注
原创 GitLab Runner配置并行执行多个任务
打开 Runner 的配置文件(通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml)。如果发现 limit 被设置为 1,可以重新注册 Runner 或修改 config.toml 删除该限制。如果使用 docker executor,可以调整 concurrent 并确保 Docker 有足够资源。如果使用 shell executor,确保 Runner 所在机器的 CPU 和内存足够支持多个任务。
2025-04-23 11:03:48
339
原创 android Could not isolate value org.jetbrains.kotlin.gradle.plugin.statistics.BuildF
最近在死磕 Gitlab CI/CD,遇到的问题实在是多,还好现在都有各种 AI 了,不然真是难顶。
2025-04-15 17:35:17
360
原创 android 何如查找内网设备 IP
因为设备是采购的,也无法修改设备固件。所以最后只能通过 WiFi 路由器扫描局域网设备,对扫描到的 ip 发送抓包获取到的接口,如果有数据就保存起来。如果需要端口的接口,则需要通过抓包的方式,先把设备的相关接口抓取,这个时候就能知道不同接口对应的端口号了。不过依赖别人的固件不是个靠谱的事,设备更新固件接口后,我等也无能为力了。
2025-03-28 13:47:48
537
原创 Android持续集成之自动化上传库到maven私服
随着模块化集成度越来越高,公司的 App 产品越来越多,为了避免不断的复制粘贴代码,有必要将一些功能模块集成起来,直接引入到需要的模块中,减少代码的维护成本。我们可以通过在 GitLab CI 中,使用 CI/CD 任务,在创建 tag 版本时自动上传 Android Library 到 Maven 私有仓库。
2025-03-19 10:51:14
826
原创 Android之Sentry接入
在Android应用中接入Sentry可以帮助你捕获和监控应用中的错误和异常。Sentry 是一个开源的错误跟踪工具,支持多种平台,包括 Android。特别是能够私有化部署。
2025-03-14 10:05:03
518
原创 Compose 之 State
当您的状态或键的变化超出您想要更新 UI 的范围时,应使用。有点类似于 flow 的 distinctUntilChanged 功能,只是这个转换后是个 State。总而言之,请记住,当您的状态或键的变化超出您想要更新 UI 的范围时,请使用派生状态。如果输入量与输出量没有差异,则不需要使用它。
2025-01-15 10:32:52
221
原创 android 开发中的 SPI模式
在设计 SPI 架构时,确保接口足够抽象和通用,能够适应未来的扩展。接口应该包含基本的功能声明,但避免过于复杂或具体的实现细节。SPI 架构可以为 Android 应用带来良好的插件化和可扩展性,尤其适用于模块化的开发。通过定义接口、提供不同的实现类,并使用服务发现机制,可以实现灵活的服务切换和扩展。使用 SPI 时要关注接口设计、服务发现机制、性能和内存管理等方面,以确保系统的高效和稳定。
2025-01-03 11:56:24
995
原创 如何分析 System Trace 数据
通过 System Trace,你可以获得以下关键的性能数据:CPU 使用情况线程的执行与调度状态每一帧的渲染时间I/O 操作的耗时内存管理(GC)的效率通过分析这些数据,你可以定位性能瓶颈,找出高 CPU 消耗、UI 卡顿、线程阻塞等问题,并基于数据提出优化方案。
2024-12-24 15:19:20
1173
原创 android 混淆
很久没用过混淆功能了,因为之前的包都使用第三方加固了,而且项目开发好几年了,突然要混淆也很麻烦。换了家公司后,感觉还是得混淆代码才行,不然直接暴露源码也太不行了。
2024-12-18 14:52:12
653
原创 android 适应CA证书
要使 Android 应用适应和信任自签名 CA 证书,尤其是在开发、测试或内部网络中,有几种常见的方式可以配置应用使其信任自定义 CA 证书。通常这涉及到为应用定义网络安全配置或调整系统设置。
2024-11-10 21:39:06
2053
原创 OkHttp Interceptor日志上报
网络的埋点切入口,很容易就想到了 Interceptor,用起来了才觉得 Interceptor 是真的香,以前还只是觉得这个设计模式是真好。用到了才感觉是太香了。网络请求上报是带上了URL,现在的Retrofit 的URL 在其他地方是真的不好拿,这 Interceptor 确实方便的很。
2024-09-10 15:56:15
696
原创 android studio 同时支持http和https
这个问题是由于 Gradle 无法下载某些依赖项文件,这可能是因为服务器与客户端之间的 TLS 协议不兼容。问题出在 Android Studio 构建时尝试通过 HTTPS 下载某些文件,但由于协议版本问题(例如,服务器不支持 TLS 1.2 或 1.3),导致握手失败。在你的 build.gradle 文件中,更改所有依赖的仓库 URL 以使用 http 而不是 https。意思是华为这个库对于TLS protocol versions: (TLSv1.2, TLSv1.3)不支持。
2024-08-28 11:41:06
591
1
原创 Jetpack Compose 阻尼动画效果之SplineBasedDecay
SplineBasedDecay是 Jetpack Compose 中的一个函数,用于创建一个基于曲线衰减的动画效果。它通常用于创建平滑的动画效果,比如惯性滚动或惯性拖动的动画效果。
2024-04-12 14:49:45
544
原创 HarmonyOS首次尝试-HelloWorld
通过在鸿蒙社区查找解决办法,发现可能是API版本设置问题,还有创建时我选的是stage,导致无法使用更低的API 版本,所以又重新创建了个demo, 选择FA模式,API7。但是运行 hdc -c shell命令一直报错找不到设备就很离谱,明明studio都已经显示找到了,也能运行了。插上后,studio能显示连接上了手机设备,创建的demo使用的是API9,也就是当前的最新版本。3.0.0我猜的是API7吧,一运行又是报错,找不到设备。如果你没有配置 环境变量,会报错找不到命令,去配置就行。
2023-12-12 09:50:55
1467
原创 Ubuntu中Gitlab + Gitlab-CI + Docker + Fastlane完成Android自动化编译和打包
Android开发过程中持续集成是一项非常重要和必要的工作。持续集成指的是通过自动化的方式将开发、测试和部署过程整合在一起,实现代码的自动构建和测试,并快速反馈给开发人员,从而加快软件开发周期,提高软件质量和稳定性。以下是持续集成的重要性和必要性:提高开发效率和质量:持续集成可以自动构建和测试代码,快速检测出问题,并及时反馈给开发人员,这样可以减少手动测试的工作量,提高效率和质量。降低错误率:持续集成可以避免由于手动构建和测试过程中的疏忽而引入错误,保证了代码的准确性和可靠性,降低了错误率。
2023-06-02 14:29:49
1273
原创 ubuntu虚拟机固定ip
在Mac电脑里安装了VMWare Fusion虚拟机,里面安装了Ubuntu系统。然后每次在使用gitlab的时候,会因为每次关机启动虚拟机后,ip地址会变化,导致每次都需要去配置gitlab的ip地址,不胜其烦呀。
2023-05-30 11:07:31
706
原创 android No virtual method xxx(XXXX;)
“No virtual method getTag(Ljava/lang/String;)” error when calling xxx。在我们项目就是,多个库引用了同一个库,但是各自引用改库的版本确不一致,导致的改问题。
2022-06-10 13:49:46
2262
原创 Gradle sync failed: Could not install Gradle distribution from xxx
最近升级了Android Studio,就开始编译报错:Gradle sync failed: Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-7.0.2-bin.zip’. (192 ms)明明就有这个版本的gradle,就是说找不到。最后发现是studio配置的问题!看配置图:然后再同步一下就OK了。...
2022-02-14 17:21:52
3073
原创 RecyclerView中带EditTextView问题
所有index位置使用helper.layoutPosition, 崩溃报错android Called attach on a child which is not detached。所有地方使用 helper.layoutPosition 直接数据越界。从data中获取数据使用helper.layoutPosition - headerLayoutCount,更新使用helper.layoutPosition。无法获取到helper实例的地方: index + headerLayoutCount
2022-01-07 18:01:00
1040
原创 通知栏消息多种提醒方式
有时候我们需要在白天让我们的通知消息跟随系统,但是夜晚需要静默提醒,不去打扰用户。就需要对Notification进行不同的设置。下面上代码,兼容不同版本:fun createNotification(messageBean: PushInlineMessageBean) { val isDefaultDuration = System.currentTimeMillis() < DateTools.getTodayHourTime(23) &&
2021-07-22 13:58:26
937
原创 RecyclerView精确测量高度
仅支持LinearLayoutManager布局的RecyclerView.class LinearLayoutManagerOffset(context: Context?) : LinearLayoutManager(context) { private val childSizesMap = mutableMapOf<Int, Int>() override fun onLayoutCompleted(state: RecyclerView.State?) {
2021-06-30 14:10:49
1341
原创 Android 6.0 API
Android 6.0 (M) 为用户和应用开发者提供了新功能。本文旨在介绍其中最值得关注的 API。着手开发要着手开发 Android 6.0 应用,您必须先获得 Android SDK,然后使用SDK 管理器下载 Android 6.0 SDK Platform 和系统映像。更新目标 API 级别要进一步优化您的应用在运行 Android 的设备上的性能,请将您的
2021-06-30 14:06:13
461
原创 scrollview嵌入webview导致自动滚动
当我们在界面外层使用了ScrollView,内层又有WebView时,当进入界面后,会导致ScrollView自动滚动到webView刚好可见的位置。找了下资料,参考链接:https://stackoverflow.com/questions/9842494/how-to-prevent-a-scrollview-from-scrolling-to-a-webview-after-data-i
2021-06-30 14:03:55
369
原创 Gson的alternate
对多种属性名不一致的情况,需要用到 SerializedName 注解的另一个属性值alternate.public class User { @SerializedName(value = "height", alternate = {"Height", "mHeight"}) private int height; private int width;...
2021-06-30 14:02:10
938
原创 Android导出Crash日志
一行代码:adbbugreport搞定参考:https://developer.android.com/studio/debug/bug-report
2021-06-30 14:00:11
1586
Hello-jni-ndk
2017-03-03
设计师测量文本行距
2016-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人