Android
文章平均质量分 68
半身风雪
九年码农,移动全栈领域优质创作者,华为云专家,阿里云专家博主,51CTO专家博主。立志打造一条架构路的博主
展开
-
Android studio 如何生成 keyStore 查看 SHA1 和 SHA256
自己老是忘,简单的记录一下。原创 2023-03-16 17:29:49 · 2884 阅读 · 2 评论 -
DSL element ‘useProguard‘ is obsolete and will be removed soon. Use ‘android.enableR8‘ in gradle.pro
DSL element 'useProguard' is obsolete and will be removed soon. Use 'android.enableR8' in gradle.properties to switch between R8 and Proguard..Affected Modules: app原创 2022-12-28 17:59:14 · 1800 阅读 · 2 评论 -
【Android 四大组件之Content Provider】一文吃透 BroadcastReceiver 广播接收器
BroadcastReceiver 是安卓系统中四大组件之一,在Android开发中,BroadcastReceiver的应用场景非常多,Android 广播分为两个角色:广播发送者、广播接收者。广播接收器用于响应来自其他应用程序或者系统的广播消息。Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。模型中有3个角色:消息订阅者(广播接收者)消息发布者(广播发布者)消息中心(AMS,即Activity Manager Service)广播接收器需要实现为BroadcastRec原创 2022-06-28 16:46:44 · 2185 阅读 · 25 评论 -
【Android 四大组件之Content Provider】一文吃透Content Provider 内容提供者
Content Provider 是安卓系统中四大组件之一,被称为内容提供者,内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。有时候需要在应用程序之间共享数据,就一定要借助ContentResolver类,通过getContent -Resolver获取实例,在ContentResolver中提供了一系CRUD(增删改查)的方法进行操作其中。多数情况下数原创 2022-06-28 14:04:36 · 2880 阅读 · 5 评论 -
java 注解反射 项目实战
实战需求通过自定义注解与反射实现页面跳转的参数注入:1. 页面跳转携带参数2. 使用注解标记属性参数3. 通过反射读取打印数据原创 2022-08-16 14:13:06 · 1521 阅读 · 29 评论 -
【Android 四大组件之Service】一文吃透Service 服务
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。Service 有的启动方式有两种:这里需要先实现onBind方法, 是Service必须实现的方法,返回的IBinder对象相当于Service组件的代理对象,Service允许其他程序组件通过IBinder对象来访问Service内部数据,这样即可实现其他程序组件与Service之间的通信。显式启动通过类名称来启动,需要在Intent中指明Service所在的类,并调用startSe原创 2022-06-28 06:00:00 · 608 阅读 · 12 评论 -
【Android 四大组件之Activity】一文吃透Activity 生命周期
Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。我们新建一个项目,创建两个Activity ,并在AndroidManifest.xml 中注册:注意红框中的代码,原创 2022-06-27 14:52:07 · 1013 阅读 · 7 评论 -
Android 中的hook技术是什么
Android 的hook 是Android 在开发过程中会存在的两种模式,一种是native 模式,另一种是java 模式,所以我们也可以理解成,Android 平台上的hook 分为两种,一种是java 层级的hook,一种是native 层级的hook,两种模式下,通常都是通过使用JNI 机制来进行调用。对于大多数开发者而言,能够在java 曾经完成的事,基本上也不会在native 层去完成。原创 2022-11-17 16:52:19 · 4103 阅读 · 4 评论 -
Android AAB 包重签方法
当您请求公开分发新的品牌 Android 应用程序时,生成的 AAB 会使用唯一的 KeyStore 进行自动签名。如果您希望使用自己的 KeyStore 重新签署 AAB / AppBundle,您需要按照以下步骤操作。release-key.keystore :密钥库文件位置的完整路径,用于为 AAB 重新。alias_name :使用 Keystore 时进行签名时要引用的别名。release-key.keystore :密钥库文件的名称。如果签名正确,它应该打印证书信息。原创 2022-11-02 09:23:34 · 3172 阅读 · 0 评论 -
安卓 apk 包重新签名解决方案
3、使用jarsigner对步骤2当中重新打包的apk进行签名,命令如下:jarsigner -verbose -keystore debug.keystore -sigfile cert -storepass android -signedjar test_signed.apk -sigalg SHA256withRSA test-new.apk androiddebugkey。-digestalg 指定签名算法,如果指定SHA1则使用SHA1签名,如果不指定,则使用SHA256。原创 2022-10-29 03:21:06 · 4529 阅读 · 1 评论 -
源码解析 Handler 面试宝典
在Android 的中,高级面试中,我们经常会被问到Handler 相关的知识点,而且占重比例还比较大,这是什么呢?下面一起来看一张图:由上图我们可以看出,整个APP 的启动流程: ActivityThread.main() 就是我们APP 独有的main 启动方法,如图所示,绿色的部分,就是Handler 为我们开辟的独有空间,启动主线程独有的,将当前App 独立出来。由此我们可以得出一个结论:Handler 并不是只属于进程通讯,进程通讯只是Handler 的附属功能,而Handler 的真正功能是原创 2022-05-18 18:14:55 · 4294 阅读 · 83 评论 -
jetpack Navigation 源码原理解析
Navigation 是一个框架,用于在 Android 应用中的“目标”之间导航,该框架提供一致的 API,无论目标是作为 Fragment、Activity 还是其他组件实现。Navigation是管理Fragment之间导航的组件库,特别在实现单个Activity多个Fragment的管理模式更加灵活图解:2 NavHostFragment.onInflate3 NavHostFragment.onCreateNavController4 NavHostFragment.onCreat原创 2022-05-01 23:32:15 · 949 阅读 · 25 评论 -
Dagger2 到底能为我们做些什么?(大厂都在用的秘密?)
在文章开始之前,我们先来了解一下什么是Dagger2大厂 公司用的非常多是原来由程序代码中主动获取的资源,转变由第三方获取并使原来的代码被动接收的方式,以达到解耦的效果,称为控制反转。这里来张图哈,说白了,IOC 就相当于一个保姆,你想要干哈,直接告诉保姆呗下面我们看张生活中的图:👓👓👓很简单的一张图呢,我们买了商品,商品经过打包,快递员拿到包裹,直接送到你的手上。 整个流程是不是清晰了很多呢?㊀㊁㊂㊃总结看了上面的代码,有没有发现,代码简单了很多呢?我们告别了传统 的代码,大大的降低原创 2022-04-27 14:45:38 · 1649 阅读 · 19 评论 -
Android 自定义UI 实战 03 RecyclerView 吸顶 仿微信好友列表
Android 自定义UI 实战 03 RecyclerView 吸顶 列表实现文章目录Android 自定义UI 实战 03 RecyclerView 吸顶 列表实现前言一、吸顶效果准备工作1、创建item,和item 实现2、创建一个 Star3、创建一个 StarAdapter4、Activity 完整代码二、吸顶功能实现1、自定义 ItemDecoration2、StarDecoration 初始化3、重写 getItemOffsets() 方法4、绘制头部预留空间5、重写 onDraw() 绘制原创 2022-04-26 13:37:59 · 2180 阅读 · 4 评论 -
Android 自定义UI 实战 02 流式布局
Android 自定义UI 实战 02 流式布局-- 自定义ViewGroup第二章 自定义ViewGroup 流式布局文章目录Android 自定义UI 实战 02 流式布局-- 自定义ViewGroup前言1、自定义控件,并在XML 使用2、初始化存储3、测量4、布局处理5、效果图总结前言使用纯代码 加 注释的方式,可以更快的理解源码如果你喜欢,请点个赞,后期会不断的深入讲解1、自定义控件,并在XML 使用自定一个Layout 继承 ViewGrouppublic class F原创 2022-04-22 15:56:12 · 1915 阅读 · 4 评论 -
Android 自定义UI 实战 01 文字变色
Android 自定义 UI 实战文章目录Android 自定义 UI 实战前言一、自定义UI 文字变色1、自定义文本属性2、创建组件3、在 xml 中使用组件3、测量4、绘制5、初步绘制效果前言使用纯代码 加 注释的方式,可以更快的理解源码如果你喜欢,请点个赞,后期会不断的深入讲解一、自定义UI 文字变色使用自定义UI 完成 歌词文字颜色加载效果1、自定义文本属性在项目attrs.xml 文件中 res -> values -> attrs.xml,自定义文本属性,没有这原创 2022-04-22 13:50:59 · 1818 阅读 · 1 评论 -
注解反射&动态代理的封装
注解反射&动态代理的封装1、自定义注解&动态代理的简单实现2、代理优化封装1、自定义注解&动态代理的简单实现需求场景:通过自定义注解方式,实现按钮的点击效果,和长按效果我们先写两个按钮<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc原创 2022-04-12 17:49:47 · 306 阅读 · 0 评论 -
HashMap 面试详解
1、你用过HashMap吗?什么 是HashMap? 你为什么用到它?答:用过,key,value,entry. 效率高。(集合了有序表和链表的优点,增删改查,效率高)2、你知道HashMap的工作原理吗?答:1、put原理:使用key,生成对应的hashCode 值,在对应hash值范围内,生成下标index并存储在对应index链表中。2、get原理:根据key,解析出对应的hashCode 值,在解析出对应的index 下标,获取存储的数据3、你知道HashMap的get() 方法的原理吗?原创 2022-04-02 22:35:27 · 2206 阅读 · 4 评论 -
android生命周期(详细总结)
1、android生命周期图2、activity三种状态(1)active:当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于活动状态,同一个时刻只会有一个Activity处于活动(Active)。(2)paused:当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连转载 2022-03-31 21:46:18 · 10530 阅读 · 1 评论 -
Android 解析本地 json 文件内容的简单封装
1、右键项目目录,选择new -> foldel -> Assets Foldel 在main 文件目录下创建一个 assets 文件夹,这个文件夹里面我们存放本地的JSON 文件2、代码实现package com.traveleasy.electricity.utils;import android.content.Context;import android.content.res.AssetManager;import java.io.BufferedReader;imp原创 2022-03-31 10:22:26 · 1244 阅读 · 0 评论 -
Android 启动背景图的设置
1、导入图片2、配置 theme 主题在values/ themes 文件里面添加如下代码 <style name="Theme.Splash" parent="Theme.Electricity"> <item name="android:windowBackground">@drawable/splash</item> <item name="android:windowFullscreen">true<原创 2022-03-29 17:53:42 · 5905 阅读 · 0 评论 -
Android BaseMvp 的使用
BaseMvp 的简单封装上一篇介绍了BaseMvp 的封装,这一篇来简单的介绍一下具体的使用方法。一、BaseActivity 的使用,请忽略类名,这里我后期会写一个简单的dome,就用login 类名做了代替。**1、先创建一个契约接口,在这里,我们提供M、V、P 层中的接口方法package com.traveleasy.electricity.contract;import com.traveleasy.electricity.Base.IBasePresenter;import co原创 2022-03-29 15:06:59 · 1995 阅读 · 0 评论 -
Android MVP Base类的封装,内存泄漏,代理,多presenter,注解依赖等封装
三年前写过一段时间Android的代码,后面又开始做一些跨平台的工作,比如之前的react-native ,现在的flutter 等,现在想重新找一份工作,思虑再三,还是把Android 捡一捡。废话不多说,先封装个base MVP 框架记录一下简单的介绍一下MVP思想,它是将View 层与Model 层彻底隔离,意味着View 和 Model 都不再持有对方的引用,它们通过一个叫做Presenter 的第三者来代理事务的传递,所有Presenter 层会持有Model 与View 层的引用。如下图原创 2022-03-29 14:43:27 · 2515 阅读 · 0 评论 -
使用liveDataBus 管理liveData
/** * 这条总线的用于把任何类中的数据直接传递到activity 或fragment 上 */public class LiveDataBus {// 存放订阅者 private Map<String, MutableLiveData<Object>> bus; private static LiveDataBus liveDataBus = new LiveDataBus(); private LiveDataBus(){原创 2022-03-27 21:03:59 · 563 阅读 · 0 评论 -
MVVM是什么
什么是MVVM?MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已,这是我对MVVM的定义,如果你不知道什么是MVC,请往下看。MVC简要如果你做过iOS开发,相信你对这几个东西一定很熟:Model、View、Controller,分别表示数据、视图、控制器。当然,其他方向的开发人员应该不也会太陌生,其实这只是一种设计思想,具体用什么语言和做什么开发并不重要。所谓MVC便是这几个单词的简写,那么它们之间是怎么工作的呢?先看下图。Model-View-Controller转载 2022-03-24 23:47:49 · 297 阅读 · 0 评论 -
JetPack到底是什么?带你认识JetPack
介绍JetPack:2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack。以帮助开发者构建出色的 Android 应用。Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助你遵循最佳做法、让你摆脱编写样板代码的工作并简化复杂任务,以便你将精力集中放在所需的代码上。内容JetPack分类有四种,分别是Architecture、Foundationy、Behavior、UI。JetPack.jpeg①Architecture(架原创 2022-03-24 23:34:06 · 2860 阅读 · 0 评论 -
解决liveData 订阅的黏性问题
/** * 解决liveData 订阅的黏性问题 * @param <T> */public class NonStickyMutableLiveData <T> extends MutableLiveData { private boolean stickFlag = false; @Override public void observe(@NonNull LifecycleOwner owner, @NonNull Observer obse原创 2022-03-24 19:27:48 · 675 阅读 · 0 评论