
Android Blog
文章平均质量分 72
Android 技术感悟~
dev晴天
接下来需要花一段时间把博客重新整理下,重新巩固下知识点,,,,加油!!!
展开
-
【采坑记录】kotlin compiler embeddable 下载超级慢
今天碰到一个奇怪的问题:在家里用自己的电脑更新下公司的项目,突然发现重新构建工程时一直在跑下载kotlin compiler embeddable 的task,期间打了两把王者农药还没跑完就离谱,于是尝试了如下方案。原创 2023-06-10 01:53:43 · 6361 阅读 · 4 评论 -
Kotlin#object#get踩坑
companion object中定义了两个字段,字段的值是根据Helper.region这个变量的值动态更改的,然而在获取二者字段的值时确是不同的。可见二者的kotlin代码被编译成的java代码是不一样的,因此有无get的区别也就出来了。今天在项目中碰到了kotlin字段赋值的坑,这里简单记录下,也希望对大家也有帮助~简单分析下code值的获取,如上getCurrencyCode的逻辑也是类似了~test生成的java代码code的获取可能是写死的常量?原创 2022-09-19 11:43:36 · 644 阅读 · 0 评论 -
Duplicate value for resource ‘android:attr/background‘ with config ‘DEFAULT‘ and product ‘‘
好吧values.xml是合并后的资源文件,找到自己自定义属性的attr.xml 让二者保持一致就行了~首先看报错信息,background属性重复定义了.原创 2022-09-09 14:58:36 · 2323 阅读 · 0 评论 -
Unknown host ‘dl.google.com‘ You may need to adjust the proxy settings in Gradle的解决方案
一、分析:这个Error的出现是因为你的当前代理不可用了造成的,也就你需要替换可用的代理。二、发生场景:一般公司的代理发生变化时会出现这种情况。当你的本地gradle 缓存的有某些依赖库时你打包\或者编译运行apk时可能不会出问题,只是警告下。当本地无缓存的依赖库,你打包\或者编译运行apk时变会出问题了,xxx依赖下载失败之类的。同时还报Unknown host ‘dl.google.com’ You may need to adjust the proxy settings in Gradl原创 2021-04-16 10:48:36 · 12908 阅读 · 0 评论 -
Can't resolve symbol@xxx:xxx. Validates resource references inside Android XML files 的快速解决方案
有时由于未知原因我们的项目的android manifest 文件中@string/app_name 和@style/AppTheme出现了红色警告,警告提示Can’t resolve symbol @android:xxx或Can’t resolve symbol @style:xxx快速暴力解决清下缓存...原创 2019-03-14 21:38:41 · 1698 阅读 · 0 评论 -
java.lang.reflect.InvocationTargetException (no error message) 的解决方案
背景开发中偶尔会碰到这个问题:Execution failed for task ':app:kaptDebugKotlin'.> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message)很是操蛋,有时自己直接build 文件删除 ,AS原创 2022-01-19 17:31:38 · 12938 阅读 · 0 评论 -
由GlideException: Failed DecodePath{DirectByteBuffer->GifDrawable->Drawable}引起的刨根问底
最近写个demo使用Glide加载图片突然发现图片未加载出来,主要报错:这时感到很奇怪检查下自己的代码,发现图片的url有问题,,,,,这个图片是自己github项目上放的一张图片,可能是受Github#ReadMe的影响,自己平时在Github#ReadMe中插入图片时直接把项目中图片链接以富文本语法插入即可展示图片。因此使用Glide加载这张图片时自己直接就使用了这个链接。说了半天说说为啥报错吧 😄😄😄😄 其实图片url有问题,这个url在服务器上代表的是一个页面资源,而不是一张具体图片资...原创 2022-06-25 19:22:57 · 726 阅读 · 0 评论 -
App is not indexable by Google Search Androidmanifest 的屎黄色警告
对于有代码洁癖的人来说界面出现屎黄色的警告实在不能忍受,于是碰见了就处理下。总结下。警告图警告提示警告释义大概意思:(我们码农有有道词典哈哈)App不能被谷歌搜索索引;考虑添加至少一个带有ACTION-VIEW intent过滤器的活动。有关详细信息,请参见问题说明。添加url使您的应用程序进入谷歌索引,从谷歌搜索获得应用程序的安装和流量。发布id: GoogleAppInd...原创 2019-03-14 21:26:19 · 2189 阅读 · 7 评论 -
学会解决 AAPT2 error: check logs for details类型的错误
写项目碰见一个低级的错误,但是错误让你莫不着头脑,经过一番探讨终于发现。于是放出来分享下。大家都会碰见的错误常规思路还能怎么办?看log。。。。怎么回事,小老弟?找不到具体error,难受啊马飞飞。。。。通过命令行排查终端输入:gradlew compileDebug --stacktrace度娘溜流了一圈没看到啥原因。google瞅瞅发现有文章说ambigu...原创 2019-06-28 20:43:39 · 1911 阅读 · 0 评论 -
安卓开发采坑:INSTALL_FAILED_CONFLICTING_PROVIDER错误
今天安装apk时碰到个INSTALL_FAILED_CONFLICTING_PROVIDER的错误,于是就探索了一番,这里分享一下。1、安装&问题出现C:\Users\ZhouYang>adb install E:\MyProject\MobileMemory\app\build\outputs\apk\debug\app-debug.apkPerforming Streamed Installadb: failed to install E:\MyProject\MobileMe.原创 2020-11-06 20:05:08 · 3251 阅读 · 2 评论 -
Error resolving plugin Plugin request for plugin already on the classpath must not include a version
为了加深印象,了解缘由 决定浅浅探究下~ 归其原因还是对较新版gradle语法不熟悉的缘故。原创 2022-10-17 18:29:38 · 6311 阅读 · 0 评论 -
Android Button#background 在MaterialComponents主题下无效问题
方案很简单,一旦涉及自己的项目那可能有点麻烦,诸如修改为Bridge主题,app的好多UI变动了之类的,我们项目中碰到的是三方aar使用的还是Button,还好aar提供的有源码,我们吧源码给他改了兼容控件解决了(这个bug必须给sdk提,嘿嘿嘿~)Bridge中如何实现Button的主题兼容设置的,沿着这条路可以探索一番~ 看看能否自定义主题来解决这个兼容问题,让Button在我们自定义的主题下也能修改bg。(1)修改主题添加Bridge结尾的主题如下,此时Button#background属性可生效。原创 2022-09-09 17:02:27 · 1270 阅读 · 2 评论 -
Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.8.0-runtime
看了报错信息明白了,这是类冲突了,INotificationSideChannel这个类在androidx.core:core:1.8.0与com.android.support:support-compat:26.1.0这个两个模块中都有。我androidx的项目还引入了support库?还是回顾下冲突的产生吧。还真的有 emmmm,,,,,测试下吧刚添加的依赖移除后这个support库就没了。如何解决这个问题呢?很简单,gradle.properties 添加如下即可。项目中引入了support库?..原创 2022-08-09 18:23:30 · 4093 阅读 · 0 评论 -
Error,java对常量池来说字符串xxx的UTF8表示过长
做项目,客户端这里自己模拟json数据时,一时没忍住搞得json字符串太长了(idea上大概有600多行吧),这个问题就蹦出来了。老方法直接google、百度然后看到一堆有关String 字符串常量池字符最大限制的文章,这些前辈都是从jvm的运行时常量池的常量表占的内存数,从原理上讲解了常量池所能容纳的最大字符数。对于不了解jvm的同学来说,啥无符号数、有符号数、u1、u2之类的看着看着就懵逼了......原创 2019-12-11 17:54:36 · 7925 阅读 · 1 评论 -
安卓9.0 CLEARTEXT communication to www.baidu.com not permitted by network security policy
很久没写网络请求了,最近瞅了瞅kotlin感觉好简洁,于是手痒痒,,,就拿郭神的第一行代码上的天气练练手,搞个kt版本玩玩。可是用kt搞网络请求时就跌进坑了。。。。这里记录下解决方案。1、背景拿百度的网址“http://www.baidu.com”(注意是http这里)来做测试结果错误就来了:CLEARTEXT communication to www.baidu.com not pe...原创 2019-07-16 20:56:27 · 797 阅读 · 0 评论 -
Android target sdk 31升级采坑
最近发布Google 内侧版本app时老是会出现一个警告⚠️ “app的target sdk 版本必须不能低于31(Android 12)” 否则今年12月之后将影响上架。于是趁着空闲便搞下target sdk的升级。期间还是踩了一点小坑的,这里就把我们项目中迁移遇到的记录下,希望大家碰到类似的能够轻松避开~原创 2022-10-13 16:27:06 · 4138 阅读 · 0 评论 -
Navigation#popBackStack收获
从getDestinationCountOnBackStack的方法名以及if语句的判断条件来看当前任务栈中只有一个fragment时才走这里,猜测是结束当前Activity的操作这里不深入探究。看下else内的逻辑,调用了popBackStack()方法,继续深究吧 ->这个方法也很简单,当任务栈不为空时直接调用popBackStack的两个参数重载方法,并且第一个参数我们能够看懂传递的是当前fragment目的地的id。继续深究->妹的不翻译了,解释的够清楚了。原创 2022-12-09 17:09:02 · 1144 阅读 · 0 评论 -
热修复实现原理浅析
一、热修复框架主要有三种核心技术1、代码修复2、资源修复3、动态库连接修复二、各种框架总结对比表开发中可根据自己app项目情况合理选择,并不是谁的功能多选择谁的。比如我们需要bug修改后即时生效可以选择阿里的AndFix。不需要即时生效,又需要更强大的功能时可以选择腾讯的Tinker。三、Instant Runinstant run的出现推动了热修复的发展1、介绍Instant Run 是安卓Studio2.0 新增的一个功能(As3.5+后变成了setting->hot s原创 2021-06-29 17:01:19 · 1448 阅读 · 0 评论 -
Hook 原来是这么回事
一、安卓逆向工程1、逆向工程:直接从成品推导出产品的设计原理。2、逆向工程分类:静态分析:不执行程序情况下对程序进行分析动态分析:程序运行时对程序进行调试分析。Hook技术就属于动态分析。二、Hook1、被hook的对象被称为hook点2、Hook点要稳定、不易变化(如静态变量、单例)3、分类:根据不同的规定可以有不同的划分,这里主要讲java代码Hook 实现原理需要知识点:代理设计模式反射多态的理解(查找方法时,优先查找子类对象方法,找不到时再去查找父类对象中的方法。原创 2021-05-22 18:47:24 · 1090 阅读 · 0 评论 -
手写ImageLoader实战与应用及列表错位、卡顿的优化
我们学习了Bitmap的相关知识点,了解了LruCache、DiskLruCache。结合我们之前所学的知识就可以仿照ImageLoader实现我们自己的ImageLoader了。1、 ImageLoader应该具有的功能图片的同步加载图片的异步加载三级缓存图片压缩2、列表错位的原因(ListView等列表)ListView或者Gridview中,view的复用既是他们的优......原创 2019-04-18 22:01:09 · 310 阅读 · 0 评论 -
综合技术:Crash信息捕获、multidex解决方法越界、动态加载技术、反编译初步
一、Crash信息捕获我们写程序难免遇到Crash状况,如果知道了程序crash的原因就可以修复,但是有时我们发布了产品,产品在极少数机型下可能会发生未知的错误,导致crash这时我们不知道用户到底啥原因引起的,怎能解决?这里我们就总结下如何捕获用户的crash信息1、相关apiUncaughtExceptionHandler 接口我们实现此接口在他的实现方法uncaughtExce......原创 2019-04-19 11:47:04 · 352 阅读 · 0 评论 -
小知识点总结2019-6-7
1 、 radiobutton的属性的回顾1、系统默认的button按钮样式不想使用时可以使用radiobutton的 button属性更改按钮图片,一般我们给他一个selector设置checked与unchecked状态图片2、radiobutton的paddingXXX 设置字体和按钮图片之间的距离2、editText内容位置设置(padding 啊 )editText中gr...原创 2019-06-07 20:49:40 · 241 阅读 · 0 评论 -
小知识点总结2020-4-8
1、onNewIntent(1)触发条件有哪些?1、activity 设置为SingleTop 且位于栈顶:再次开启activity会走 onNewIntent2、activity设置为SingleTask、singleInstance,任务栈中存在实例:再次开启activity会走onNewIntent(2)总结activity位于栈顶且再次开启activity,当复用activ...原创 2020-04-08 20:47:33 · 481 阅读 · 0 评论 -
小知识点总结2019-9-16
1、aar文件的使用(1) 在app的build.gradle中加入以下配置android{......}// 配置下repositories { flatDir { dirs 'libs' }}dependencies {......}(2) 将aar文件拷贝到app/libs目录下(例如test.aar)(3)app的build...原创 2019-09-17 20:42:27 · 1254 阅读 · 2 评论 -
小知识点总结2019-7-1
1、签名文件的gradle配置//1、 android {}闭包下添加 signingConfigs{ // 签名文件 gradle配置 config{ storeFile file('./test') // keystore 文件位置 storePassword '123456' // 密码 ...原创 2019-07-01 19:19:03 · 175 阅读 · 0 评论 -
安卓TV开发《2》开发TV应用
本节将会总结下TV开发中的注意点,如何管理TV控制器,如何构建TV布局、如何创建TV导航。一、处理TV硬件为啥要处理TV硬件呢?因为TV不像其他安卓设备一样支持触摸屏,照相机、GPS之类的。这些硬件功能在TV上统统被阉割,,,,为了能够开发出更好的应用我们还是有必要了解下这些差异,处理下这些硬件。1、检查运行环境安卓的api在TV、Phone等安卓设备上都可以使用的。这时在进行T...原创 2020-04-13 21:05:10 · 965 阅读 · 1 评论 -
安卓TV开发《1》TV入门
前言近期换了一份工作,入职那天一看整个办公室好大气,好多智能电视,估计有50寸,顿时心里明白了我一个安卓开发肯定是要干TV开发了。还好无论TV开发、安卓wear、安卓车载都是和安卓手机开发差不多。于是乎看看官方给的TV开发文档,瞅瞅差异,搞起来。所以,以下有关TV的文档就按照官方文档搞一遍。顺带着自己的一点理解整理下。一、官方文档地址传送门二、安卓TV概览如果您有 Androi...原创 2020-03-25 21:29:15 · 5056 阅读 · 0 评论 -
《Android#View》ConstraintLayout
一、简介ConstraintLayout在2016 年 Google I/O 中面世,它提供了扁平视图层次结构(无嵌套视图组)来创建复杂的大型布局。因此这个控件的出现主要是为了解决开发中复杂页面的嵌套层级问题。与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用(拖拽方式)。从 Android Studio 2.3起,创建layout文件默认为Co原创 2021-11-29 21:43:27 · 266 阅读 · 0 评论 -
滥用Static封装Dialog导致某些情况下Dialog show失败问题
由于静态的字段或方法在内存中只存在一份,所以利用这个特性可以做一些对象内存的优化,典型的就是单例的使用。然而stitic特性虽好,如果对全局的知识点掌握不够充分,还是会出现一些不易发现的bug的。最近使用公司项目中Dialog封装库就采坑了,,,一、Dialog库以及引起的锅1、DialogUtils如下是一个简化版的封装库,但是前同事的这锅已经基本模拟出来了。public class DialogUtils { private static final String TAG = .原创 2020-10-25 17:28:33 · 1269 阅读 · 7 评论 -
Android TV上 WebView播放视屏与TV自带画中画不兼容处理及分析
最近在做TV上的h5与安卓的交互工作,话说Android 原生WebView坑真的多,上次碰到个低版本webview播放视屏时视屏有混音的bug,高版本的webView上无此问题。经过一番调查发现前端代码写的不太兼容,修改webview的框架不太现实,最终在前端的代码上优化掉了这个bug。这次又碰到了画中画相关的bug,究其原因还是webview框架不够完善。还好google在不断迭代者系统webview的版本。但是兼容问题确实不好分析,需要你了解很多知识才能定位。今天就在这里分享下这次的心得!背景图原创 2020-10-17 14:26:52 · 15896 阅读 · 0 评论 -
Android 开发中常用的adb命令
在安卓开发中adb命令还是有些重要的,掌握一些adb命令对我们的开发会提供很大的便利。接下来便结合情景总结下开发中常见的adb命令,,,,,希望对大家有所帮助,也方便自己以后忘记了直接copy,哈哈哈!情景1:截图产品:你截几张xxx功能的图片,我要把做的效果给lead看看。你:小case,稍等一会,mmp,手机的截图功能哪去了?平时用apple,这安卓咋截图?wc,,,搞了半天终于找到了。。。你:咋发送给产品呢?下个微信吧,然后通过微信发送给pc端的自己。最终邮件发送给产品。产品:emmm.原创 2020-08-03 21:23:34 · 1179 阅读 · 0 评论 -
Android 8、Android 9获取手机序列号的兼容写法
随着Android 版本的更新,获取手机序列号的方式也有所不同。最近咋工作中看到了,查阅资料在这里总结下。1、获取序列号public String getSerialNumber() { String serialNumber = "unKnown"; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q...原创 2020-04-09 21:17:46 · 3702 阅读 · 0 评论 -
安卓动态权限详解
随着安卓的不断升级,手机的权限也逐渐被google收回,在6.0时出现了动态权限。知识图由来介绍安卓6.0之前应用的权限在安装时就可以全部授予(清单文件声明的),然而这可能造成店大欺客的情况,用户为了安装app,必须同意所有的权限。在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予。这样就不需要在安装时被强迫同意某些权限...原创 2020-01-06 21:15:04 · 4648 阅读 · 3 评论 -
自定义View:常见抽奖转盘的实现
最近在工作中碰到了抽奖转盘的类似需求,本来打算github找找,结果发现好多都是转盘内容固定,不支持动态改变的,于是就亲自尝试一番,也就当练习了下自定义view。作为应届,知识还是不够丰富的,所以就简单的实现了下。1、效果图由于gif图内存有限制,请观看视屏。传送门2、实现思路其实自定义view的难点一部分在于大量数学计算、一部分在于view的分解、(1)view的分解...原创 2019-10-29 19:01:45 · 1856 阅读 · 0 评论 -
Android性能优化
Android作为移动设备,不管是内存还是cpu性能都受到一定限制。无法向pc那样具有超大的内存和高性能的cpu。意味着Android过多的使用内存会oom,过多的使用cpu资源(一般是大量耗时任务)会造成手机卡顿,甚至ANR。因此Android的性能优化及其重要。性能优化中还有个重要的问题就是内存泄漏,内存泄漏并不会导致程序功能异常,但是他会导致Android程序内存占用过大。这回提高oom...原创 2019-04-21 11:48:08 · 236 阅读 · 0 评论 -
iconify 安卓字体图标的使用详解
图片资源是我们app开发中经常使用的,同时图标我们也经常使用,比如常见的扫码icon,消息icon这都是字体图标。一、为什么要使用字体图标?普通图片:图片大时---->app 变大分辨率变化频繁或者大时---->图片很难高保帧字体图标:属于字体 基于svg 伸缩不失真二、安卓字体图标库github项目地址三 、具体使用1 、gradle依赖添加github...原创 2019-03-18 12:27:41 · 1745 阅读 · 1 评论 -
DexArchiveMergerException
一、前言开发中bug和我们形影不离,没有bug我们怎能成长。这次就分享一下我碰见的DexArchiveMergerException异常以及解决方法。希望对大家有所帮助哈。编译环境:AS 3.2使用sdk :28二、bug出现背景项目中引用字体图标库时: //字体图标库 implementation 'com.joanzapata.iconify:android-ic...原创 2019-03-18 10:30:03 · 1211 阅读 · 0 评论 -
android引导界面倒计时的实现(CountDownTimer)
app 一般都会有倒计时功能,无论是引导页面,还是短信验证码填写。本文便讲解下简单的实现。效果图分析这个小小的倒计时功能也有一些技巧,特别是对于初学者来说可能就是坑,比如你在ui线程进行倒计时10秒。不好意思 app crash,主线程不能进行耗时操作,这时我们又想到了Handler,Timer一些类。实现1自己封装 < . . >既然能写这个界面,那么相信你一...原创 2019-03-15 12:18:41 · 557 阅读 · 0 评论 -
手把手教你ShareSDK在AS上面的一种集成方式
前言:分享功能在app上面也是一个常见的功能,在这方面shareSDK的分享还是不错的,本文便讲解下详细的集成步骤。1 首先进入mob官网:(http://mob.com )进行账号登录(没有账号的可先进行注册再登录)2 appkey的申请:首先点击上图的进入后台入口  会进入下面的页面点击添加应用  创建一个应用(此处我创建了MyDemo1),创建完成后会给你个 ...原创 2019-02-27 11:44:45 · 675 阅读 · 0 评论 -
MAT在Android Studio3.x版本上的使用
MAT 全称 Eclipse Memory Analyzer,他是一款强大的内存泄漏分析工具,mat不需要安装,下载解压就可使用。一、工具的下载网址下载网址二、在AS3.X上的使用我们知道AS3.x上找不到了 DDMS 中的Monitor,因为自Android Studio 3.0开始弃用Android Device Monitor。虽说弃用但是我们还是可以使用。1、命令打开打...原创 2019-04-22 10:59:36 · 1121 阅读 · 0 评论