![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 59
平日Android开发过程中的查缺补漏
kiba_zwei
这个作者很懒,什么都没留下…
展开
-
webview全屏处理,即插即用
去年双十一有个直播的需求,听起来很简单,技术也都很成熟,但是真的开始实现后,还是有不少坑的,首先第一个uc内核不支持webRTC协议,需要重新开发chrome内核的webview,其次webview全屏处理、悬浮窗恢复同步、输入框被被输入法遮盖等问题,都是坑,小子挨个踩过,查阅很多前辈资料,把能够即插即用的部分整理出来,以资来者。原创 2024-01-13 10:50:51 · 674 阅读 · 0 评论 -
沉浸式webview输入框被输入法遮挡了怎么办?!
还是那个倒霉的双十一需求,测试时发现发弹幕的输入框被系统输入法挡住了,这个问题在之前UC内核的浏览器时没问题啊。经过各种对比定位,发现是因为这次需求还有个沉浸式的实现,就是这个实现导致输入框无法被弹起。所幸看到了这篇blog,试验后效果拔群,唯独有个小遗憾是没有适配非沉浸式的状态,沉浸式和非沉浸式切换时会有个小黑条。小子不才遂在大神肩膀上狗尾续貂,以资来者。原创 2024-01-14 12:30:00 · 730 阅读 · 0 评论 -
WebView自定义进度条、加载动画,拿走直接用~
年前有个小需求,要对有些域名的H5进行加载流程优化,通过展示H5加载动画来安抚用户焦躁的心情,以提高用户体验。虽然不能理解加个动画咋就优化了用户体验,但需求还是得做的。想着这是个基础的小功能,独立性比较好,遂记录下来,以资来者。原创 2023-02-09 19:50:00 · 1673 阅读 · 0 评论 -
微信平台注册APP签名获取方法
但是,这个地址居然是空(写博客时又查了一下微信官方地址,又给补上了。),在C站四处找了半天总算找到了安装包,安装,打开。为了证明我说的是对的,我把老的资源放上来。其中在微信平台注册时遇到提供APP签名的问题,我哐哐哐把apk一顿解压,后查看签名文件,讲sha1和sha256两种签名都放上去了,全都提示长度错误。没办法,又换了个Android8.1的设备,跑起了APP后输入包名,点击获取签名,总算完成了。事情是这样的,APP需要和微信做一些交互,涉及到集成微信SDK并完成注册,具体集成方法请见。...原创 2022-08-26 06:30:00 · 220 阅读 · 0 评论 -
查看APP签名的方法
查看APP签名的方法原创 2022-08-22 22:12:44 · 679 阅读 · 0 评论 -
Androidx回退Android-Support库踩到的坑
由于一些很坑的原因,导致提供的aar需要从androidx框架回退到旧的support库,通过androidx关键字删除了代码中所有的依赖后,编译还是报了错误,显示还有依赖androidx的地方。分析上面的输出,发现工程依赖的三方库里存在androidx的依赖。以后只支持Jetpack。重新编译,问题解决!...原创 2022-07-21 06:30:00 · 2637 阅读 · 0 评论 -
APK解压后AndroidManifest无法正常显示处理方法
最近想要验证一下aar中声明的权限会不会被打包到apk的AndroidManifest中去,所以把编译出的apk进行了解压。解压命令:很顺利,在解压缩的目录下看到了文件,可是打开后看到的时一片编码数字,并不能看到想要看到的东西。查找解答发现需要将xml进行转码后才可以正常查看,遂下载进行处理。然后执行命令即可看到正常的xml文件了。转码命令:最后,开头的问题经过验证,发现aar中的会被合并到APK的中,这块多模块集成时一定要注意,避免引入无关的权限,影响应用上架扫描。...原创 2022-06-22 07:30:00 · 1043 阅读 · 1 评论 -
Android动态权限框架-AndroidUtilCode使用方法
所提供的动态权限框架是我见过的最为省事的框架。没有了宿主页的限制,可以在任何地方进行动态申请。极大地解决了为H5封装接口或者封装能力类时的尴尬境地。其用法极其简单,分为如下三步。...原创 2022-06-05 22:00:00 · 1179 阅读 · 0 评论 -
Android动态权限框架-EasyPermission使用方法
Android自6.0以后加大了敏感权限的管控力度,在使用过程中动态请求权限变得不可或缺。其原生实现虽然不难,但是也略为繁琐,想了解详情的同学可以移步《Android原生动态权限申请方法》,故业内大神帮大家封装了各种动态权限框架。就是其中之一。...原创 2022-06-05 19:00:00 · 1154 阅读 · 0 评论 -
Android自定义弹窗
每个APP都有自己的UI风格,不可能简单地使用Google自带的弹窗模板。所以是时候搞一套我们自己的弹窗范例代码了。按照下列代码只需要再根据APP的主题风格重新绘制一波弹窗布局,就可以无脑迁移了,这种轮子没必要一遍一遍的重造,记录下来以资来者。...原创 2022-06-05 08:30:00 · 4090 阅读 · 0 评论 -
筛选应用中所有JsApi接口
接手或者重构一个Android工程,或多或少都会遇到接口迁移。一边删掉、一边添加,一个人开发还好,多个人协同开发时则极大可能造成接口丢失。所以我们需要一个检查的抓手,改前改后对一下,基本接口别丢失,用下面的管道命令可以简单的筛出需要迁移的所有接口。迁移完后,跑一把,省的提心吊胆。grep -A1 "@JavascriptInterface" Interface.java|grep "public"|sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g' > old.tx原创 2021-12-06 21:32:38 · 293 阅读 · 0 评论 -
生成指定大小的String字符串
想要测试Binder同进程内是否有对象大小限制,记录下来,以资来者。// 10MB createSpecifiedSizeData(10*1024*1024)private static String createSpecifiedSizeData(int size) { StringBuilder sb = new StringBuilder(size); for (int i = 0; i < size; i++) { sb.append('0'); }原创 2021-09-14 22:02:54 · 728 阅读 · 0 评论 -
Android 通话功能实现
需求原因,需要在APP中加一个通话功能。想着功能应该不难,遂网上随便抄了一份,打算交作业,但居然还crash了。没办法,去官网查阅资料。其中细节还是有必要记录下来,以资来者。非敏感使用近期APP应用用户隐私保护的管理力度日益增长,所以尽可能少在AndroidManifest.xml权限吧,少一些解释麻烦,所以可以采用Google提供的跳转到Android系统指定的通话的拨号盘方式处理。顺带将号码传递过去,用户需要在通话APP上点击拨号按钮以完成通话任务。这种方式的好处在于显式跳转了系统APP,通话行为要原创 2022-05-29 11:15:05 · 533 阅读 · 2 评论 -
Android Studio中的常用提高效率的重构小工具介绍
还是因为工作原因,遇到了一个刚入门的小盆友。昨天下午我看着他对着工程吭哧吭哧折腾了好久,好奇过去看看,原来是他写的一个方法把feature写成了fature,还在整个项目各个位置调用方法,由于偷懒,该方法涉及的成员变量、局部变量也都Ctrl-C,Crtl-V成了fature,所以他不亦乐乎的自己玩了一下午。虽然疫情导致大家需求都不紧了,能够找点事儿填补一下时间也挺好的,但是有这功夫,刷个leetcode不好么。遂给他演示了几个AS常用的重构工具。改名首先是最常用的功能——改名。使用方法是将光标放置在原创 2022-05-28 06:30:00 · 582 阅读 · 0 评论 -
Android Studio 工程导入方法及填坑方案
由于工作原因,需要将工程传递给一些新人小朋友,交互过程中,发现有几个典型的问题值得记录分享一下,以资来者。Androdi Studio 导入工程步骤AS导入工程常用的有两种途径一种是通过本地工程导入,还有一种是从远端的版本管理仓拉取工程。本地工程导入本地工程导入比较简单,点击菜单File,然后找到Open...点击,便可以得到下图。![在这里插入图片描述](https://img-在目录栏目输入你本地工程所在地址,便可以看到你的本地工程名,而且还是一个Android机器人的图标,选中后点击OK原创 2022-05-24 22:16:38 · 4732 阅读 · 0 评论 -
Android Sqlite基本使用方法
通网这么多年了,真是不知道在终端设备留个本地数据库的应用场景还有没有存在的价值,但是居然在本周遇到了一个。很神奇,遂简单学习了一下基本用法,记录下来以资来者。SQLiteOpenHelperAndroid提供了一个很好用的封装类供大家进行sqlite数据库操作。所以Android操作Sqlite数据库的第一步就是创建一个DBHelper继承SQLiteOpenHelper。然后实现其中两个抽象方法onCreate与onUpgrade。最后通过DBHelper#getWritableDatabase来对数原创 2022-05-22 22:30:00 · 438 阅读 · 2 评论 -
TabLayout+Fragment+ViewPager实现Tab页面效果
日常开发小功能时常会用到tab页的切换用法。每次都去翻看之前写的代码,再从业务中剥离出来,太麻烦了。遂将自己之前常用的方式抽象出来,便于下次直接复制取用。基本目录结构─main ├─java │ └─com │ └─example │ └─scoremanager │ │ MainActivity.java │ │ Fragment1.java │ │ Fragm原创 2022-05-22 21:15:00 · 350 阅读 · 1 评论 -
Android日历操作
最近接到一个需求,要为用户增加一些日历提示信息。感觉不是很难的一个需求,也折腾了一天,记录一些关键步骤,以资来者。申请日历权限APP想要操作用户的日历,需要有读写日历的权限:android.permission.READ_CALENDAR,android.permission.WRITE_CALENDAR。上述权限读取和写入可以分别申请,即如果需求只是写入日历提醒功能,则不需要申请READ_CALENDAR权限。此外,由于此权限是高危权限,需要进行动态申请,具体申请方式可以参见Android原生动态权限原创 2022-05-15 22:03:39 · 3507 阅读 · 3 评论 -
Android原生动态权限申请方法
Android系统在6.0以后加强了对应用权限的管控,不能再像以前一样随意通过静态声明而获取终端高危权限了;在18年前后的Android 10更是用户隐私信息保护加码,彻底绝断了一波用户核心敏感信息的获取途径。随着行业对用户隐私的关注越来越强,如何写好权限申请交互也变得十分重要。原创 2022-05-15 18:01:52 · 1109 阅读 · 1 评论 -
Android 设备标识获取方案
在APP开发过程中,不可避免的将遇到如何唯一标识一个设备或者用户的问题。此前一直使用TelephonyManager#getDeivceId接口获取,后来又给禁止了,为了解决这个问题,特意查阅了一些资料,想找一个替代方案。IMEIIMEI(International Mobile Equipment Identity number),国际移动设备识别码,与卡槽绑定,双卡设备会有两个,Android 10.0以后Google禁止APP获取该属性。MEIDMEID(Mobile Equipment Id原创 2022-03-30 22:23:35 · 3336 阅读 · 0 评论 -
Android 自定义Dialog位置设置
自定义弹窗实现,能够挪动的弹窗!原创 2022-03-24 08:30:00 · 3093 阅读 · 0 评论 -
调试时使用源码,编译时使用SDK配置方法
问题背景项目工程引用了一个需要自己维护的SDK,由于集成形式原因,开发SDK中需求时,验证需要重新打包给主工程,且在调试时无法打断点到SDK代码中。为了解决上述痛点,我们采用在调试时使用源码编译,发版时使用SDK编译的配置方法。技术路线两个git分别管理,仅通过修改配置完成切换submoudle将SDK的git集成在主工程中,为了方便可以新增一个buildType,需要调测相关需求时使用新的编译选项,这种方案修改内容较多,而且需要更改git管理范围,有些不友好,推荐方案一方案一:切换配置方案原创 2021-12-21 08:15:00 · 283 阅读 · 0 评论 -
TextView中部分文字样式修改
应用开发中会遇到显示大量文本话术,如隐私政策,里面可能要嵌入链接、加粗字体等,如果使用多个TextView进行排版,很难看而且代码会变得扩展性很弱。查了一些资料发现Android.text包中提供了Spannable等一系列操作局部样式的属性和方法,可以供大家使用,记录一下自己用过的以资来者。局部加粗Span一词的中文含义是跨度的意思,顾名思义,首先要获取所要处理的部分字符串的收尾游标。然后配置相应的处理方式SpannableStringBuilder builder = new Spannab原创 2021-11-26 22:09:20 · 1639 阅读 · 0 评论 -
测试包无法在其他设备上安装,报错installPackageLI
今天给测试提供demo被质疑了,测试反馈apk无法安装。我又在本地试了一下,demo可以直接编译安装到测试机,没问题,重新发包依旧被反馈无法安装。思考了一下差异是我是编译安装,测试是adb命令安装。于是我复现了一下问题场景,发现报这个错误:INSTALL_FAILED_TEST_ONLY: installPackageLI这个问题是因为这个工程配置了testOnly为true,但是后来我发现即使配置成false也装不上。不知道为啥。两个处理方法:使用-t命令adb install -t原创 2021-11-19 08:30:00 · 1161 阅读 · 0 评论 -
Android 同一行两个控件两端对齐
需求需要我们实现一个价格列表,其中要求名称项左对齐,价格项右对齐。查了一会儿才知道咋解决该问题,记录下来,以资来者。示例代码<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView andr原创 2021-10-19 13:30:05 · 1319 阅读 · 0 评论 -
SDK编译后指定包体名称(时间、类型、版本号)
开发一个新的SDK,需要根据打包事件、打包类型和版本号对报名进行自动化命名,记录一下,以资来者。android { // SDK输出固定格式的文件 libraryVariants.all { variant -> variant.outputs.all { outputFileName = "DevelopLab_${releaseTime()}_${variant.buildType.name}_${getVersion()}.aar"原创 2021-09-14 21:59:29 · 249 阅读 · 0 评论 -
android.app.RemoteServiceException can‘t deliver broadcast 异常定位&解决方案
【问题】发现app出现crash,具体看到堆栈:android.app.RemoteServiceException: can't deliver broadcast at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2047) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:2原创 2021-09-14 21:56:58 · 7438 阅读 · 0 评论 -
PermisssionDispatcher 在MIUI 11 上的坑&解决方案
被小米9的权限弹窗折磨了1天多,总算找到了解决方案,记录下来,以资来者问题是这样的,由于现在对于个人隐私信息越发的关注,有很多应用市场要求APP在动态请求高危权限时,需要先弹出说明框向用户说明。乍一看这个问题不难哈。哐哐哐,引入PermissionDispatcher框架,再封装一个弹窗逻辑,这事儿就完了。很好,当我搞定这些后,在我的小米10青春版(MIUI12)上测了下,完美解决应用市场的权限合规问题。然而,在小米9(MIUI11)上测试时,却发现在我动态请求权限前,会先弹出一个代倒计时的系统权限原创 2021-09-05 21:20:12 · 570 阅读 · 0 评论 -
PermissionsDispatcher用法及多权限同时请求的处理方案
PermissionsDispatcher是一个针对Android运行时权限管理的开源库,目前已经在GitHub上收获了10.7k科star,被广泛应用于Android项目中,还是很有学习的价值的。源码中的README已经写的很详尽了,本文仅作摘抄。此外,由于该库未提供多个权限连续申请场景,故本文重点补充此处。Github源码:https://github.com/permissions-dispatcher/PermissionsDispatcher配置依赖dependencies { /原创 2021-07-28 22:41:59 · 1955 阅读 · 0 评论 -
使用Android Studio prefiler 测试应用启动时间
Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。1、配置工程profiler参数依次选择 Run > Edit Configurations,按照如下配置2、运行测试工程依次选择 Run > Profile… ,运行测试工程3、查看数据可以在Android Studio的底部tab中查看数原创 2021-07-25 18:38:24 · 1584 阅读 · 1 评论 -
【APP引流方案总结】鸿蒙应用跳转Android应用,没安装则跳转到应用市场
鸿蒙系统作为国内自研操作系统,一经发布风头无两。虽然目前鸿蒙应用迁移还存在诸多三方生态难题,但幸运的是鸿蒙系统目前还支持Android应用,就是说可以通过一个鸿蒙应用跳转到Android应用,这也是一种给APP引流的新渠道。方案一:鸿蒙原生跳转通过鸿蒙的startAbility跳转,但是,目前暴露出来的action没有能够对应到android中Intent.ACTION_VIEW的,遂放弃,待鸿蒙后续开放接口。方案二:鸿蒙集成android-jar跳转用Android写跳转逻辑,然后打包成jar,由原创 2021-07-10 10:46:05 · 1667 阅读 · 0 评论 -
Android唤起微信并进入指定小程序页面
全是从微信官网copy来的,自己重新敲一遍,增加点印象。添加依赖dependencies { api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'}跳转代码String appId = "wxd930ea5d5a258f4f"; // 填移动应用(App)的 AppId,非小程序的 AppIDIWXAPI api = WXAPIFactory.createWXAPI(context, appId);WXLaunc原创 2021-07-10 10:28:52 · 2140 阅读 · 2 评论 -
Android APP启动时间测试
最近被分配了一个APP启动优化的工作,但是优化的工作没有量化指标就很难给领导交代,第一时间我就想到了APP启动时间,优化前后一相减,效果立现。测速命令adb shell am start -W packageName/activityName执行后出现回显Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=packageName/activityName }St原创 2021-07-10 10:20:35 · 2341 阅读 · 8 评论 -
Handler从入门到继续
Handler从入门到继续Android异步消息机制——HandlerHandler机制的流程Handler机制的基本用法创建一个Handler实例向子线程传入handler在需要的时候从子线程中回传一个消息结语Android异步消息机制——HandlerAndroid的Handler机制是一种线程间通信机制,可以避免耗时操作在主线程中进行致使Activity超时而被关闭的问题。刚开始看这个...原创 2019-01-12 14:53:48 · 137 阅读 · 0 评论