android 开发
文章平均质量分 56
高钙小新
这个作者很懒,什么都没留下…
展开
-
记录一个 Dialog 只显示透明背景但是弹框不可见的错误
原因:Dialog 创建时 width = 0(具体为什么在部分机型会出现这种情况,大家可以自行百度)现象:自定义的 Dialog,在魅族手机上弹出时,只有一个遮罩层,框不见了。解决:在 Dialog 的 onCreate 方法中重新设置一遍宽高。原创 2022-10-31 16:38:51 · 431 阅读 · 1 评论 -
关于APP 内涉及用户个人敏感信息/权限的进一步整改
前言:有一段时间没更新关于用户隐私相关的内容了。随着去年 11 月《个人信息保护法》的更新,四部委和工信部又下达了一批新的标准,这一篇就是记录一下这半年来项目里关于保护用户隐私部分的优化。一、用户未同意隐私政策之前收集用户敏感信息/权限这个问题是比较普遍的,就是用户安装完 APP 之后,未点同意之前,收集了敏感信息/权限。所以在用户点击同意之前,不可以有任何获取 Android ID、 IP、Mac 、用户账号密码等用户个人隐私信息行为出现,包括动态权限申请。包括在 SDCard 写入数据,原创 2022-04-28 14:00:32 · 8116 阅读 · 5 评论 -
关于 mPaaS PB 接入模式适配 64 位 CPU 架构中项目报错解决方案
解决 mPaaS PB 接入模式在进行 64 位架构适配时的冲突原创 2022-02-11 16:24:52 · 2476 阅读 · 0 评论 -
关于 app 开启 talkback 模式,界面上的数字串无法正确播报数字(播报成了金额)的解决方法
项目场景:根据工信部的要求,APP 需要做适老化改造,让长辈或者视障人士在使用 app 时能更加方便,体验更好,其中一个改造点就是用户开启了手机的 talkback 模式后,app 能否正确播报相关内容,给视障人士/长辈提供正确的反馈和使用引导。问题描述:改造过程中,有这样一个场景,用户开启了 talkback 模式,单击数字串的文本或者输入了数字的输入框,播报的内容不正确。例如:1、输入框,输入了验证码:123456,talkback 播报为:“十二万三千四百五十六”;2、文本框,原创 2021-09-04 17:01:56 · 1213 阅读 · 0 评论 -
基于 mPaaS 框架 Portal-Bundle 接入方式下 Multidex 分包失效的解决方法
mPaaS 最新的基线已经有 aar 接入模式了,这种模式更接近安卓原生的开发,但是有些老的项目还是 PB(portal-bundle) 接入模式,PB 接入模式是不支持 multidex 分包的,如果出现了一个 bundle 中方法数过多报错的话,通常都是一个 bundle 接入太多第三方 sdk 导致的。解决方法:把这些第三方 sdk 抽出来一个新的 bundle(假设为 bundle B),功能集成在 bundle B 的 api moudle 下,A bundle 通过对 B bundle原创 2021-09-04 15:30:34 · 585 阅读 · 0 评论 -
Fildder 和 Charles(花瓶) 实现抓包基本教程及两者差异
都说抓包是安卓开发必备技能,可能是我太菜了,平时开发过程很少用到,之前有一次为了解决一个线上的问题,需要我配合抓包给到其他技术人员分析,就用了一下 Charles,不过上次是在 Mac 上配置的,今天又试了一下 Fildder,就想写一篇记录一下整个环境搭建过程,也稍微对比一下这两个软件使用有什么区别(此次搭建都是在 Window 上,Mac 上使用的过程大同小异)。首先总结一下整体的操作过程:1、安装软件Fildder : https://www.telerik.com/fiddler/fid原创 2021-07-17 17:35:54 · 3637 阅读 · 1 评论 -
实现 APP 全局修改字体大小(适老化/关怀版 改造)
人行发布的要求,移动应用要做好对视障人士和老年人的适配,我们都知道有些做的不是很好的 app ,别说对老年人和视障人士不太友好,对普通人来讲也时常出现不易操作的情况。我们这个年纪的人,父母其实刚好经历了从功能手机到智能手机的时代更替,很多时候父母对手机上的功能是用不明白的,即使教了很多遍他们也不是很懂。像我爸就不会用现在的银行软件转账、存款,每次都需要我帮他操作。所以呀,app 做好对老年人和视障人士的适配改造,是很有必要的。今天先记录改造的第一个功能点,就是 app 内全局的字号更改。微信和支付宝原创 2021-07-03 14:38:54 · 4655 阅读 · 6 评论 -
手贱删除了 mPaaS BP 接入方式 portal 中的 amreabi 文件夹导致安装失败
前几天做死代码的清理,然后发现 portal 中 lib 下的 armeabi 文件夹是空的,就手贱把它删掉了,后续安装也没有发现其他问题。今天做 app 内更新的时候,fa'xian原创 2021-06-17 16:41:36 · 223 阅读 · 0 评论 -
关于代码中调用安装 apk 成功后首次打开 app 闪退的问题
记录一个唤起安装 apk 文件成功后打开 app 首次会闪退的问题。现象:app 内更新版本,下载完 apk 后调起安装,系统安装完成后会自动打开 app ,这时候 app原创 2021-06-15 20:59:41 · 1344 阅读 · 0 评论 -
关于项目中如何删除第三方库、插件所以引用的权限以及蓝牙(非危险权限)的处理
又来了,监管部门安全整改相关的内容。这次整改的内容是 app 中 AndroidManifest.xml 中安卓权限的申请。说说检测机构的判定标准吧,如果在 AndroidManifest.xml 中声明了某个权限,则需要有对应的功能场景,否则就算是过度声明。检测方法呢,就是反编译 apk 包,直接从里面的 Androidmanifest.xml 文件中查看最终的权限申请。之前其实也没有很认真了解过这一块的内容,都是需要用就声明一下。这里整改的项目,由于之前的开发人员使用了很多第三方的S原创 2021-03-31 14:24:30 · 1570 阅读 · 0 评论 -
关于使用 View Binding 不生效的记录
今天犯了个很低级的错误,记录一下使用 View Binding 的过程中,调用 binding 的控件设置文字啊,点击事件什么的都没有生效,很纳闷,后面发现是 setContentView 忘记改了,代码如下:圈起来的这一行,setContentView 需要改成当前的 Activity 的 ViewBinding 的根布局...原创 2021-03-31 10:39:45 · 2690 阅读 · 3 评论 -
关于 APP 内使用 CALL_PHONE 侵犯用户隐私的问题
依旧是关于监管部门对于 app 使用用户信息安全检测的相关内容。这次是关于 APP 声明了 CALL_PHONE 权限,用于 app 跳转系统打电话界面,实现拨号功能。监管部门要求 app 不再声明该权限,因该权限侵犯了用户的个人隐私信息。项目中代码是这样的:Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNum));startActivity(intent);如果使用的是 Intent.ACT原创 2021-03-29 17:53:47 · 2280 阅读 · 0 评论 -
新增 mPaaS 隐私权限弹框引发的一系列问题及解决过程/方法
前情提要:监管部门要求在用户点击隐私协议弹框中“同意”按钮之前,App 不可以调用相关敏感API。即不能获取用户手机 Mac 地址、IP、Android ID 等信息。APP 也因此受到监管部门的通报批评,算是一次紧急的修复上线。项目中使用的是阿里的 mPaaS 的框架,这套框架提供了对应方法来阻断框架的初始化流程,使得用户在点击了隐私政策 “同意” 按钮后才进行框架组件的初始化,获取相关的需要的用户个人信息(mac 地址等)接入方式参考官方文档:https://help.aliyun.com/do原创 2021-02-22 17:38:23 · 1159 阅读 · 0 评论 -
解决 vivo x9 手机无法安装调试 app 的问题 Installation error: INSTALL_PARSE_FAILED_BAD_MANIFEST
今天用测试机连接 usb 使用 eclipse 安装应用报错如下:Installation error: INSTALL_PARSE_FAILED_BAD_MANIFESTPlease check logcat output for more details.Launch canceled记录一下解决方法,在设置-更多设置-恢复出厂设置-清除所有数据中恢复出厂设置,再打开允许安装位置来源程序开关,就可以正常安装调试了。...原创 2020-11-26 14:39:53 · 1019 阅读 · 0 评论 -
关于在 Mac 电脑 Android Studio 切换 Gitlab 账号
在 Android Studio 正确输入一次远程仓库的的账号密码,并勾选 Remember 之后,后面再进行 push 就无需再输入账号密码了。那当我们想要切换 push 的账号的时候,Android Stuido 设置里并没有相应的修改账号密码的地方,本地 Git 配置的也只是本地的用户名和邮箱。查了很久也没有查到在 Mac 上应该怎么切换账号,有些博客说使用命令行 unset 账号,我这里在 Terminal 中试了也没有效果。有些博客说 Windows 电脑是将 Git 账号存在了用原创 2020-10-09 17:36:49 · 2248 阅读 · 0 评论 -
报错 Cannot find a setter for <android.widget.TextView android:text> that accepts parameter type ‘?‘
在使用 dataBinding 的过程中,使用 ObservableList 或者 ObservableMap 类型的变量给 TextView 设置 text 时报错:Cannot find a setter for <android.widget.TextView android:text> that accepts parameter type '?'声明如下图所示:原因是声明 ObservableList 和 ObservableMap 的时候需要指定该 List 或者 M原创 2020-09-09 11:41:12 · 8378 阅读 · 1 评论 -
关于 Android 11 更新内容的小结
看了 GDG 发布的一篇推文之后,就记录一下 Android 11 更新的一些内容,写了个小 demo1、关于 Window Insets 布局的监听器(1)通过 setOnApplyWindowInsetsListener 对屏幕布局(软键盘、状态栏、导航栏)进行监听,对布局进行调整。(2)通过 setWindowInsetsAnimationCallback 监听软键盘触发动画2、关于 ShortCut,可以将 Notification 中的 icon 设置成明显的突出效果。.原创 2020-09-09 11:09:20 · 716 阅读 · 0 评论 -
关于 mPaaS 客户端诊断功能接入过程到功能正常的排查记录
mPaaS 客户端诊断的功能无需另外接入的代码,只要项目中接入了消息推送或者移动同步组件就可以。记录一下在测试客户端诊断功能的时候失败的排查过程。先附上官方文档中客户端诊断异常排查的指导:https://help.aliyun.com/document_detail/58266.html?spm=a2c4g.11186623.2.15.1f2356eeZ288eF我的项目中是采取的消息推送通道接入客户端诊断,所以只要 MPPush 组件正常初始化,并且绑定了 UserId ,就可以开始测试。原创 2020-09-02 22:13:39 · 354 阅读 · 0 评论 -
关于 mPaaS 接入第三方推送(华为+小米)的注意事项总结
记录一次在 app 集成第三方推送的过程,总流程跟着 mPaaS 官方文档和各个推送厂商的官方文档进行就可以,主要记录自己接入的过程中忽略的一些点,导致的开发过程的滞慢。因为 mPaaS 已经集成了自建渠道的推送、华为推送和小米推送(OPPO 和 VIVO 需要另外集成 SDK),所以整个集成的过程还是比较友好的,不过因为第一次集成还是稍微花了一些时间,也有一些比较容易忽略的点,所以做一次完整的记录。不得不吐槽一下国内安卓手机推送的环境对开发者真不友好,为了保证到达率要集成好几家推送,去年看到消息说国内原创 2020-09-02 21:34:23 · 1069 阅读 · 0 评论 -
总结一下关于 Android 10 的适配(备注:只是自己项目中有关联的部分)
分区存储 1、访问特定应用目录//String externalStorageDir = Environment.getExternalStorageDirectory().toString(); //弃用 String externalCacheDir = context.getExternalCacheDir().toString(); String externalFilesDirEmpty = context.getExternalFilesD...原创 2020-07-21 19:55:19 · 450 阅读 · 0 评论 -
APP 应用内更新,下载安装包之后调起安装界面无反应/安装界面闪退返回到了 APP 页面
此项目是基于 mPaaS 框架,更新 APP 的功能最近测试提的一个缺陷,线上的 APP 更新时,点击更新下载完安装包后点击安装无法调起 APP 安装。出现问题的版本: android 10代码排查(PS:因为测试说是在 android 10 才会出现的问题,所以从一开始就朝着 android 10 适配的方向去排查问题)1 “私有目录” 的适配(安卓 10 上对于目录权限的改动大家可以自行百度) 查看安装包下载的目录,发现下载好的新的安装包是存储在报名目录下的 download...原创 2020-07-02 14:22:51 · 3328 阅读 · 2 评论 -
如何用 chrome inspect 调试 Android WebView
今天终于没有偷懒,趁着早起的空隙,记录一下昨天刚刚接触的 chrome inspect。先描述一下问题:app 端打开离线包是正常的,但是从当前页面再操作跳转到下一个页面就会出现白屏的情况。(这下可把我整懵了,满打满算也才做了一年多的安卓开发,没遇到过这种情况呀。幸好技术支持人员给我指了一条路)当我看到他给我发的这一条消息时,我的表情就是绝对的一脸懵逼,inspect 是啥?他在说啥?emmmm,当然还是求助于百度。说正事了:1、chrome inspect 是谷歌浏览器提供给手机(真机原创 2020-06-20 09:17:01 · 4009 阅读 · 1 评论 -
移动开发平台 mPaaS 专题(总结使用该平台过程遇到的问题和解决办法)
接触 mPaaS 开发平台到现在一个月了,小小吐槽一下官方文档对于新手来说不够友善,有些地方的讲述不够详细,不足以让一个完全的新手可以很快地上手。下面是一些使用过程的总结。1、mPaaS 工程跟以前开发的工程最大的区别就是,它把每一个独立的业务都划分成独立的 Bundle 工程,对于大工程的并行开发来说是很不错的,最后再通过 Portal 工程把所有的 bundle 工程打包成 .apk 文件。另外 mPaas 提供了很多常用的开发组件,如热修复、推送、分享等等,也就不用再因为某一些需求去集成很多第原创 2020-06-13 15:58:02 · 7565 阅读 · 9 评论 -
Android elevation 属性使用时应合理使用 padding 和 marging
这是我在开发项目过程遇到的一个问题,首先贴张图,是要实现的效果外面一层添加阴影,里面一层也要添加阴影,由于整个视图要在两边留有边距,所以我很喜欢用 paddHorizontal 属性,而我里面的子布局使用的是 match_parent,然后里层布局的阴影效果一直出不来,试了很多种办法,后面发现是因为使用 paddHorizontal 属性搭配子布局的 match_parent 属性导致阴影距离不够,所以显示不出来(也可以理解为被挡住)解决办法:不使用 paddHorizontal 属性,里层的子原创 2020-05-27 23:07:03 · 490 阅读 · 0 评论 -
android 属性动画-----实现卡牌翻转效果
需求:项目中有一个签到功能,点击签到时签到的卡牌实现 180 度翻转显示已经签到的背面。1、在 res 包下新建 animator 包,新建两个文件,进入动画 anim_in 和 退出动画 anim_outanim_in :<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schema...原创 2020-03-13 10:15:49 · 615 阅读 · 0 评论 -
关于 windowSoftInputMode 中 adjustResize 和 adjustPan 两个属性的理解 以及 输入法(软键盘)出现/收起的监听
记录最近项目中遇到的问题:1、页面布局:类似于登录注册,包含多个 EditText。为了适配屏幕小的手机,最外层套了一个 NestScrollView 用于滑动问题描述:软键盘弹出时会将整个布局往上顶,并且距离输入法会有一大段的空白导致界面很难看想要的效果:软键盘将界面顶起,但是最后一个输入项贴近输入法解决思路:adjustPan 属性适用于底部有按钮,输入法将按钮顶起的情况。...原创 2020-03-13 09:57:51 · 3070 阅读 · 0 评论 -
Android 解压字符串 + Base64解码
记录一下最近项目中用到的关于 字符串压缩解压 和 Base64加密 的相关内容需求是后台 socket 传回来的数据是经过压缩和Base64加密的1、Base64解密(这里介绍三种方式)JDK 中 sun.misc 套件下的BASE64Encoder 和 BASE64Decoder Apache Commons Codec 提供的 Base64的编码与解码功能,用到 org.apa...原创 2020-01-17 17:48:37 · 1356 阅读 · 0 评论 -
微信分享、QQ分享的链接唤醒 APP 并跳转到指定页面
要从网页唤醒 APP ,需要在清单文件中对唤醒的具体 Activity 做配置(一般是主页面),我这里是 MainActivity,如下图所示:port、path属性都不是必须的,注释掉的那一行就是网页端用来唤醒你的 APP 的协议格式。后面 id 和 code 是参数。点击下载后会先检测是否已安装了 APP ,是则直接打开 APP,并根据协议跳转到对应页面。下面是实现的最终效果。...原创 2019-12-18 16:37:16 · 3984 阅读 · 0 评论 -
微信分享点击回到原APP却仍然留在微信的问题
项目集成了微信和QQ分享的功能,我们平时使用时都知道分享完成后可以选择“返回”或者“留在微信”,这里以“墨迹天气”做个例子,如下图所示:我遇到的问题是点击“返回”之后并没有返回到自己项目的 APP ,而是停在了微信界面,要另外再返回一次才会回到自己的 APP。排查之后找到原因是,我从微信开放平台复制的 demo 里,清单文件中对 WXEntryActivity 这个类的配置里有这么一个...原创 2019-12-16 15:29:03 · 2478 阅读 · 0 评论 -
安卓如何查看签名文件的值
1、打开命令行窗口2、进入到签名文件所在的文件夹路径3、命令行:keytool -list -v -keystore 签名文件keytool 是 jdk 自带的工具,可以在 jdk 安装目录的 bin 文件夹找到,然后直接鼠标拖动到命令行窗口,再接着 -list -v keystore android.keystore...原创 2019-11-30 15:42:12 · 247 阅读 · 0 评论 -
Activity 重写进出场动画并在清单文件的 theme 设置后没有生效
重写 Activity 进出场动画,除了需要在清单文件中设置好 theme,还要在 setContentView() 方法前以及 finish() 中设置自己的进出场动画原创 2019-11-22 17:40:45 · 315 阅读 · 0 评论 -
关于 Android View 的 foucusable 和 focusInTouchMode 属性
focusable 属性决定了这个 View 能不能获得焦点focusInTouchMode 决定了在触屏的时候能不能获得焦点我遇到的问题是 EditText 设置了 focusInTouchMode = "false",他的父布局设置了 focusInTouchMode = "true" 后,点击事件失效了(准确的说是要点击两次才会响应)官方文档介绍说,如果一个 View 设置了...原创 2019-11-22 16:48:30 · 754 阅读 · 0 评论 -
关于 TabLayout 使用时遇到的问题(清空、设置标题)
先说一下我遇到的问题,功能为一个地址选择器,因为每一级选择都会去刷新 TabLayout 的数据,演示如视频所示,每次填充新数据 TabLayout 的下标就会跳回第一个再回到最后一个(要实现的效果应该是直接滑动到最后一个)导致问题的原因是我每次选择了一级地址之后,就调用 removeAll() 方法把所有 tab remove 掉了,才导致视觉上会重新回到第一个tab。解决方法是不要...原创 2019-11-22 15:19:58 · 1568 阅读 · 0 评论 -
关于 Kotlin Int 类型装箱要注意的事情
kotlin 中,每定义一个变量,其实 kotlin 就帮我们封装了一个对象,这样可以避免空指针。于是就有了 Int 型比较的两种方式,一种是比较“值”,一种是比较“地址”下面这段代码,会分别输出 true 和 falseval a : Int = 10000val a1 : Int? = aval a2 : Int? = aprint(a1 == a2) // == 为比较...原创 2019-11-15 23:55:07 · 915 阅读 · 0 评论 -
gradlew 不是内部或外部命令 Error while Installing apk Lint 工具给项目瘦身优化
刚刚又结束了一个项目,记录一下自己遇到的问题以及解决方案。项目是一个商城类的原生APP,原型是公司某位已经离职的同事开发的(对的,有时候做“接盘侠”就是会莫名其妙 踩坑)编译时间巨巨巨久,半个钟过去都还在编译....(发现一只停在 javaCompile 这一步{:app:complieJavaWithJavac}),而且一编译cpu就秒上99%,有时编译失败直接 GC(内存溢出),...原创 2019-10-25 15:14:20 · 652 阅读 · 0 评论 -
获取 app 签名的方式汇总
因为要在腾讯开发平台创建一个应用,需要填入 app 的包名以及 32 位的签名,也就是 MD5 的签名,然后莫名就踩了一些坑,记录共勉1、第一种是命令行,进入.android 目录中,输入命令行:keytool.exe -list -keystore debug.keystore我生成的只有 SHA1 和 SHA256 两种,就是没有 MD5 的,我也很纳闷,百度了很久都没有解决,正常...原创 2019-06-15 09:21:55 · 3753 阅读 · 0 评论 -
Android 让一个方法在安装之后只执行一次(用于只需要初始化一次的数据)
最近需要做一个功能:一个个性化添加、删除功能的页面。分为“我的功能”和“全部功能”,因为需要把“全部功能”在本地初始化,并储存是否已经添加到“我的功能”里的状态。所以需要有一个方法,让存储这些信息的数据表在安装app之后只执行一次(以后打开、退出 app 都不再执行)方法:使用 SharePreference 存储一个值,该值为 false 表示未初始化,方法执行,执行完后将该值置为 true...原创 2019-06-20 09:00:23 · 4637 阅读 · 3 评论 -
如何不 new 一个 Adapter 只更新传入 Adapter 的 List
在 Adapter 里定义了接口,并在 Activity 里实现该接口,接口方法更新了传入该 Adapter 的 List,于是在接口实现方法里我 new 了一个新的 Adapter 并把新的 List 作为参数传入,然后刷新适配器报错:日志显示 Adapter 的接口对象为空原因:因为我是 new 了一个新的 Adapter,所以需要重新再初始化一次接口解决:在 Adapter 里定...原创 2019-06-20 09:08:31 · 434 阅读 · 0 评论 -
实现不同 TextView 字数不同、两端对齐的效果
如图,要实现不同的 TextView 不同字数但两端对齐的效果尝试过很多种办法,包括空格、使用占位符、使用圆角状态的输入法,但是都没有达到想要的效果,最后还是采取了比较麻烦一点的办法,自定义一个 TextView,参考了其他博客的做法之后实现了想要的效果1、自定义一个 TextView 继承自 TextView2、在需要使用 TextView 的地方使用自定义的 TextView ...原创 2019-07-09 09:16:33 · 1305 阅读 · 5 评论 -
Fragment 中 onActivityResult() 不回调的解决方法
情况:现在市面的 APP 基本都是 ViewPager + Fragment 来滑动(点击)展示,类似微信与QQ那种。出现的问题:我在 Fragment 中调用系统拍照,但是发现拍照完一直回调不到 onActivityResult 方法中,百度后发现,像这种 Activity 中嵌套 fragment 的情况,若是在 Fragment 中调用 startActivityForResult,只会...原创 2019-07-09 10:09:26 · 1059 阅读 · 0 评论