自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android格调小窝

干我们这行,啥时候懈怠,就意味着停止,停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

  • 博客(104)
  • 收藏
  • 关注

原创 Android 漏洞修复

由于系统没有限制已注册JAVA类的方法调用,因此未注册的其它任何JAVA类也可以被反射机制调用,这样可能导致被篡改的URL中存在的恶意代码被执行,用户手机被安装木马程序,发送扣费短信,通信录或者短信被窃取,甚至手机被远程控制。在金融类或者通讯类app中可能会导致重要信息被窃取。webviewClient中有onReceivedError方法,当出现证书校验错误时,我们可以在该方法中使用handler.proceed()来忽略证书校验继续加载网页,或者使用默认的handler.cancel()来终端加载。..

2022-08-01 15:55:15 1429 1

原创 Bugly Android 符号表配置 流程和命令行

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示[]对于nativecrash,为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。举一个例子。...

2022-07-15 12:55:17 1383

原创 android中kotlin协程和线程的关系

一.子线程和主线程的频繁切换假设现在有这样的一个业务逻辑,有3个耗时操作,耗时1函数执行完毕后,我们需要调用函数1更新UI,再执行耗时2函数,执行完毕后我们在调用函数2更新UI,最后执行耗时3函数,再调用函数3更新UI。1.定义3个不同的耗时操作函数和3个更新UI的函数 fun ioCode1() { println("我是IO线程1==${Thread.currentThread().name}") } fun ioCode2() { .

2021-05-12 18:49:43 1014

原创 Android将base64编码转化成图片

类似base64流的图片解析并展示:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcH Bw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4.

2021-05-12 18:45:08 1361

原创 RecyclerView嵌套RecyclerView,内层RecyclerView区域无法响应Item点击

问题描述项目中遇到了一个RecyclerView内嵌套RecyclerView,内层RecyclerView的区域无法响应所在Item的点击事件的问题(就是点击外层不能触发所在条目的点击事件)。解决方式(形式不同,原理相同)方式一viewHolder.rv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev.

2021-05-09 11:08:55 1498 1

原创 TCP&UDP测试工具

TCP&UDP测试工具是一款用于软件开发的测试工具,该工具可发送和接收TCP,UDP数据,可以检测网络通讯程序能否正常的运行,TCP&UDP测试工具主要用于在网络通讯程序开发时,测试TCP或UDP通讯连接和测试数据的接收和发送情况。TCP&UDP测试工具通过直观友好的界面实时展示发送和接收的数据。TCPUDP测试工具软件特色1.TCPUDP测试工具可收发TCP/UDP数据。2.对于TCP,支持服务器和客户端模式。3.支持多连接,可同时对多路网络连接进行操作。4.

2021-03-30 13:02:45 4932 2

原创 Glide的优化,开发中使用Glide遇到的问题

Glide加载图片变绿原因,Glide默认加载图片的格式是DecodeFormat.PREFER_RGB_565,缺少ALPHA通道,导致加载图片变绿。解决方案 Glide.setup(new GlideBuilder(context).setDecodeFormat(DecodeFormat.PREFER_ARGB_8888));1Glide在弱网状态下加载大图片,失败几率很大。解决方案,配置自己的网络栈,前提:我用的是Retrofit2,其内部使用的是OkHttp3.配置..

2021-03-10 16:38:28 762

原创 “一篇就够“系列: Handler扩展篇

前言Handler系列文章共两篇:第一篇:"一篇就够"系列: Handler消息机制完全解析第二篇: "一篇就够"系列: Handler扩展篇在上一篇中,我们对Handler的主体部分进行了讲解,今天,我们就来学习一下Handler相关的一些扩展知识,讲完这些扩展知识后,在来回答之前列出来的一系列问题妙用 Looper 机制1、我们可以通过LoopergetMainLooper方法获取主线程Looper,从而可以判断当前线程是否是主线程2、将 Runnable post 到主

2021-02-25 10:36:32 165

原创 Android动画+事件处理详解

动画+事件处理篇前言 动画 1、Android 中的动画有哪几类 2、动画能组合在一起使用么? 3、插值器的种类有哪些? 4.如何自定义插值器 5.如何修改 Activity 进入和退出动画 事件处理 1、Handler 机制 2、onTouch 和 onTouchEvent 有什么区别 3、子线程中能不能 new handler?为什么? 4、子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么? 5、为什么系统

2021-02-25 10:18:36 191

原创 Android数据存储优化

前言年前在公司做了从 SharedPreferences 到 MMKV 的迁移,所以借这次机会和大家讨论一下Android存储优化。我们为什么要去做存储优化?归根到底,还是 SharedPreferences 不太给力:增量更新导致文件写入的时间长。 线程安全问题和潜在的ANR。 不能跨进程,不过跨进程的使用场景还真不多!除了 SharedPreferences,我们还可以选择哪些本地存储方式呢?别说,还挺多,有DataStore、MMKV 和 数据库。一、介绍上面说了四种本地

2021-02-22 11:57:43 382

原创 Android | 他山之石,可以攻玉!一篇文章看懂 v1/v2/v3 签名机制

目录1. 概述1.1 为什么要给应用签名?应用 APK 其实是一种特殊的 Zip 压缩包,无法避免恶意破解者解压 / 反编译修改内容,针对这个问题有何解决方案呢?他山之石,可以攻玉 ——数字签名算法。应用签名正是数字签名算法的应用场景之一,与其他应用场景类似,目的无非是:认证Android 平台上运行的每个应用都必须有开发者的签名。在安装应用时,软件包管理器会验证 APK 是否已经过适当签名,安装程序会拒绝没有获得签名就尝试安装的应用。验证完整性软件包管理器在安装应用前会验证应用

2021-02-22 11:44:13 754

原创 Android | 代码混淆到底做了什么?

前言代码混淆对于每个入门的 Android 工程师来说都不会太陌生,因为在编译正式版本时,这是一个必不可少的过程。而且使用代码混淆也相当简单,简单到只需要配置一句minifyEnabled true。但是你是否理解混淆的原理,如果问你代码混淆到底做了什么,你会怎么说?1. 混淆编译器如果以混淆编译器来划分的话,Android 代码混淆可以分为以下两个时期:ProGuard:一个通用的 Java 字节码优化工具,由比利时团队 GuardSquare 开发 R8:ProGuard 的继承者

2021-02-22 11:00:36 442

原创 时间选择器控件PickerView,实现“年-月-日”切换功能!

引言  通常我们都会在软件中遇到时间选择器功能,选择“年-月-日”,今天就来使用PickerView控件来实现这个功能。国际惯例,先上效果!效果预览用法第一步:添加依赖(app下build.gradle中)//PickerView库implementation 'com.contrarywind:Android-PickerView:4.1.9'第二步:布局文件<androidx.constraintlayout.widget.Constraint...

2021-01-06 10:05:35 410

原创 阴影效果控件ShadowLayout,可实现圆角、阴影、点击水波纹效果

引言  在Android开发中,我们要实现阴影效果,可能大多数人都会想到用CardView,但其实要实现控件的阴影效果我们还有更好的选择——控件ShadowLayout,人如其名,这款控件可以为你的控件:ImageView、TextView,Button等等添加你所想要的阴影效果,除此之外它还有更多其他的功能,赶快学习起来吧!效果预览用法第一步:添加依赖//阴影效果implementation 'com.github.lihangleo2:ShadowLayout:3.1..

2021-01-06 10:04:35 772

原创 Android 在线预览PDF文件

需求: 最近公司要求项目中增加加载PDF文件的功能,直接在github搜索, 找到了合适的第三方框架 :Android PdfViewer:项目地址: https://github.com/barteksc/AndroidPdfViewer功能很强大, 使用也比较广, 亲测可以使用.唯一的缺点 :添加到项目中 会使apk增加16M, 这是最不能接受的, 故弃用.PdfViewPager:项目地址: https://github.com/voghDev/PdfViewPager可加载asse

2020-12-25 15:15:01 670 1

转载 Android UI效果篇-(1)Ripple

内容简介记录5.0以后的Ripple(波纹效果)的使用.1.为什么要使用Ripple 2.如何使用Ripple效果 3.Ripple效果的颜色值改变 4.Ripple的波纹范围改变 5.Ripple添加一个item,其id为@android:id/mask1.为什么要使用Ripple提高用户体验,更好的视觉效果反馈给用户 间接增加了用户在应用停留的时间2.如何使用Ripple效果~在5.0的机型上,button会自带有Ripple点击效果。但是往往开发者需要修改点击效果,从而

2020-12-21 11:33:58 516

原创 是时候让 Android Tools 属性拯救你了

日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整 UI 细节和排版问题。我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如android:text="xxx"和android:src="@drawable/xxx"的方式来测试和预览UI效果?当然你肯定也会遇到这些“脏数据”给你带来的困扰:测试的时候某些地方出现了本不该出现的数据,事后可能一拍脑门才发现,原来是布局中控件预览数据没...

2020-12-15 11:58:51 265

原创 Flutter对原生app接入Flutter进行了优化和升级

概述使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的。因此使用Flutter去统一Android、iOS技术栈,把它作为已有原生App的扩展能力,通过有序推进来提升移动终端的开发效率。目前,想要在已有的原生App里嵌入一些Flutter页面主要有两种方案。一种是将原生工程作为Flutter工程的子工程,由Flutter进行统一管理,这种模式称为统一管理模式。另一种是将Flutter工程作为原生工程的子模块

2020-12-10 10:00:33 752 1

原创 Android图片加载框架Fresco,Glide,Picasso对比分析

背景简介:Picasso是2013年Square发布的图片加载框架,Square公司开源了很多优秀的框架,如:okhttp,retrofit等,正所谓Square出品必属精品;Glide是2014年Google员工提出的,并且在很多Google APP中大量采用,也是Google官方推荐的图片加载框架;Fresco是2015年Facebook开源的图片框架。Picasso 与 Glide对比 相似 Glide 和 Picasso在API的调用上 非常相似,且都支持图片的内存缓存,都是非常优秀.

2020-11-20 17:13:42 785 1

原创 Android最简单的沉浸式状态栏实现,亲测有效

沉浸式状态栏,不用我说,大家都知道。就是让你的应用跟状态栏融为一体,视觉上体验更加完美。Android的沉浸式状态栏实现本来是挺简单的一件事情,但是大家有没有一种感觉,太乱了!本来还有一点思路的,看完网上一大堆的文章以后,更加的懵逼,感觉就是真TM的复杂。今天我就做一个最简单的总结,看完之后大家就知道怎么做了,不用那么复杂。沉浸式状态栏主要分三种版本情况(4.4以下版本不做考虑,保持原状态栏):一、Android 4.4:4.4版本提供了一个透明状态栏(其实也不是全透明的,translu

2020-11-17 15:51:17 1305 1

原创 解决recycleView.addItemDecoration方法随着布局刷新间隔不断增大

记录下错误!!!好记性不如烂笔头!!!每次刷新的时候recyclerview都会重复调用addItemDecoration方法。导致每一次刷新recyclerview的间隔都会增大。解决办法如下,使用ItemDecoration的时候先判空就行了,==0就设置,不为0就不设置/**分割线判空*/if (holder.mRecyclerView.getItemDecorationCount() == 0) { holder.mRecyclerView.addItemDe..

2020-11-17 15:19:04 1242

原创 startActivityForResult使用场景

1. 概述在开发项目过程中,startActivityForResult是最常见的,它的使用场景就是:比如从AActivity跳转到BActivity,然后在BActivity中做一系列操作,然后在BActivity关闭时候需要把一些数据再回传给AActivity,或者当BActivity关闭后,需要让AActivity的界面或者数据发生一些变化,这个时候就需要用到 startActivityForResult。2. 代码如下1>:AActivity代码如下:// 意图实现ac.

2020-11-16 10:20:29 140

原创 不给你的APP加上自动换图标的功能吗?

前言也许你也注意到了,在临近双11之际,手机上电商类APP的应用图标已经悄无声息换成了双11专属图标,比如某宝和某东:8efea43731cdf2579eb4fb031c774737.jpg可能你会说,这有什么奇怪的,应用市场开启自动更新不就可以了么?真的是这样吗?为此,我特意查看了我手机上的某宝APP的当前版本,并对比了历史版本上的图标,发现并不对应。281048112ddef4486bc48c6abac63bb5.jpg41bdaa904abf3655fb8.

2020-11-16 10:18:10 268

原创 SharedPreferences调用导致的ANR分析

ANR文件提取的有用片段如下:----- pid 13431 at 2016-09-14 11:46:10 -----Cmd line: com.android.settingsat java.lang.Object.wait(Native Method)- waiting on <0x41897ec8> (a java.lang.VMThread) held by tid=1 (main)at java.lang.Thread.parkFor(Thread.java:120

2020-10-30 17:41:08 385

原创 SharedPreferences 优化

SharedPreferences 是一种简单便捷的存储方式,在 Android 应用中,常用来存储一些简单配置信息,例如保存应用中的一个开关状态和一些数据的独家属性等.特点用 Map 数据结构来存储数据,以键值(Key-Value)的方式存储,可以简单地读取与写入;数据读取与写入的方法都非常简单。存储路径SharedPreferences 将数据保存到一个 XML 文件中,该文件位于/data/data/PackageName/shares_prefs 下。创建模式Activi

2020-10-30 17:39:06 200

原创 谈谈 SharedPreferences 的优缺点?以及使用

Context.MODE_PRIVATE : 指定该 SharedPreferences 数据只能被本应用程序读、写;Context.MODE_WORLD_READABLE : 指定该 SharedPreferences 数据能被其他应用程序读,但不能写;Context.MODE_WORLD_WRITEABLE : 指定该 SharedPreferences 数据能被其他应用程序读;Context.MODE_APPEND :该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;

2020-10-30 17:37:09 2703

原创 Android 获取手机的厂商、型号、Android系统版本号等工具类

Android 获取手机的厂商、型号、Android系统版本号等工具类1、获取手机制造厂商2、获取手机型号3、获取手机系统当前使用的语言4、获取Android系统版本号5、获取手机IMEI串号6、获取手机中的语言列表/** * 系统工具类 * Created by zhuwentao on 2016-07-18. */ public class SystemUtil { /** * 获取当前手机系统语言。 * * @r

2020-10-26 10:07:14 1650 1

原创 第三方数据库框架 - LitePal简介

1. 简介LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以不用写一行SQL语句就可以完成创建表、增删改查的操作。并且很轻量级,jar包不到100k,几乎零配置。2. 关系映射模型?我们的编程语言使用的是面向对象语言,数据库用的是关系型数据库,将面向对象语言和关系型数据库建立的一种映射关系成为对象关系映射。3. 为什么使用对象关系映射?因为我们都比较擅长面向对象编程,只有很少一部分人精通关系型数据库,绝大多数的人都不太喜欢

2020-10-14 14:10:29 572

原创 Unsupported Modules Detected: Compilation is not supported for following modules

打开AS时出现了Unsupported Modules Detected: Compilation is not supported for following modules: app, KeyboardView. Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project的错误,解决步骤如下:(1)关闭as(2)删除.idea目录(3)删除app/build目录(4)

2020-10-14 14:08:45 784

原创 Android BaseDialog(开发必备)动画、加载进度、阴影

APK使用方法将libray模块复制到项目中,或者直接在build.gradle中依赖:allprojects { repositories { maven { url 'https://jitpack.io' } } }dependencies { compile 'com.github.AnJiaoDe:BaseDialog:V1.1.8' }..

2020-09-14 17:07:17 477

原创 Android Dialog 封装及常用动画

项目开发中我们经常用到 dialog 来弹窗,为了不重复写,封装一个简单的基类 dialog。直接上代码:/** * @desciption: Dialog 基类 */public class BaseDialog extends AppCompatDialog { private static BaseDialog mBaseDialog; private Builder mBuilder; private BaseDialog(Builder build.

2020-09-14 17:05:14 539

原创 Android获取设备的网络状态(包括热点)

下载链接,使用时加入自己的代码调用即可。代码如下:枚举public enum HOTSPOT { // 正在关闭 WIFI_AP_STATE_DISABLING(10), // 已关闭 WIFI_AP_STATE_DISABLED(11), // 正在开启 WIFI_AP_STATE_ENABLING(12), // 已开启 WIFI_AP_STATE_ENABLED(13), //错误状态 WIFI_AP_S.

2020-09-14 17:02:46 935 1

原创 ScrollView与EditText焦点、输入法弹出问题、常用属性随记

1、EditText弹出软键盘遮住输入框问题在Activity中添加配置在该Activity中的onCretae()的setContentView()方法前面添加:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)含义:把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间.解释他们的含义:SOFT_INPUT_ADJUST_NOTHING: 不调整(输入法完全直.

2020-09-14 17:01:38 967

原创 android 分享bitmap到微信

微信分享文档【https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/Android.html】引用:implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'分享代码:val bmp = PublicTools.tools.createBitmapFromView(llPostLay) bmp.

2020-09-14 17:00:26 1265

原创 快速高效 | Android身份证识别

一:简介快捷支付涉及到方方面面,同时安全问题既是用户所关心的,也是制作者不容忽视的重要部分。比如涉及到支付和金钱的app,商户端app等等,都需要进行实名认证,实名认证可以通过银行卡认证和身份证认证。通常办法是通过上传照片,并且手动输入基本信息进行认证,这种方法不仅操作复杂,而且容易出错。网上很多资源,识别率低,速度慢,用户体验很差。今天我就和大家介绍一下我使用的方法,可以快速、高效的识别中国身份证信息。二:原理在拍摄框中右上区域加了一个人像区域提示框,并将该区域设为扫描人脸的区域,只有该

2020-09-14 16:55:53 1478 2

原创 Android:手把手教你构建 全面的WebView 缓存机制 & 资源加载方案

前言由于H5具备 开发周期短、灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案。目录示意图1. Android WebView 存在什么性能问题?Android WebView 里 H5 页面加载速度慢 耗费流..

2020-09-14 16:54:07 372

原创 解决Android中WebView跳转到浏览器的问题

public class MainActivity extends AppCompatActivity { private WebView webView; private String url = "http://www.sina.com.cn"; private String Tag = "MQL"; @Override protected void onCreate(Bundle savedInstanceState) { super.on.

2020-08-20 16:43:24 1273

原创 Android——TabLayout设置选中字体变大,加粗,透明度

TabLayout自带没有设置选中时字体大小的属性,网上搜了好多基本都不生效,搞了一上午终于好使了,记个笔记记录下,布局要自己定义下,要不不好使。布局中使用TabLayout的xml文件<com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="wrap_content" android:layout_height="45dp" .

2020-08-14 10:48:28 9306 1

原创 Android 8.0 以上获取设备序列号, Android 4.4 - Android 9.0 版本中适配获取序列号(SN) 的方法

问题原因今日在 APP 登录中,一直登录不上,提示序列号异常(内部提醒),一直很奇怪,代码几乎没动过任何代码;逛了一圈代码,最后才发现是自己的设备升级到了Android 8.0 (Android O)以上,导致获取不到序列号; 本文章进行总结下从Android 4.4 - Android 9.0版本中适配获取序列号(SN) 的方法因为 APP 会针对序列号进行限制设备使用(方便辨识)代码变更现写法public void setSerialNumber() { ...

2020-08-05 15:09:18 4585 7

原创 androidStudio分包引起的系统崩溃,报错ClassNotFoundException: Didn‘t find class “XXXView“ on path: DexPath../.apk

原先跑得好好的项目,在studio3里面build出来后居然在好几台Android 4.2的机器上运行不了。(Android 5以上的机器就没发现问题。)都是一启动就爆错误:java.lang.RuntimeException: Unable to get provider com.alibaba.sdk.android.feedback.util.FBFileProvider: java.lang.ClassNotFoundException: Didn't find class "com.ali

2020-08-05 09:22:30 684

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除