
Android
文章平均质量分 71
iblade
明年的某个时候,你会想着要是今天就行动了该多好!
展开
-
app依赖库libs资源和代码的可见性规则
现象原因解决方案能访问 libFeedback 的资源资源自动合并到 APK,全局可见无需额外配置无法访问依赖导致代码不传递使用api或 app 直接依赖 libFeedback代码编译报错Utils类或方法不是public,或依赖未传递检查修饰符并调整依赖配置选择方法 1 或方法 2 取决于架构设计。如果 libFeedback 是 libVip 的实现细节,用;如果是公共 API,用api。原创 2025-03-17 10:06:00 · 745 阅读 · 0 评论 -
Android 检测设备是否 Root
为了准确判断设备是否已经Root,通常可以结合以上几种方法进行检测。单独依赖某一种方法可能会存在误判的风险(例如,某些Root工具会隐藏自己),因此建议使用多个方法的组合来增加检测的准确性。SafetyNetAPI是推荐的方式,它可以通过Google的服务器来验证设备的安全性,避免了本地Root检测的很多限制。原创 2024-12-30 17:23:42 · 1824 阅读 · 0 评论 -
Android 动画深度解析
例如,在使用一些较新的转场动画 API 时,如果应用需要兼容低版本系统,可以通过条件判断来使用不同的实现方式,在高版本中使用新的 API 来实现炫酷的转场效果,而在低版本中采用传统的、兼容性更好的动画手段来模拟类似的过渡效果,保证不同版本设备上的用户都能获得相对一致的体验。它突破了传统动画仅针对 View 组件的局限,能够对任何对象的属性施展动画魔法,无论是位置、大小、透明度,还是自定义对象的特有属性,皆可在其掌控之下实现平滑自然的变化。另外,硬件加速也是提升动画性能的一大利器。原创 2024-12-19 11:34:02 · 1242 阅读 · 0 评论 -
检查Android设备当前的声音模式
要检查Android设备当前的声音模式(例如,是否为响铃模式、振动模式或静音模式),你可以使用类。原创 2024-11-16 16:39:40 · 759 阅读 · 0 评论 -
TextView字体Sans-serif Medium
除了使用内置的字体,你还可以加载自定义字体。在res/font文件夹中添加自定义字体文件,并通过引用。例如,假设你有一个自定义字体文件放在中:在res/font文件夹中创建一个新的 XML 文件,例如</在布局文件中使用自定义字体:属性提供了一种方便的方法来设置不同的字体系列。你可以选择内置的字体,也可以加载自定义字体,以满足应用程序的设计需求。原创 2024-09-06 20:14:41 · 1191 阅读 · 0 评论 -
Attribute application@networkSecurityConfig value=(@xml/network_security_config) fromAndroidManifest
这个错误提示说明在你的项目和库中都定义了属性。为了解决这个冲突,你需要使用属性来指定哪个配置应该被替代。tools:这通常是在<manifest>元素的开头。</</这样做将会告诉构建系统使用你在项目中定义的文件,而不是库中定义的文件。原创 2024-07-25 15:46:08 · 646 阅读 · 0 评论 -
RecyclerView嵌套ScrollView卡顿解决
以上方法都是为了避免嵌套在ScrollView中引起的性能问题。最推荐的方法是使用或者将头部和列表合并到一个中。如果仍然遇到问题,可以尝试其他优化技术,例如减少视图层次结构或优化适配器中的数据绑定逻辑。原创 2024-06-27 14:48:00 · 1150 阅读 · 0 评论 -
Android 上展示 GIF 动图的方法
使用ImageView加载 WebP 格式优点:简单直接,节省存储空间。缺点:需要将 GIF 转换为 WebP,且 WebP 支持有限。使用Glide优点:强大的图片加载和缓存功能,支持复杂的图像处理。缺点:库较大,增加 APK 大小。使用Fresco优点:支持多种图片格式,高效的内存和磁盘缓存管理。缺点:库较大,学习曲线较陡。使用优点:专用于 GIF,功能丰富,内存使用优化较好。缺点:仅限于 GIF,不支持其他格式。使用Movie类优点:不需要额外的第三方库,轻量级。缺点。原创 2024-06-14 18:58:51 · 3701 阅读 · 0 评论 -
ConstraintLayout:layout_constraintWidth_default和layout_constraintHorizontal_bias组合
在 Android 开发中,是一个强大的工具,用于构建灵活且响应迅速的用户界面。在本文中,我们将深入探讨两个关键属性——和,并展示如何使用这些属性来实现一个常见的布局需求。原创 2024-06-14 18:37:14 · 959 阅读 · 0 评论 -
ConstraintLayout:layout_constraintHorizontal_chainStyle
是ConstraintLayout中的一个属性,用于定义水平链(horizontal chain)中各个视图之间的布局方式。在ConstraintLayout中,链是一组通过双向约束连接在一起的视图的集合,可以是水平的也可以是垂直的。属性决定了如何分配链内视图之间的空间或者如何对齐这些视图。原创 2024-05-14 16:43:03 · 1803 阅读 · 1 评论 -
ArtifactResolveException: Could not resolve all files for configuration ‘:app:googleArm32DebugRuntim
遇到这个错误,通常意味着Gradle在构建过程中无法解析项目依赖的一些文件。原创 2024-05-10 15:32:00 · 1690 阅读 · 0 评论 -
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 · 1602 阅读 · 1 评论 -
查看APK签名信息
查看APK文件的签名信息,可以使用Android SDK中提供的一些工具。原创 2024-04-19 19:50:56 · 4588 阅读 · 0 评论 -
查看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 · 13121 阅读 · 2 评论 -
Android动态地获取资源的ID
方法在Android开发中用于动态地获取资源的ID。这个方法允许你根据资源的名称、类型和包名来查找对应的资源ID,而不是直接使用硬编码的R类引用(例如。原创 2024-03-21 14:39:43 · 1137 阅读 · 0 评论 -
Android获取UID的新思路
在 Android 设备中,获取唯一UID通常是个让程序员头疼的事情。大家都是各显神通来拼接 随机 存值等等。首先 我们获取UID,很多时候是想,我这里提供一种思路,例如公司做的是一个招聘类app,那么每次app冷启动时,可以获取微信app的安装时间。如何获取呢?原创 2024-03-20 17:00:34 · 1297 阅读 · 1 评论 -
Android获取某个app首次安装时间和更新时间
请注意,对于普通应用来说,你不需要任何特殊权限就可以访问这些信息。但是,请确保在尝试调用。类来获取应用程序的安装时间和上次更新时间。) 权限,并且它运行在具有正确权限的环境中。如果微信应用未安装,时,你的代码是在拥有有效上下文的环境中执行,例如在。此代码假定您已经拥有必要的上下文 (在Android中,可以使用。原创 2024-03-20 16:03:04 · 2628 阅读 · 0 评论 -
ANR:QueuedWork.waitToFinish(), SharedPreferences
项目中 ANR 率居高不下,从统计上来看排在前面的有几个都是 SharedPreference(以下简称 SP)引起的。接下来我们抽丝剥茧的来分析其产生原因及如何解决。这段ANR(Application Not Responding)报错信息显示了一个涉及线程同步的问题。ANR发生时,通常是因为应用程序在主线程上执行了一个耗时操作,超过了系统设定的时间限制(如5秒),导致未能响应用户输入或系统事件。: 表明正在运行与实现相关的一段代码。允许Android应用存储和检索键值对数据。原创 2024-03-20 14:53:17 · 1046 阅读 · 0 评论 -
如何从Android手机导出已安装的APP
在这篇博客中,我们将讨论如何将Android设备上已安装的应用程序(以Instagram为例)导出到电脑上。无论您是开发人员需要检查APK文件,还是仅仅想要备份某个应用,以下步骤都能帮助您完成任务。原创 2024-03-19 18:31:25 · 7757 阅读 · 1 评论 -
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 · 2004 阅读 · 0 评论 -
Android 访问存储卡的三种主要的目录
这些目录对所有应用都是可见的,并且不需要任何特殊权限来读取媒体文件。开发者在选择存储位置时,应该考虑到这些区别,并基于用户的数据隐私以及文件的用途选择正确的存储路径。这些目录是应用专属的,在应用卸载后会自动删除里面的内容。不需要任何权限即可读写这些目录中的文件。这是用于存储临时缓存文件的目录。:适合保存用户希望长期保留并可以与其他应用共享的文件,如照片、音乐等。:适合存储应用的临时缓存数据或不需要与其他应用共享的大型文件。:适合存放应用运行过程中产生的临时缓存文件。权限,并且访问路径可能受到某些限制。原创 2024-01-23 16:21:17 · 1955 阅读 · 1 评论 -
android:clickable= false 无效,依然能被点击
虽然在代码中设置点击事件监听器会改变视图的可点击状态,但是XML文件中的设定有助于定义和理解视图的默认行为和布局的设计意图。:在复杂的视图层次结构中,可能会有一些子视图默认不接受点击事件,因为点击事件被父视图处理了。:对于不需要处理点击事件的视图,将其设置为不可点击可以避免在触摸事件分发过程中进行不必要的点击检查,从而轻微提升性能。:当你创建一个自定义视图或布局,并且默认情况下它不应该响应点击事件时,你可以在XML中明确地将。在某些情况下响应点击事件,即使已经设置了点击监听器,你可以在代码中动态地设置。原创 2024-01-11 11:18:14 · 2080 阅读 · 0 评论 -
setOnClickListener(null)父控件依然拿不到点击
需求:评价星星 在评价页支持点击选中,在其他页面点击要跳转页面。//此方法无用。isEditable = false ,点击依然无法跳转 public void setEditable(boolean isEditable) { this.isEditable = isEditable; for (int i = 0; i < getChildCount(); i++) { getChildAt(i).setOnClickListene原创 2022-03-18 17:23:12 · 1310 阅读 · 1 评论 -
Dialog空白区点击的监听
需求:底部弹窗上有输入框,如果显示键盘,点击空白仅消失键盘,键盘不在,消失弹窗。监听Dialog空白区域,最常见思路是空白区域也写上View,监听View点击即可。但是Dialog中有输入框时,键盘弹起时,会出现画面跳动,体验很差。需要从getDecorView层面入手。重写Dialog,然后加上如下代码: getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutPar原创 2021-09-06 15:19:09 · 1617 阅读 · 0 评论 -
Android split()特殊符号“.”、“|”、“^”等字符
需求:“求职神器|完美简历!”—>[求职神器,完美简历]①只要第一个判断可以进入,即line 138是可用的,但line 139不可用,②将line 142和line 145,再试试。结论:一、split 分割字符时,两种方法:方法①:\转义,单个\也是特殊符号,需要两个\,即split("\|");方法②:如果是在JDK(Java)用split(“|”);如果是ART(Android)中split(“[ | ]”)。二、contains 判断包含:不能加转义 \ 或者 [ ] ,需原创 2021-08-10 14:44:35 · 4878 阅读 · 0 评论 -
Mac中Android Studio 意外闪退
背景是这样的,我要做一个自定义view,需要反复调整UI显示,所以我有新建了一个Demo工程,写完运行Demo后,手机卡死了,等我看log时,AS闪退了,WTF?然后我点击“重新打开”,再次闪退。于是我重启了Mac。然而,依然反复闪退。。。下面是崩溃log。跪求路过大神指津。Process: studio [538]Path: /Applications/Android Studio 2.app/Contents/MacOS/stu.原创 2021-05-08 21:35:37 · 2552 阅读 · 0 评论 -
Android跨module通信
Android工程业务繁多时,为了聚合业务,通常会根据业务类型拆分成不同的module,例如ChatLibrary,PayLibrary,FaceIdentifyLib等,然后让主工程分别依赖这些子module,方便主工程随时调用子module的信息。但是此时子module并未依赖主工程,自然也无法访问主工程的数据。那么用EventBus事件总线呢?试验过都会被modules间的这道墙所隔离。(EventBus只能用在单module里通信)可以使用boardcast ,这是安卓本身系统带有可以整个系统原创 2021-02-26 18:59:58 · 1516 阅读 · 0 评论 -
Fragment嵌套坑多多
Android有碎片化的问题,当然本文说的碎片化不是指的系统版本碎片化的问题,而是Fragment组件碎片化的问题。很久之前,在Android 3.1系统发布的时候,Google推出了使用Fragment来更加容易地开发平板和手机应用,虽然Activity还是页面结构的主体,但是却可以在其基础上使用多个Fragment来构建页面,这些Fragment都是有各自的生命周期的。最常见的是列表和详情页面使用Fragment,如果在手机设备上,这个两个一般都是在独立的Activity页面中,但是在平板上这两翻译 2021-02-05 16:52:36 · 628 阅读 · 0 评论 -
HashMap和LinkedHashMap区别应用
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMapHashTableLinkedHashMapTreeMapMap主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;Hash原创 2020-09-02 20:37:15 · 288 阅读 · 0 评论 -
清空所有Activity
退出APP是需要清空所有Activity, 清空的前提是 需要记录已开启的所有 Activity。在Application.ActivityLifecycleCallbacks的生命周期中调用add和remove操作。public class ActivityStackHelper { private static LinkedHashMap<Class<?>, Activity> activities = new LinkedHashMap<>();原创 2020-09-02 20:27:40 · 438 阅读 · 0 评论 -
常用命令清单
获取签名文件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 · 285 阅读 · 0 评论 -
TextView不依赖ScrollView也能滚动
String TEXT = "文艺复兴这场文化运动对近代早期欧洲的学术生活造成了深刻的影响。"; StringBuilder sb=new StringBuilder(); for (int i = 0; i < 15; i++) { sb.append(i).append("\n").append(TEXT).append("\n"); } textView.setText(sb.toStrin...原创 2020-08-21 22:00:42 · 307 阅读 · 0 评论 -
View在GONE时获取宽高
需求:页面有一张card 首次进入该页时 默认展开,之后再次有折叠卡片 第一次进入时 需要折叠,并且折叠时 点击展开按钮可展开。如果进来时就隐藏GONE 展开动画时 如何获知高度呢?方法一: private void initHeight() { tvContent1.setVisibility(View.INVISIBLE); tvContent1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewT原创 2020-08-21 21:19:57 · 570 阅读 · 0 评论 -
Android 动画ObjectAnimator中height和translationY
动画实现两种方式:ObjectAnimator animator1 = ObjectAnimator.ofFloat(tvContent1, View.TRANSLATION_Y, hFrom, hTo);ObjectAnimator animator1 = ObjectAnimator.ofInt(wrapper, “height”, hFrom, hTo);但是效果完全不同:如下图:public class SecondActivity extends AppCompatActivity原创 2020-08-21 20:39:12 · 3379 阅读 · 1 评论 -
多行TextView后插入图片
public class LabelUtils { /** * @param text 标签内容 * @param textColor 标签颜色 * @return */ public static Drawable fromText(String text, String textColor) { int DP1 = DensityUtil.dip2px(1); Paint paint = new Pain.原创 2020-08-06 10:07:17 · 945 阅读 · 0 评论 -
FragmentPagerAdapter动态增删Fragment不更新
public class ResumePreviewAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> fragments; private String[] tabTitles; public ResumePreviewAdapter(FragmentManager fm, ArrayList<Fragment> fragments, String[] tabTitles)原创 2020-06-15 14:48:48 · 674 阅读 · 0 评论 -
EditText的焦点监听回调
EditText的焦点问题。需求背景:1.EditText的输入线条 未输入状态时,灰色。2.输入状态时,绿色;3.点击“确定”且 输入格式错误时(包含空),红线提示。一旦重获焦点,变成输入状态的绿色。实现效果如下: /** * 焦点在的时候,输入线条变绿 * * @param isColorFocus */ public AutoEditText setLineColorFocus(boolean isColorFocus) {原创 2020-05-22 17:51:46 · 1475 阅读 · 0 评论 -
Android悬浮窗视频
类似微信视频通话需求。思路:1.申请悬浮窗权限2.windowManager实现悬浮窗;3.moveToback退出全屏,显示悬浮窗;当用户正在NewsActivity看新闻,视频电话来了,接听(VideoActivity),然后缩至悬浮窗,此时应回到NewsActivity,悬浮窗出现时该如何回到电话前的页面?finish掉VideoActivity吗?finish后自然回退到栈内上一...原创 2020-03-03 22:35:02 · 2795 阅读 · 2 评论 -
Android屏幕常亮
最简单 布局文件任一可见View设置属性android:keepScreenOn=“true”;关闭时只需把true改为false即可。在Activity的onCreate()中添加getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);取消常亮时,把addFlags改为clearFlags参数不变。...原创 2020-03-03 21:45:07 · 1740 阅读 · 0 评论