- 博客(44)
- 收藏
- 关注
原创 Gson解析List数据,小细节大新闻
行吧,接着debug,因为是rxjava+retrofit的框架,请求回来后的操作中发生异常不会崩溃,只能一步步debug,但始终找不到具体崩溃的地方,只能一步步缩小范围,最终发现是在对列表数据做处理的方法中出现了异常,预设的一个List数据是用Gson转化Json而来的,接着会用这个List数据随机取里面的element去进一步处理,这里用到了扩展函数,直接 .random()来随机取数,这里的套娃逻辑debug其实不好定位,直接又套了一层try-catch才抓到,nullexception。
2023-04-23 15:23:21
361
原创 自定义Gradle插件 + ASM实现字节码插桩
1. Gradle自定义插件实现gradle实现自定义插件一般有三种方式: 1. build.gradle中直接编写,项目内使用 2. 创建buildSrc module,项目内使用 3. 创建独立module,可发布远程仓库考虑到灵活性,选择第三种方式实现自定义插件1.1 创建module创建一个新的module,删除不必要的文件,只留下build.gradle, src/main这两个文件和文件夹1.2 创建目录和配置文件1.2.1...
2020-05-27 18:34:34
2394
1
原创 ClassLoader加载类时序图及Qzon修复流程图
很少画UML时序图,有点难顶ClassLoader加载类时序图,parent.loadClass()处为循环,不知道这样画对不对Qzon修复流程图
2020-04-15 15:27:33
384
原创 隐式跳转引发的默认应用选择界面bug(选择要使用的应用)
概况近两日发现APP打开和被人挤下线重新登录时会弹出一个应用选择界面,里面罗列的可选择应用两个都是自己的APP原因排查后发现是隐式跳转引起的问题,之前为了做从浏览器跳转APP的需求,在启动页设置了intent-filter,里面的data只设置了scheme,值为应用英文缩写,而在应用内多处用到了路由跳转页面的功能,也是用的隐式跳转,scheme,host,path都齐全,其中sc...
2020-04-08 14:01:25
569
原创 Android Studio 快速定位错误行
AS快速定位错误行用F2和Shift + F2是很方便的,但之前升级到了AS3.5发现使用F2不会直接跳转到错误行,而是挨个跳转inspection的错误解决方法:左上角 File---->setting---->General,拉到底部,勾选如下图红框处选项,意思是跳转错误行的动作只会跳转高优先级的错误...
2020-03-11 15:04:42
2125
1
原创 APP部分漏洞及解决方法
公司APP在教育移动互联网应用程序备案管理平台上收到通报预警,陈列了部分需要解决的漏洞,陈列如下1.漏洞-动态注册Receiver风险解决方法:1.在 AndroidManifest.xml 文件中静态注册 BroadcastReceiver,同时设置 exported="false"。2.必须动态注册 BroadcastReceiver时,使用registerRecei...
2020-01-07 10:04:26
2043
原创 Android Stuido诡异怠工实录
今天在修改完一段代码后发现编译安装后的app并没有表现出对应的改动,一开始还以为是代码写得有问题,在尝试了多种不同的写法后依旧和原来一样,此时我还只是感觉有些奇怪,一定是哪里出了问题,我开始注释代码,修改跳转的目标Activity,结果一如之前,我接着清除缓存,重启,换手机,还是一样... 我已经有点慌了,十二月的风雪似乎穿透钢筋水泥灌入了我的身体...好吧,有点扯远了,在一番进攻无效下,我求...
2019-12-18 17:53:19
153
原创 Android TV开发---WebView焦点处理
背景开发的Android TV应用时,有一个做题模块用到了WebView做为题目和选项的展示容器问题对于正常的文字内容来说,在相应元素中使用tabindex属性即可实现焦点的简单控制,但是此处展示的题目和选项会涉及到公式,相应位置已用MathJax做了转换,经过转换后用图形化的公式替代了文字符号描述,在焦点控制上就出现了问题,这些公式会获取到焦点,导致遥控器在选项间切换时焦点会跳...
2019-10-12 18:10:59
4626
4
原创 Android TV开发---WIFI设置跳转
采用如下显式跳转会有点小问题,在跳转成功的时候就会回调onActivityResult,在返回的时候不调用,无法准确判断wifi是否已开启Intent intent = new Intent();intent.setClassName("com.android.settings", "com.android.settings.Settings");startActivityForResu...
2019-09-23 18:41:12
1071
原创 一道数学几何题
今天瓜瓜让我做了道数学题,记录一下题目:解答:如上图示,做FM平行于BC交AE于点M,做DN平行于AC交BF于点N,设BC = 6a,AC = 2bD,E为三等分点BD = DE = EC = 2a,BE = 4aF为AC中点,FM平行于BCF为AC中点AF = FC = bDN平行于AC...
2019-09-17 16:21:46
658
原创 Android中利用layer-list和shape制作阴影背景
利用<layer-list >....</layer-list>叠加<item>,控制每一层间距逐渐减小,颜色逐渐减淡,最后呈现扩散模糊效果的阴影<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/...
2019-09-12 17:25:55
347
原创 Kotlin委托之提供委托理解
提供委托通过定义 provideDelegate 操作符,可以扩展创建属性实现所委托对象的逻辑。 如果 by 右侧所使用的对象将 provideDelegate 定义为成员或扩展函数,那么会调用该函数来 创建属性委托实例。provideDelegate 的一个可能的使用场景是在创建属性时(而不仅在其 getter 或 setter 中)检查属性一致性。例如,如果要在绑定之前检查属性名称...
2019-08-25 14:14:03
459
原创 听大佬学习生活分享后的总结感悟
今天听了一位Android大佬的学习生活分享讲座,获益良多,在此提炼总结一下1. 工作与学习1. 工作必须合理安排,需求再评估,进度精细到每天2. 需求填充完成,但必须熟悉业务(流程图)3. 业务架构视具体业务而定,通过写博客记录4. 技术人员熟悉业务是很大的优势5. 紧急,插入需求一定要沟通(运营,产品),安排好与已有需求的先后顺序2. 生活1. 工作...
2019-08-19 00:04:41
3037
原创 日期常用工具类记录
public class DateUtils { //获得当前时间天数 public static int getCurrentDays() { Calendar now = Calendar.getInstance(); int dayOfYear = now.get(Calendar.DAY_OF_YEAR); Log.e("T...
2019-08-02 16:21:43
241
原创 manifestPlaceholders占位符失效
今天打包的时候,运营表示需要一个vivo渠道的包,桌面名称要和其他渠道不同,如果只有这一次需求的话,大可以修改了清单文件中的application的label就行,打完包后再改回原来的,但考虑到目前马甲包的数量以及后续的升级打包,还是决定在gradle中做渠道区分配置,不同渠道使用manifestPlaceholders占位符替换label的字符串引用,形式如下VivoStore { ...
2019-07-22 16:18:17
2625
3
原创 应用内部更新在Android8.0下遇到的问题
首先是前置准备工作,基本和7.0一样,在清单文件中申明 <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}" android:exported="fa...
2019-07-17 16:39:27
307
原创 对AsyncTask源码分析文章的一些补充
最近看了Android 多线程:AsyncTask的原理 及其源码分析这篇文章,对AsyncTask的原理和源码方面的知识有了较为清晰的认识,不过在看文章过程中还是遇到有些部分无法连贯起来,后面自己翻了翻源码,在这里做一个补充先介绍一下AsyncTask创建实例时源码中的一些方法和处理 /** * Creates a new asynchronous task. This c...
2019-06-17 16:14:15
147
原创 Android签名和APK信息相关处理的命令行代码
aapt dump badging hz_example.apk 查看apk包详细信息keytool -v -list -keystore hz_example_mengrammar.jks -storepass 45256845 查看签名文件的信息jarsigner -verbose -keystore hz_example_mengrammar.jks -signedjar...
2019-06-10 15:19:31
210
原创 多fragment切换适配沉浸式状态栏
一个Activity管理多个Fragment,其中三个Fragment状态栏颜色不同,另外一个状态栏透明,顶部图片上顶开始使用修改状态栏颜色的方法时发现一旦显示了状态栏透明的fragment后,切换到其他fragment顶部view都会上移,考虑到透明状态栏设置了systemuivisibility,在切换到其他fragment时进行清除,但引发了其他问题,切换时,整体的界面发生抖动...
2019-05-09 18:31:07
1945
原创 一屏多页viewpager使用PageTransformer时position位置错误
viewpager实现一屏多页需求,可以在xml中设置clipToPadding="false",左右再设置padding即可今天在使用PageTransformer做滑动缩放效果时发现缩放的位置有偏差,正常来说应该在最正中间放大至最大,但我在滑动时发现在偏左的位置才达到最大化,停留在正中间时反而会缩小一些,确认PageTransformer内代码写得没问题,然后去翻源码 i...
2019-03-22 17:33:16
714
原创 为什么你们都能看我的相册? Android权限划分探讨
说是探讨,其实是我来说些突然想到的,不成熟,不一定正确的想法,今天在微博上看了一篇披露京东金融获取用户截图的文章,后面引出了各种APP在Android,IOS上对用户信息的窃取问题,有博主提到“因为发送照片有系统 API 可以调用,就是你打开 Safari 在网站上选择文件弹出的那个框,不需要申请相册权限。Android 中也有一样的东西,应用完全不需要相册权限就可以获得用户选择的照...
2019-02-23 17:23:26
1421
原创 编译签名打包过程三方包依赖冲突
问题描述 最近更新了保利威视的视频播放相关sdk,打包编译的时候发现有jar包重复类冲突,message会有 .....duplicate entry: ../../a/a.class 类似的提示,以前很少碰到这种问题,我的想法是引入的三方依赖中其自身引用的jar包有重复导致冲突发生 解决方法我一开始的解决方法是根据提示,双击shift全局文件搜索,找出重复类所在的jar包如...
2019-02-14 11:35:13
238
原创 Android gradle根据渠道采用不同的图标和应用名
有时候项目在不同渠道下要使用不同的应用图标和应用名,每次手动替换费时费力,可以在gradle中配置,一步到位buildTypes { debug { manifestPlaceholders = [app_name: "@string/app_name", app_icon: "@mipmap/icon_logo"] } ...
2018-11-10 18:17:25
2066
原创 Android 修改包名无法运行activity class does not exist
最近在做马甲包,将原包复制后,在AS中修改了包名,结果运行时提示activity class does not exist,主activity不存在,我看了错误信息,发现主activity路径之前还存在着原包的路径,clean,rebuild都没有效果 后来将gradle中的applicationId config.applicationId删除,默认为清单文件中的package...
2018-10-26 10:23:28
3046
5
原创 java空白注释正则替换
匹配java中多行空白注释: /\*[\s*]*\*/ 匹配java中单行空白注释: //\s \s表示空白符,包括空格、换行、tab缩进等所有的空白/\*匹配开头的/*[\s*]*匹配中间的0个或多个空白符以及多出的*\*/匹配结尾的*/...
2018-09-27 11:23:44
476
原创 git 远程仓库与本地仓库关联
遇到几次这个问题,记录一下流程:1. 新建本地仓库关联 1. 在需要建立本地仓库的位置调出git bash 2. 输入git init,初始化本地仓库 3. 输入git remote add origin 仓库地址, 添加远程仓库 4. 如果远程仓库中有提交历史,输入git pull origin master,将提交历史和文件拉到本地仓库,有冲突解决冲...
2018-08-08 15:33:09
1525
原创 接口设计规范
今天产品经理告诉我说我们的软件被人破解了,我的表情:(´゚Д゚`)(゚Д゚≡゚Д゚),然后就是一番验证,最后得出结论对方反编译后改了一处变量的判断,导致一直为true,这个逻辑涉及到产品购买,非常严重。后台开发说在给接口的时候,无论是否已购买都把关键信息一股脑传给了前端,由前端本地再做判断决定是否展示产品的关键信息,现在想来这个接口设计得十分不规范,在产品未购买前,有关购买后才能显示使用的信息不能...
2018-07-12 16:14:48
1689
原创 Gradle DSL method not found: 'project()'
导入新的Module时出现Gradle DSL method not found: 'project()',检查setting.gradle里include配置是否有问题,有没有把Module正确include遇到这个问题有几次了,记录一下
2018-07-11 23:58:08
959
原创 Android监听网络变化时的bug
最近在做监听网络变化改变视频播放码率的功能,涉及到了Android网络变化监听,我采用了动态广播监听网络变化,在使用过程中发现了一些问题。 1. 当开启VoLTE高清通话时,getAllNetworks()方法中会存在一个ims的network,并且在只开启数据网络的时候,会返回ims和我们正在使用的接入点这2个network,当同时开启wifi和数据网络时,只返回ims和wifi这2个ne...
2018-03-21 17:16:49
556
原创 ListView分割线长度设置及遇到的问题
在设置ListView分割线的时候,我们可以通过android:divider="@drawable/listview_divider"来自定义分割线,listview_divider这个XML我使用的如下的形式实现<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.an...
2018-02-23 16:53:36
393
原创 QQ空间分享图文链接用的图片参数
使用腾讯自己的QQ第三方分享登录SDK,在QQ空间分享图文链接时,用QzoneShare.SHARE_TO_QQ_IMAGE_URL这个参数保存本地图片,用QzoneShare.SHARE_TO_QQ_IMAGE_LOCAL_URL反而出错
2018-02-05 11:34:31
2037
1
原创 个人遇到的自定义dialog中内容无法居中的问题
可能有点标题党了..在做一个横屏avtivity中弹出的自定义dialog时,发现一直无法居中,后来发现有点长的数据被屏幕截断了,想到可能是高度设置有问题,打断点一看果不其然,我把dialog的高度设置为了屏幕的宽度,但其实横屏的时候,屏幕宽度就是竖屏的屏幕高度,无需做转换,直接将dialog的高度设为屏幕的高度即可
2017-11-29 15:01:56
3285
原创 RecyclerView直播聊天界面判断最后一条消息位置
最近在做RecyclerView直播聊天界面,遇到一些问题,记录一下。1. 收到消息后需要将RecyclerView滚动到最后一条,因为我在弹键盘时压缩了RecyclerView的布局,导致调用scrolltoposition()方法的时候,RecyclerView布局未恢复,item出现闪动,可以通过判断键盘收起再滚动条目,也可以监听RecyclerView布局变化来做滚动。2.
2017-10-18 19:23:33
1612
原创 Parcelable序列化时需注意问题
今天在编写关于AIDL的一个demo时发现反序列化后拿到的值与输入的不符,确认AIDL编码过程正确后回到实体类本身,细看下发现write和read的顺序不一致,修改为一致后,反序列化正确执行。切记,Parcelable序列化时write和read实体类属性时顺序要一致!
2017-07-09 19:46:16
811
原创 进入界面弹出键盘问题解决方案
界面有edittext等获取焦点的控件时,往往进入该界面就会弹起键盘,clearfocus方法不成功的情况下,在xml中添加一个 <View android:layout_width="0dp" android:layout_height="0dp" android:focusableInTouchMode="true" />即可解决,强制一个宽高
2017-07-05 18:34:39
624
原创 SearchView搜索框点击事件失效解决方案
SearchView点击事件监听不生效(焦点监听也不生效),网络上的方法是给它的所有子控件添加点击监控,点击事件是生效了,但搜索框无法输入了…经同事指点,使用了setOnQueryTextFocusChangeListener监听搜索输入区域的焦点,成了! 真是个好监听!
2017-07-05 18:30:26
4847
原创 Android Dialog宽高布局机制
manifest里设置主题为android:style.Theme.Dialog样式,会将activity设置为dialog样式,它的宽和高遵循以下原则:匹配宽高有具体数字控件的最大数值,凡是match-parent的以最大数值为界进行缩放,wrap-content的也以最大数值为界,但不进行缩放。如果全部是match-parent或者wrap-content,则根据能动态改变宽高的控件内容宽高来设
2017-07-05 18:26:00
1301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人