- 博客(411)
- 资源 (9)
- 收藏
- 关注

原创 常用命令清单
获取签名文件MD5 :keytool -list -v -keystore lagoueducation.jks跳转至路由页adb shell am start -a android.intent.action.VIEW -d "lagou://lagou.com/edit?type=2\&id=1"
2020-08-28 18:17:38
283
原创 技术负责人接手问题团队的破局之道:从止血到重建的实战指南
当你发现晨会变成“点头会”——60%的成员习惯性沉默,跨部门协作邮件平均3天得不到回复,说明团队已陷入“信心黑洞”。从战备力量中挑选3-5人组成特种小组,给予独立决策权。某团队正是靠这样的小组,用半年完成核心系统重构。某供应链团队通过优化数据库索引,把报表生成速度从2小时缩短到10分钟,立即赢得业务方支持。在取得初步信任后启动架构治理,但要用业务语言包装:“这次改造能让需求交付提速30%”
2025-03-28 10:38:19
749
原创 app依赖库libs资源和代码的可见性规则
现象原因解决方案能访问 libFeedback 的资源资源自动合并到 APK,全局可见无需额外配置无法访问依赖导致代码不传递使用api或 app 直接依赖 libFeedback代码编译报错Utils类或方法不是public,或依赖未传递检查修饰符并调整依赖配置选择方法 1 或方法 2 取决于架构设计。如果 libFeedback 是 libVip 的实现细节,用;如果是公共 API,用api。
2025-03-17 10:06:00
743
原创 Android 检测设备是否 Root
为了准确判断设备是否已经Root,通常可以结合以上几种方法进行检测。单独依赖某一种方法可能会存在误判的风险(例如,某些Root工具会隐藏自己),因此建议使用多个方法的组合来增加检测的准确性。SafetyNetAPI是推荐的方式,它可以通过Google的服务器来验证设备的安全性,避免了本地Root检测的很多限制。
2024-12-30 17:23:42
1792
原创 Android 动画深度解析
例如,在使用一些较新的转场动画 API 时,如果应用需要兼容低版本系统,可以通过条件判断来使用不同的实现方式,在高版本中使用新的 API 来实现炫酷的转场效果,而在低版本中采用传统的、兼容性更好的动画手段来模拟类似的过渡效果,保证不同版本设备上的用户都能获得相对一致的体验。它突破了传统动画仅针对 View 组件的局限,能够对任何对象的属性施展动画魔法,无论是位置、大小、透明度,还是自定义对象的特有属性,皆可在其掌控之下实现平滑自然的变化。另外,硬件加速也是提升动画性能的一大利器。
2024-12-19 11:34:02
1238
原创 如何在 Android 项目中实现跨库传值
在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd需要获取libVip的 VIP 等级状态,但这两个库之间没有直接依赖关系。
2024-12-10 13:15:13
568
原创 忘提交文件,想合并提交,git commit --amend
如果你已经进行了提交并且忘记包含一个文件,但希望将这个文件合并到之前的一次提交中,可以使用 来进行修改。以下是步骤:添加文件到暂存区:使用 修改最后一次提交:编辑提交信息(可选):强制推送到远程仓库(如果已推送过):使用 可以在确保没有其他人更新该分支的情况下安全地强制推送。协作警告:如果你在与他人协作的公共分支上操作,应格外小心,因为 会覆盖远程历史记录,可能会影响其他开发人员的工作。本地分支:如果这是一个尚未推送或仅在本地使用的分支,则可以放心地执行上述步骤而无需担心对他人的影响。
2024-12-10 11:41:21
695
原创 深克隆和浅克隆,深克隆的5种实现方式
是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对象的地址是共享给原型对象和克隆对象的。
2024-09-26 16:16:21
1324
原创 TextView字体Sans-serif Medium
除了使用内置的字体,你还可以加载自定义字体。在res/font文件夹中添加自定义字体文件,并通过引用。例如,假设你有一个自定义字体文件放在中:在res/font文件夹中创建一个新的 XML 文件,例如</在布局文件中使用自定义字体:属性提供了一种方便的方法来设置不同的字体系列。你可以选择内置的字体,也可以加载自定义字体,以满足应用程序的设计需求。
2024-09-06 20:14:41
1188
原创 Attribute application@networkSecurityConfig value=(@xml/network_security_config) fromAndroidManifest
这个错误提示说明在你的项目和库中都定义了属性。为了解决这个冲突,你需要使用属性来指定哪个配置应该被替代。tools:这通常是在<manifest>元素的开头。</</这样做将会告诉构建系统使用你在项目中定义的文件,而不是库中定义的文件。
2024-07-25 15:46:08
640
1
原创 RecyclerView嵌套ScrollView卡顿解决
以上方法都是为了避免嵌套在ScrollView中引起的性能问题。最推荐的方法是使用或者将头部和列表合并到一个中。如果仍然遇到问题,可以尝试其他优化技术,例如减少视图层次结构或优化适配器中的数据绑定逻辑。
2024-06-27 14:48:00
1143
原创 手机网络卡顿,试试飞行模式
切换飞行模式的效果相当于给手机的网络连接“重启”了一次,能够解决许多由网络连接、IP地址、DNS缓存等问题引起的网页访问问题。如果这种情况频繁发生,建议联系网络运营商进行检查或更换更稳定的网络环境。
2024-06-17 20:31:28
2083
原创 Android 上展示 GIF 动图的方法
使用ImageView加载 WebP 格式优点:简单直接,节省存储空间。缺点:需要将 GIF 转换为 WebP,且 WebP 支持有限。使用Glide优点:强大的图片加载和缓存功能,支持复杂的图像处理。缺点:库较大,增加 APK 大小。使用Fresco优点:支持多种图片格式,高效的内存和磁盘缓存管理。缺点:库较大,学习曲线较陡。使用优点:专用于 GIF,功能丰富,内存使用优化较好。缺点:仅限于 GIF,不支持其他格式。使用Movie类优点:不需要额外的第三方库,轻量级。缺点。
2024-06-14 18:58:51
3668
原创 ConstraintLayout:layout_constraintWidth_default和layout_constraintHorizontal_bias组合
在 Android 开发中,是一个强大的工具,用于构建灵活且响应迅速的用户界面。在本文中,我们将深入探讨两个关键属性——和,并展示如何使用这些属性来实现一个常见的布局需求。
2024-06-14 18:37:14
944
原创 ConstraintLayout:layout_constraintHorizontal_chainStyle
是ConstraintLayout中的一个属性,用于定义水平链(horizontal chain)中各个视图之间的布局方式。在ConstraintLayout中,链是一组通过双向约束连接在一起的视图的集合,可以是水平的也可以是垂直的。属性决定了如何分配链内视图之间的空间或者如何对齐这些视图。
2024-05-14 16:43:03
1795
1
原创 uri.getQueryParameters(name)返回一个列表(List)
综上所述,返回列表是为了更灵活地处理URI中的查询参数,尤其是对于同一个参数名可能对应多个值的情况。这种设计既保证了功能的强大,也使得API的使用更加灵活和方便。开发者需要根据自己的需求,从返回的列表中获取一个或多个值。
2024-05-13 19:45:01
537
原创 ArtifactResolveException: Could not resolve all files for configuration ‘:app:googleArm32DebugRuntim
遇到这个错误,通常意味着Gradle在构建过程中无法解析项目依赖的一些文件。
2024-05-10 15:32:00
1685
原创 Android:lib库之间互不依赖,怎么传值?
如果libA与libB需要共享很多数据或逻辑,可以考虑创建一个新的库(比如CommonLib),专门用于存放共享的代码和资源。既然主工程依赖了所有的库,你可以通过主工程来协调libA和libB之间的数据共享。例如,可以在主工程中获取libB的值,并将其以参数的形式传递给libA。通常来说,尽量避免模块间的直接依赖,采用一种松耦合的方式来组织代码,可以使项目更加灵活和可维护。定义一个接口,在libA中声明需要的方法,然后在主工程中实现这个接口,并将libB的数据传递到libA。接口访问到libB的值。
2024-04-30 18:14:53
486
3
原创 Android isNetworkConnected如何判断APP连接到了无网络热点
在考虑网络检测方法时,速度和稳定性是两个重要的考量因素。开发者需要基于应用的具体需求和目标用户所在地的网络环境来选择最适合的方案。对于需要快速反馈且目标用户遍布全球的应用,使用DNS解析可能是最优的选择,尤其是当选择如Google DNS或Cloudflare DNS这样的全球性服务时。然而,在特定地区(例如中国大陆),为了确保最佳的访问速度和稳定性,选择本地DNS服务可能更加合适。对于主要面向特定地区用户的应用,例如中国大陆,采用HTTP HEAD请求并选择本地流行且稳定的网站(如。
2024-04-23 15:16:45
1591
1
原创 isListEqual方法比较
在未排序的情况下,为了确定一个列表是否包含另一个列表的所有元素(并且反之亦然),你可能需要对列表中的每个元素执行多次查找操作,这在最坏的情况下会带来O(n^2)的时间复杂度。当两个列表被排序后,我们可以保证相同的元素将会出现在相同的位置,这样就可以通过一个简单的顺序比较来确定两个列表是否相等,而不需要对每个元素进行多次查找。因此,在选择使用排序方法之前,请确保考虑到了你的具体需求,包括列表的大小、元素的类型以及是否需要保持元素的原始顺序。如果列表中的元素是唯一的且元素的顺序不重要,则可以考虑使用。
2024-04-19 18:10:22
502
原创 查看apk是64位32位(三种方法)
通过检查APK文件,你可以确定该APK支持的架构类型,包括它是为64位(例如arm64-v8ax86_64)还是32位(例如x86)架构准备的。Android应用程序可以包含多个不同的二进制文件,每个文件针对不同的处理器架构,这些文件通常被称为ABI(Application Binary Interface)。一个APK可以同时包含32位和64位的二进制版本,以便在各种设备上提供最佳性能。
2024-04-19 17:20:28
13025
2
原创 Git删除未跟踪的文件Untracked files
请注意,这个命令会从你的工作目录中永久删除这些文件,因此在执行之前请确保你不再需要这些文件或已经妥善备份。请注意,这个命令会从你的工作目录中永久删除这些文件,因此在执行之前请确保你不再需要这些文件或已经妥善备份。选项执行删除操作之前,请确保你完全了解将要删除哪些文件,以及这些文件是否真的不再需要或已有备份。选项执行删除操作之前,请确保你完全了解将要删除哪些文件,以及这些文件是否真的不再需要或已有备份。在 Git 中,要删除未跟踪的文件(Untracked files),你可以使用。
2024-04-10 17:42:32
2795
原创 Mac命令行查找SDK/JDK安装位置
如果其中任何一个环境变量被设置,并且指向了 Android SDK 的安装路径,那么 Android SDK Platform Tools 的安装位置也会在其中。通常情况下,Android SDK 的默认安装路径是在用户的 home 目录下的。在不同的系统上,Java 可能安装在不同的位置,因此搜索结果可能会有所不同。环境变量被设置,并且指向了 Java 的安装路径,那么 Java 的安装位置就是该路径。Java 的安装通常位于系统的。命令的安装路径,通常情况下,它会在 Android SDK 的。
2024-03-28 11:42:00
1472
原创 String.format
只是字符串的一部分,并不属于格式化占位符。所以最终输出的格式可能类似于 “↓downloadSpeed/s - ↑uploadSpeed/s”,其中。请注意,上表只是简单概述了一些常用的通配符,更多的格式化选项和复杂的使用方法可以参考Java的官方文档。每个通配符都可以有一系列可选的格式修饰符,如宽度、精度和对齐方式等,来进一步控制格式化的输出。表示占位符的顺序索引,确保了即使参数顺序变动,也总是按照索引位置替换。方法用于格式化字符串。它使用占位符来替换特定的值。表示占位符是用于字符串类型的值,数字。
2024-03-21 16:32:40
361
原创 Android动态地获取资源的ID
方法在Android开发中用于动态地获取资源的ID。这个方法允许你根据资源的名称、类型和包名来查找对应的资源ID,而不是直接使用硬编码的R类引用(例如。
2024-03-21 14:39:43
1135
原创 Android获取UID的新思路
在 Android 设备中,获取唯一UID通常是个让程序员头疼的事情。大家都是各显神通来拼接 随机 存值等等。首先 我们获取UID,很多时候是想,我这里提供一种思路,例如公司做的是一个招聘类app,那么每次app冷启动时,可以获取微信app的安装时间。如何获取呢?
2024-03-20 17:00:34
1289
1
原创 Android获取某个app首次安装时间和更新时间
请注意,对于普通应用来说,你不需要任何特殊权限就可以访问这些信息。但是,请确保在尝试调用。类来获取应用程序的安装时间和上次更新时间。) 权限,并且它运行在具有正确权限的环境中。如果微信应用未安装,时,你的代码是在拥有有效上下文的环境中执行,例如在。此代码假定您已经拥有必要的上下文 (在Android中,可以使用。
2024-03-20 16:03:04
2607
原创 ANR:QueuedWork.waitToFinish(), SharedPreferences
项目中 ANR 率居高不下,从统计上来看排在前面的有几个都是 SharedPreference(以下简称 SP)引起的。接下来我们抽丝剥茧的来分析其产生原因及如何解决。这段ANR(Application Not Responding)报错信息显示了一个涉及线程同步的问题。ANR发生时,通常是因为应用程序在主线程上执行了一个耗时操作,超过了系统设定的时间限制(如5秒),导致未能响应用户输入或系统事件。: 表明正在运行与实现相关的一段代码。允许Android应用存储和检索键值对数据。
2024-03-20 14:53:17
1041
原创 如何从Android手机导出已安装的APP
在这篇博客中,我们将讨论如何将Android设备上已安装的应用程序(以Instagram为例)导出到电脑上。无论您是开发人员需要检查APK文件,还是仅仅想要备份某个应用,以下步骤都能帮助您完成任务。
2024-03-19 18:31:25
7691
2
原创 ./gradlew assembleRelease
其中,你需要指明签名配置(signing config)和构建类型(build type)。请注意,签名配置中涉及敏感信息,包括密钥库路径、密钥库密码、密钥别名和密钥密码。文件中,而是应该存储在本地并从环境变量或属性文件中读取。例如,你可以创建一个。在 Android 项目中使用 Gradle 进行打包,通常会涉及到配置。取决于你是否只想编译 APK/AAB 文件还是同时希望安装它。请确保你已经有了有效的签名配置,并且密钥库文件可用。),你需要添加签名配置和构建类型。首先,在项目根目录下的。
2024-03-13 22:07:15
1415
原创 Long类型比较,IllegalArgumentException: Comparison method violates its general contract
表示你的比较器(Comparator)违反了其一般约定。能表示的最大值(即 Integer.MAX_VALUE 或者说 2^31 - 1),就会发生整型溢出,导致比较结果不准确。相减时可能会得到负数,而这个负数可能并不代表逻辑上的“小于”。方法,它避免了整型溢出的问题,并且正确地实现了比较逻辑。,其次使用安全的比较方法。代码这样的,其中startTime是时间戳。类型,那么就不会有溢出的风险,而且。可能会导致溢出问题。方法中整型溢出的处理上。改进的方法是,首先不要强制将。时,如果时间戳值超过。
2024-03-13 21:53:35
634
原创 android:textDirection=“anyRtl“在说什么?
如果你实现了自定义视图并且在其中直接处理了文本或布局,确保考虑RTL布局方向,并相应地调整绘图逻辑。
2024-03-05 14:55:06
1159
原创 Git 分支跟踪There is no tracking information for the current branch.
以上方法可以帮助你了解本地分支和远端分支之间的关联情况。如果一个本地分支正在跟踪一个远端分支,这意味着当你执行如。选项可以显示详细的分支信息,包括每个分支的最后一次提交和它所跟踪的远端分支(如果有的话)。如果你只想查看一个特定分支的远端跟踪分支,可以先切换到那个分支,然后使用。这个命令将列出所有与分支相关的配置,包括本地分支所跟踪的远端分支信息。将会显示当前分支的状态,包括它跟踪的远端分支(如果已设置的话)。等命令时,Git知道应该与哪个远端分支进行交互。要查看本地分支跟踪的远端分支,可以使用。
2024-02-19 19:10:58
709
原创 Android Gradle插件8.0资源ID将不再final,Resource IDs will be non-final by default in Android Gradle Plugin8
并非特定版本8.0将实施这一变化,因为从我搜集到的信息来看,这个变化曾在5.0版本中提及过,但具体会在哪个版本实现尚不确定,因此需要关注官方公告。具体到项目中的影响,开发者需要追踪相关工具和库的更新,以确保他们的应用能够顺利适应新版Android Gradle插件的变更,并且及时更新他们的代码以避免潜在的编译错误。当资源ID不必在编译时被确定为final常量时,构建系统可以避免某些复杂的处理过程,从而加速整体的构建速度和效率。的,构建系统可能有更大的灵活性来处理资源,而不必担心破坏依赖于这些资源的代码。
2024-01-24 17:24:00
1992
原创 Android Studio 提示Use app:drawableStartCompat instead of android:drawableStart
每次提交代码时,AS这个老妈子总爱唠叨一堆warning,这些Warning都在讲什么?
2024-01-24 16:57:21
1875
原创 Android 访问存储卡的三种主要的目录
这些目录对所有应用都是可见的,并且不需要任何特殊权限来读取媒体文件。开发者在选择存储位置时,应该考虑到这些区别,并基于用户的数据隐私以及文件的用途选择正确的存储路径。这些目录是应用专属的,在应用卸载后会自动删除里面的内容。不需要任何权限即可读写这些目录中的文件。这是用于存储临时缓存文件的目录。:适合保存用户希望长期保留并可以与其他应用共享的文件,如照片、音乐等。:适合存储应用的临时缓存数据或不需要与其他应用共享的大型文件。:适合存放应用运行过程中产生的临时缓存文件。权限,并且访问路径可能受到某些限制。
2024-01-23 16:21:17
1947
1
原创 git format-patch怎么用
是一个 Git 命令,它用于创建一系列的补丁(patch)文件,每个文件代表一次提交,并包含了提交中的变化内容。这些补丁文件是以邮件格式存储的,包括提交信息、作者信息、日期等,使得它们可以通过电子邮件发送给他人或应用到另一个仓库。这样,你就可以将这些补丁作为电子邮件附件发送给其他人,或者在其他项目中应用这些更改。命令将会生成三个文件,每个文件对应其中一个提交的内容(假设 A 是紧随。命令应用到他们的仓库中,从而重现相同的变更。例如,如果有三个提交:A、B 和 C,在。之间的每个提交生成一个补丁文件。
2024-01-19 21:02:22
1008
Scrollview中嵌套ViewPager和ListView常出现的问题
2016-03-30
Android:ScrollView中嵌套ViewPager和ListView示例
2016-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人