- 博客(156)
- 资源 (1)
- 收藏
- 关注
原创 小米手机开启“文本排版优化”导致的文本展示不全问题
问题排查:对TextView设置 setMovementMethod(LinkMovementMethod.getInstance());导致问题修改:1、删除setMovementMethod(LinkMovementMethod.getInstance());删除后会导致SpannableStringBuilder中setSpan()中设置的点击事件无法响应2、判断文本最后是中文字符的话,在最后加一个空格如何判断“文本排版优化”开关是否开启?
2025-01-24 15:43:09
275
原创 java.lang.Error: FFmpegKit failed to start on brand:
问题: 当你把FFmpegKit中的so拷贝到项目中,那么之前用到相关so的库可能就用不了了,你可以编译FFmpegKit源码,将所需的库放入FFmpegKit源码中,重命名这些库。你可不复制全部,可以根据报错复制对应的,一般报错的信息中可以看出需要哪个so。那么问题原因大概率是:FFmpegKit中的so跟你项目中的重复了,导致加载的时候不是使用的FFmpegKit中的so.当你的项目编译完成的时候,你可以去gradle的缓存目录下去找。FFmpegKit中的so怎么找到?
2025-01-02 16:09:59
507
原创 Android集成FCM(Firebace Cloud Messaging )
4、无法生成token的话,检查是不是没有安装Google play services服务。2、可以开启自启动权限,进程不在的时候收的FCM可以将进程拉起来。1、接收FCM消息需要进程存活,否则收不到。3、自测接受FCM消息的时候手机不需要翻墙。文件中,同时添加要在您的应用中使用的。根级(项目级)Gradle 文件 (模块(应用级)Gradle 文件 (完成以上工作就可以正常接收到消息了。注意:系统设置中需要开启通知权限。将设备上生成的token添加进去。将该插件作为依赖项添加到您的。
2024-11-18 11:02:50
784
原创 Android反编译apk重新打签名
1.下载反编译工具apktool,可以在官网(2.反编译apk文件,生成文件myapp。)上下载最新版本的 Apktool。
2024-06-24 10:59:11
478
原创 Android去除折叠屏两边的黑边,默认全屏显示
1、在AndroidManifest.xml中设置resizeableActivity为true。sdk>=24resizeableActivity默认为true,小于24位false。可以设置在activity标签,影响当前activity。可以设置在application中,影响app全局。2、设置max_aspect与min_aspect。
2024-04-15 17:33:19
914
原创 CallScreeningService使用
这个权限是Android13开始有的,对鸿蒙系统没有影响,可以在代码编译阶段删除android.permission.POST_NOTIFICATIONS。2、鸿蒙系统上如果设置默认应用失败,检测一下manifest中的权限声明,目前发现需要删除。2、创建YourCallScreeningServiceImplementation。1、在小米14上需要联系人权限,否则onScreenCall()不执行。1、Manifest中声明。
2024-04-03 15:21:19
519
原创 Linux目录介绍
在 Linux 系统中,目录结构是由 Filesystem Hierarchy Standard(FHS)定义和规范的。这些目录包含了系统中各种文件和资源,它们在整个系统中起着不同的作用。这些目录是 Linux 系统中常见的一部分,但不同的发行版可能会有所不同。这些目录的结构和功能旨在帮助组织和管理系统中的各种文件和资源。
2023-12-22 10:44:42
451
原创 桂林阳朔旅游攻略
桂林上水甲天下,阳朔上水甲桂林!阳朔县城看着有点破,但是阳朔的山水真是一绝,适合慢下来,骑个电瓶车来放松心情!适合游玩时间3天左右。主要景点:十里画廊、兴坪古镇、如易峰、相公山、20元人民币打卡处、遇龙河漂流、遇龙河骑行。
2023-10-31 17:05:23
673
原创 通过adb获取ANR日志
2、等待日志下载完毕,解压bugreport文件。1、命令行输入:adb bugreport。3、进入FS-->data-->anr。
2023-06-20 21:33:57
1165
原创 记一次Android页面卡顿排查总结
1、通过skipped关键字判断是否有掉帧2、通过getMainLooper().setMessageLogging(new LxLogPainter());查看卡顿日志3、可以通过关键字Long monitor contention with owner查看是否有线程长时间不释放锁。
2023-05-24 15:29:04
1373
2
原创 Hilt在Android中的使用
会触发 Hilt 的代码生成操作,生成的代码包括应用的一个基类,该基类可使用依赖项注入。application 容器是应用的父级容器,这意味着其他容器可以访问它提供的依赖项。//将标有@AndroidEntryPoint和@HiltAndroidApp的父类替换为Hilt_XXX。如要告知 Hilt 如何提供同一类型的不同实现(多个绑定),您可以使用限定符。生命周期的依赖项容器,并能够将实例注入。6.4.3通过注解选中实现方式。,Hilt 可创建附着于。6.4.2对实现添加注解。6.4.1 定义注解。
2023-04-25 14:45:13
1425
1
原创 android jankstats
JankStats 库可帮助您跟踪和分析应用程序中的性能问题。Jank 是指渲染时间过长的应用程序帧,JankStats 库提供有关应用程序卡顿统计信息的报告。//调用OnFrameListenerDelegate的onFrame(开始时间,now - 开始时间,预期时间)方法。//在OnPreDrawListener中获取当前帧开始时间,当前时间,帧预期耗时。:一个布尔标志,指示帧中是否发生卡顿。:帧的持续时间(以纳秒为单位)。:帧开始的时间(以纳秒为单位)。:您的应用程序在帧中的状态。
2023-02-21 11:53:54
1014
原创 apk反编译和重新打包流程
jarsigner -verbose -keystore xxx.keystore -signedjar xxx.apk 需要签名文件.apk 证书别名。格式: jarsigner -verbose -keystore 签名 -signedjar 签名文件后的文件名 需要签名文件 证书里alias别名。apktool d xx.apk,逆向之后只能看到代码的smali格式文件,需要学习smali语法才能看懂.apktool b xx,打包出来的是没有签名的apk,需要签名才能安装。
2023-02-17 16:45:03
457
原创 获取apk证书MD5值的方法
在cmd中执行 keytool -list -v -keystore xxxx.keystore -storepass 签名文件密码。cmd中执行keytool -printcert -jarfile xxx.apk。对xxxx.keystore文件获取MD5,签名信息。
2023-02-17 16:00:00
694
原创 MacBook 安装7zip
#搜索7zbrew search 7z#安装brew install p7zip7z x filename.7z 解压文件 包含目录 解压到目录中7z e filename.7z 解压文件 不包含目录 直接到当前目录
2022-05-24 11:52:53
4521
原创 Mac上android ijkplayer本地编译加调试
1.本地编译设置环境变量,ndk要用版本r10eANDROID_SDKANDROID_NDK系统偏好设置->安全性与隐私->通用->允许从一下位置下载的app设置为任何来源设置方法:打开了 Terminal 终端后 ,在命令提示后输入sudo spctl --master-disable之后按照官方提示操作就行2.本地调试ijkplayer-armv7a工程关联Android.mk编译脚本修改文件:ijkplayer/ijkplayer-a...
2022-01-05 15:36:09
2115
原创 select、poll、epoll的区别
select,poll是基于轮询实现的,将fd_set从用户空间复制到内核空间,然后让内核空间以poll机制来进行轮询,一旦有其中一个fd对应的设备活跃了,那么就把整个fd_set返回给客户端(复制到用户空间),再由客户端来轮询每个fd的,找出发生了IO事件的fd epoll是基于事件驱动实现的,加入一个新的fd,会调用epoll_ctr函数为该fd注册一个回调函数,然后将该fd结点注册到内核中的epoll红黑树中,当IO事件发生时,就会调用回调函数,将该fd结点放到就绪链表中,epoll_wait函..
2021-12-15 14:23:00
540
原创 Android framework 应用进程启动binder机制
回顾系统启动简单流程1、init进程解析init.zygote.rc 启动zygote进程,zygote对应的可执行文件app_main.cpp2、app_main.cpp 中会调用 runtime.start("com.android.internal.os.ZygoteInit", args, zygote);runtime的实现类,AndroidRuntime3 、AndroidRuntime的start中会启动虚拟机、注册jni方法、反射调用ZygoteInit的main方法预加载..
2021-12-01 16:21:44
325
原创 Android 判断设备类型(手表,车,电视,手机)
UiModeManager uiModeManager = (UiModeManager) context.getSystemService(UI_MODE_SERVICE);if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { Logger.d(TAG, "Running on a TV Device");} else { .
2021-11-23 10:58:05
4709
原创 Java语言高级特性——注解
声明一个注解类型public @interface Lance{}@Target 指定作用域注解标记另一个注解,以限制可以应用注解的 Java 元素类型ElementType.ANNOTATION_TYPE 可以应用于注解类型。ElementType.CONSTRUCTOR 可以应用于构造函数。ElementType.FIELD 可以应用于字段或属性。ElementType.LOCAL_VARIABLE 可以应用于局部变量。ElementType.METHOD 可以应用于方法级注
2021-11-23 10:10:55
2227
原创 关于Java变量名前缀m、s等的解释
google的介绍 Non-public, non-static field names start with m. Static field names start with s. Other fields start with a lower case letter. Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.
2021-11-18 10:17:54
2049
原创 SQLite优化
1、索引简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。优点:大大加快了数据库检索的速度缺点:索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。索引分类直接创建索引:使用sql语句创建,Android中可以在SQLiteOpenHelper的onCreate或是onUpgrade中直接excuSql创建语句create index id_index on
2021-10-28 14:35:11
2505
原创 android NDK Crash
Linux信号机制信号机制是Linux进程间通信的一种重要方式,Linux信号一方面用于正常的进程间通信和同步,另一方面它还负责监控系统异常及中断。当应用程序运行异常时,Linux内核将产生错误信号并通知当前进程。常见崩溃信号列表:信号 描述 SIGSEGV 内存引用无效 SIGBUS 访问内存对象的未定义部分 SIGFPE 算术运算错误,除以零 SIGILL 非法指令,如执行垃圾或特权指令 SIGSYS 糟糕的系统调用 SIG..
2021-10-25 10:46:11
1519
原创 APK瘦身方案
官网方案缩减资源数量和大小1、图片优化1.1使用矢量图矢量图可以创建与分辨率无关的图标和其他可伸缩媒体。使用这些图形可以极大地减少 APK 占用的空间。 矢量图片在 Android 中以 VectorDrawable 对象的形式表示。借助 VectorDrawable 对象,100 字节的文件可以生成与屏幕大小相同的清晰图片。不过,系统渲染每个 VectorDrawable 对象需要花费大量时间,而较大的图片则需要更长的时间才能显示在屏幕上。因此,建议仅在显示小图片时使用这些矢量图..
2021-10-22 18:03:59
172
原创 Android冷启动耗时统计
系统日志统计在 Android 4.4(API 级别 19)及更高版本中,logcat 包含一个输出行,其中包含名为 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms 如果我们使用异步懒加载的方式来提升程序画面的显示速度,这通常会导致的一个问题是,程序画面已经显示,同时 Displayed 日志已..
2021-10-20 11:17:07
1230
原创 Android ANR
1、触发条件出现ANR的一般有以下几种类型:1:KeyDispatchTimeout(常见)input事件在`5S`内没有处理完成发生了ANR。logcat日志关键字:`Input event dispatching timed out`2:BroadcastTimeout前台Broadcast:onReceiver在`10S`内没有处理完成发生ANR。后台Broadcast:onReceiver在`60s`内没有处理完成发生ANR。logcat日志关键字:`Timeou
2021-10-19 17:06:44
662
原创 SOCKS5代理简述
SOCKS作用在会话层上,因此它是一个提供会话层到会话层间安全服务的方案,不受高层应用程序变更的影响。Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求),所以Socks代理服务器比应用层代理服务器要快...
2021-10-13 17:14:40
883
原创 Android换肤实现原理
流程分析1.创建skip.apk,里面只有要修改的资源文件,没有代码2.将skip.apk放在data/data目录下3.通过原apk中的资源id获取到资源的name和type,然后通过mSkinResources.getIdentifier获取到皮肤包中的资源(mSkinResources是skip.apk资源包中获取的Resources,下面会讲怎么获取skip.apk中的资源)/** * 1.通过原始app中的resId(R.color.XX)获取到自己的 名字 *
2021-09-16 20:27:57
204
原创 ServiceManager addService流程
1.zygote启动zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote// system/core/rootdir/init.zygote32.rcservice zygote /system/bin/app_process -Xzygote /system/bin --zygote --startsystem-serverclas...
2021-08-24 18:01:28
3391
原创 binder注册与启动
binder的jni方法注册1.zygote启动1-1.启动zygote进程zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote// system/core/rootdir/init.zygote32.rcservice zygote /system/bin/app_process -Xzygote /system/bin --zygot
2021-08-23 17:30:19
465
原创 Android ServiceManager
1.启动servicemanager进程ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序servicemanager,所对应的源文件是service_manager.c,进程名为servicemanager。system/core/rootdir/init.rc// 602service servicemanager /system/bin/servicemanagerclass coreuser systemgroup...
2021-08-23 15:08:10
1891
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人