自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

转载 Postman中form-data、x-www-form-urlencoded、raw、binary的区别

在日常开发中,通常会因为提交数据的方式不同而导致各种各样的问题,归根结底是因为未能正确认识到POST方式上传数据的几种方式的区别。binary:相当于Content-Type:application/octet-stream,只可以上传二进制数据,通常用来上传文件,但是一次只能上传一个文件。postman中form-data、x-www-form-urlencoded、raw、binary的区别。x-www-form-urlencoded:只能上传键值对,而且键值对都是通过&间隔分开的。

2023-02-03 11:40:55 2454

原创 Java 核心基础知识梳理

一、泛型二、注解三、并发编程四、Java虚拟机原理java注解的详细使用(APT、插桩、反射)_摸鱼小能手啊的博客-CSDN博客五、反射与类加载六、动态代理

2022-04-11 18:10:40 533

转载 Linux Shell脚本参数传递的2种方法

前言平时会遇到很多脚本都有参数选项,类似:./test.sh -f config.conf -v --prefix=/home这种脚本怎么写呢?一、Shell 特殊参数解释首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_示例1:新建一个test.sh的文件#!/bin/bashecho $0 # 当前脚本的文件名(间接运行时还包括绝对路径)。echo $n # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是.

2022-03-18 21:05:23 11173 2

转载 Linux Shell-通过expect工具实现脚本的自动交互(二)

一、 Shell Here Document(内嵌文档/嵌入文档)Shell 还有一种特殊形式的重定向叫做“Here Document”,目前没有统一的翻译,你可以将它理解为“嵌入文档”“内嵌文档”“立即文档”。所谓文档,就是命令需要处理的数据或者字符串;所谓嵌入,就是把数据和代码放在一起,而不是分开存放(比如将数据放在一个单独的文件中)。有时候命令需要处理的数据量很小,将它放在一个单独的文件中有点“大动干戈”,不如直接放在代码中来得方便。1.1 Here Document 的基本用法为:

2022-03-18 20:13:38 2223

原创 Linux Shell脚本实现自动交互

一、先来说下解决的问题我要写一个给Apk文件进行V3签名的Shell脚本来实现自动化,避免每次手动输入大量命令的问题。实现过程中主要的两个点,第一个是部分命令执行后需要输入密码,如何实现自动化;第二个是Apk文件的地址需要以参数形式传入,Shell脚本中如何传递命令行参数。下面围绕问题开始展开。二、前置知识准备1.Linux Shell脚本基础知识:(可以自己再查查)Linux学习教程,Linux入门教程(超详细)htt...

2022-03-18 16:42:49 7704

原创 Linux Shell-通过expect工具实现脚本的自动交互(一)

一、安装expect工具expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是:spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成, 退出.由于expect是基于tcl的, 所以需要确保系统中安装了tcl:# 检查是否安装了tcl:[root@localhost ~]# whereis tcltcl: /usr/lib64/t.

2022-03-18 16:16:08 5381

原创 Android 常用SDK整理总结

V1.0 更新于2022.02.17整理一些常用的SDK,方便新建项目的时候使用,定期更新,欢迎大家给予补充一、官方的SDK material 'com.google.android.material:material:1.2.1' JetPack组件库 Lifecycle Viewmodel Livedata DataBinding / ViewBinding Navigation WorkM...

2022-02-17 16:46:45 3828 2

转载 数据加密 三种密钥交换算法详解(RSA& DHE& ECDHE)

一、RSA密钥交换算法RSA算法流程文字描述如下:(1)任意客户端对服务器发起请求,服务器首先发回复自己的公钥到客户端(公钥明文传输)。(2)客户端使用随机数算法,生成一个密钥S,使用收到的公钥进行加密,生成C,把C发送到服务器。(3)服务器收到C,使用公钥对应的私钥进行解密,得到S。(4)上述交换步骤后,客户端和服务器都得到了S,S为密钥(预主密钥)。图示如下:SSL协议中,服务器发送的公钥在SSL中是通过certificate报文发送的,certifica...

2022-01-17 13:45:42 9959

原创 网络数据抓包 整理总结

在开发过程中,我们经常会碰到需要抓取网络接口请求数据来进行调试或者接口对接的情况,有时候某些金融行业的前端或者APP过检也会对APP进行抓包分析,所以在这里简单做一下整理,方便日后复习。一、常用的抓包工具抓包工具有很多,小到最常用的web调试工具Firebug,达到通用的强大的抓包工具Wireshark。为什么使用 Fiddler?原因如下:(1) Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够,且 Firebug 常常是需要“无刷新修改.

2021-09-29 18:12:59 2251

原创 Android 缩减、混淆处理和优化应用APK

本文主要就d8、Proguard、R8 等工具实现对APK代码的缩减,优化和混淆做相关记录。一、概念梳理d8:是一种命令行工具,Android Studio 和 Android Gradle 插件使用该工具来将项目的 Java 字节码编译为在 Android 设备上运行的 DEX 字节码,该工具支持您在应用的代码中使用 Java 8 语言功能。d8还作为独立工具纳入了 Android 构建工具 28.0.1 及更高版本中:android_sdk/build-tools/version/d8...

2021-09-07 17:00:42 428

转载 Android 加载流程(打包与启动)

移动安全的学习离不开对Android加载流程的分析,包括Android虚拟机,Android打包,启动流程等...这篇文章 就对Android的一些基本加载进行学习。1|0Android虚拟机Android开发中接触的是与Java虚拟机类似的的Dalvik虚拟机和ART虚拟机1|1Dalvik虚拟机什么是Dalvik虚拟机Dalvik虚拟机简称Dalvik VM或者DVM,是Google专门为Android平台开发的虚拟机,它运行在Android运行库中,需要注意的是DVM并不是一.

2021-09-07 11:48:28 720

转载 Android 安全攻防战,反编译与混淆技术完全解析(上)

Android安全攻防战,反编译与混淆技术完全解析(上)之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值得骄傲的事情。不过单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能,可能平常不太会用得到,但是一旦真的需要用到的了,而你却不会的话,那就非常头疼了。另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定程度的保护,因此代码混淆也是我们必须要掌握的一项技术。那么最近的两篇文章我们就围绕反编译和混淆这两个主题来进行一次完全解析。一、准备工作我们都知道,Andr

2021-09-07 10:33:42 668 1

转载 Java 编译时类型和运行时类型

编译时类型和运行时类型:Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法(意思是说:编写代码时,只能调用父类中具有的方

2021-08-18 10:51:40 2846

转载 Android 10、11 存储完全适配!(建议收藏)

1、存储基本知识先来看看存储区域划分:image.png其中,以下目录无需存储权限即可访问:1、App自身的内部存储2、App自身的自带外部存储-私有目录剩下的都需要申请存储权限,Android 10.0前后对于存储作用域访问的区别就体现在如何访问剩余这些目录内的文件。重点在自带外部存储之共享存储空间和其它目录2、Android 10.0 之前访问方式继续细分为Android 6.0 之前和之后。Android 6.0 之前访问方式Android 6.0

2021-08-14 14:40:53 5238 6

原创 Android Android 10、11 分区存储适配组件库

先贴一下仓库的访问地址:https://github.com/xuetaotao/imagepicker,欢迎大家提意见使用和star一、存储基本知识先来看看存储区域划分:image.png其中,以下目录无需存储权限即可访问:1、App自身的内部存储2、App自身的自带外部存储-私有目录剩下的都需要申请存储权限,Android 10.0前后对于存储作用域访问的区别就体现在如何访问剩余这些目录内的文件。重点在自带外部存储之共享存储空间和其它目录详见:https://.

2021-08-14 14:21:08 648 1

原创 Android 发布Github项目到Maven仓库

一、相关专业术语说明Maven:全名Apache Maven,是Apache开发的一个软件项目管理和项目自动构建工具 Maven仓库:存放Maven库资源的地方,可以是远程Maven服务器,也可以是本地Maven服 POM:Project Object Model,一个用来描述项目信息的xml文件,以xml节点的形式记录项目所属分组,项目名称,项目版本,依赖类库等信息 JCenter:一个由 bintray.com维护的Maven仓库。Bintray其实只是一个网站,他们负责维护JCenter这个

2021-08-13 16:31:59 805 2

原创 Android Targeting R+ requires the resources.arsc of installed APKs to be stored uncompressed and al

一、问题描述:最近Apk适配了Android 11版本,在使用完乐固线上加固后,通过adb命令安装测试,安装失败,报出如下错误:Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte bou

2021-08-06 16:46:47 9464 2

原创 Android RxJava生命周期管理解决方案整理

一、为什么要做生命周期管理?Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception { //TODO } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .

2021-06-03 15:45:39 2357 2

转载 Android Lifecycle详解&原理分析

一、概述在过去的谷歌IO大会上,Google官方向我们推出了Android Architecture Components,其中谈到Android组件处理生命周期的问题,向我们介绍了Handling Lifecycles。同时,如何利用android.arch.lifecycle包提供的类来控制数据、监听器等的 lifecycle。同时,LiveData与ViewModel的 lifecycle 也依赖于Lifecycle框架。二、Lifecycle简介&基础使用为...

2021-06-03 14:44:36 1594

转载 Android AutoDispose的使用及原理分析

概述在我的上一篇文章 解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析 中,详细阐述了如何通过使用 RxLifecycle 解决Android开发中RxJava的可能会导致的内存泄漏问题;RxLifecycle 内部的实现原理;在文章的最后,我提到了 AutoDispose 这个库,这个库同样可以解决Android生命周期组件导致的RxJava的内存泄漏情况。但是不得不考虑的是,目前国内的Android开发圈子中,RxLifecycle已经逐渐为人所熟知,包括著名的一些开

2021-06-03 14:18:04 2787

转载 Android RxLifecycle的使用及原理分析

一、介绍RxLifecycle目的:解决RxJava使用中的内存泄漏问题。例如,当使用RxJava订阅并执行耗时任务后,当Activity被finish时,如果耗时任务还未完成,没有及时取消订阅,就会导致Activity无法被回收,从而引发内存泄漏。为了解决这个问题,就产生了RxLifecycle,让RxJava变得有生命周期感知,使得其能及时取消订阅,避免出现内存泄漏问题。二、使用首先来介绍下RxLifecycle的使用。1.添加依赖 implementation 'com

2021-06-03 11:50:10 1397 2

转载 Android Gradle(二) 构建生命周期

现在的Android应用都是采用Android Studio来开发的,AS默认是采用Gradle作为构建工具的。通常开发者可以不需要理解任何Gradle的脚本配置,就可以开发出一个APP。但是,当你想做一些更智能的操作时,比如修改打包后的输出目录、提高打包速度等等,就必须对Gradle有比较深入的了解。Gradle脚本是基于Groovy语言来编译执行的,在这之前最好要对Groovy语言有所了解。build.gradle脚本Gradle构建脚本默认的名字是build.gradle,当在shell中执行

2021-04-30 17:51:55 196 1

原创 Android Gradle(一)简介

最近在接入Tinker热更新的时候,接触到了蛮多的 Gradle 构建脚本相关的知识,这块一直是小白,借此机会开辟一个地方记录学习一、官网地址Gradle官方学习指南 Groovy接口文档

2021-04-30 15:51:55 631

转载 Kotlin init代码块和构造方法以及伴生对象中代码的调用时机及执行顺序

在Kotlin中,除了主构造函数和次构造函数外,还给我们提供了init代码块,供我们做一些初始化操作。那么kotlin init代码块是什么时候执行的呢,和构造方法以及伴生对象一起使用时它们的执行顺序又是怎样的呢?下面我们通过一个小例子来看一下我们先来看看kotlin中init代码块和构造方法的执行顺序class Person() { /*属性*/ private var gender: Boolean = true /*次构造方法*/ constructo...

2021-04-21 09:56:48 1573

转载 Kotlin for循环(与java对照)

1)遍历1-100的数值//kotlinfor (index in 1..100){ print(index)}//javafor (int index = 1 ; index <= 100 ; index++){ System.out.print(index+“”);}2)倒序遍历1-100的数值(downTo 有点类似index- -)//kotlinfor (index in 100 downTo 1){ print(index)}...

2021-04-19 16:10:43 523

转载 Java try...catch异常后还会继续执行吗

catch 中如果你没有再抛出异常 , 那么catch之后的代码是可以继续执行的 ,但是try中 , 报错的那一行代码之后 一直到try结束为止的这一段代码 , 是不会再执行的。//代码1public static void test() throws Exception { try { throw new Exception("参数越界"); System.out.println("异常后");//不可以执行 } catc

2021-04-19 15:45:02 19850 2

转载 Android 触摸事件(Touch)的传递机制

Touch 事件的传递机制一个完整的touch 事件,由一个 down 事件、n 个 move 事件,一个 up 事件组成.Touch 事 件 一 般 的 传 递 流 程Activity-->window(唯一实现类是PhoneWindow)-->顶级View(DecorView)-->ViewGroup-->View监 听 Touch 事 件 有 两 种 方 式 :[方式1]setOnTouchListener[方式2]直 接 重 写 三 个 方 法(d

2021-04-19 14:57:28 3399

转载 Android 代码混淆 R8与Proguard

Android Gradle插件升级至3.4.0版本之后,带来一个新特性-新一代混淆工具R8,做为D8的升级版替代Proguard;在应用压缩、应用优化方面提供更极致的体验。Gradle插件版本3.4.0之后:R8 默认处于启用状态:R8 将脱糖、压缩、混淆、优化和 dex 处理整合到了一个步骤中,从而显著提升了构建性能。 R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。下图是

2021-03-22 16:29:56 7044

转载 Android gradle 插件版本、gradle版本和buildToolsVersion之间的对应关系

一、主要概念1、Gradle是什么?Gradle其实就是一个构建项目的工具,即把一堆堆的目录、文件按照一定的规则关联起来,形成一个项目的自动化构建工具。Gradle版本,如:gradle-5.6.4-all.zip位置:项目主目录 gradle 文件夹->wrapper->gradle-wrapper.properties2、Gradle插件又是什么?Gradle插件是针对Gradle发行版和Android SDK Build Tools封装的一个工具,主要有两大功能

2021-03-22 15:48:48 7500

转载 Android ConstraintLayout约束布局学习

1.介绍约束布局ConstraintLayout 是一个ViewGroup,是Android 8 新增的布局方式,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件,是借鉴IOS所支持的约束的布局。从功能上讲,约束布局相当于相对布局的改进,谷歌官方也是推荐用约束布局来代替相对布局。ConstraintLayout 官方文档2.为什么要用ConstraintLayout在开发过程中经常能遇到一些复杂的UI,可能会出现布局嵌套过多的问题,嵌套得越多,设备绘制视图所需的时间和计

2021-03-04 19:45:50 481 1

转载 AndroidStudio 代码报错(报红色),但可正常运行解决方法(5种方式)

目录引言一、方法一:自带清除缓存二、方法二:删除user目录下.AndroidStudio中的文件三、方法三:删除user目录下.gradle四、方法四:删除工程目录下.gradle、.idea五、方法五:如果前四种方法都不能解决你的问题,那么还有一种解决办法结束语引言最近下载了一份代码,在同事电脑上可以正常编译、显示。在我电脑上R文件就一直显示为红色,但可以编译和运行。在网上查找了各种办法,最终得以解决,这里总结一下解决办法:一、方法一:自带清除缓存点击..

2021-02-23 14:57:43 6588 3

原创 Android11 版本适配方案整理

最近在适配 Android 10.0的过程中,简单看了下 Android 11的版本变动情况,遇到了一些问题,觉得需要做下整理,这里仅整理 存储机制相关的更新:一、Android 11中的隐私权先附上几篇不错的手册文章吧:Android11 开发者手册 Android 11 中的存储机制更新Android 存储用例和最佳做法访问共享存储空间中的媒体文件Android11 最全适配实践指南Android 11 应用兼容性适配Android11(R)新特性梳理说正文,..

2021-01-26 19:21:07 6491

原创 Android APP过检安全整改

一、背景说明金融类APP的安全整改,为了提高APP的安全性,达到相关机构的安全标准做的改进。先写个提纲,以后慢慢补充细节二、改动项整理 报文加解密(RSA+AES,密钥安全保存)、防重放 双向证书认证 开启混淆,应用签名检测防止二次打包 登录密码复杂度 第三方sdk初始化放在同意隐私协议之后 权限整改,隐私政策整改 APP的环境检测:模拟器/Root 本地重要信息加密存储(如SP加密存储) 业务整改(如..

2021-01-21 18:05:15 744

原创 Android APP隐私权限整改

一、背景简介前段时间,国内对于安卓APP隐私问题做了一波整改,我们的APP也做了一些整改,现在分块抽空整理出来吧二、整改项目1、隐私权限整改主要是针对现在市场上APP各种乱申请权限,获取用户隐私的行为,整理了一个工具类(主要参考云闪付APP的业务逻辑),如下:public class PermissionUtils { /////////////////////////////////////////////////////////////////////////

2021-01-21 17:53:41 3179 4

转载 Android SAF(Storage Access Framework)使用攻略

漫长的假期,在家整理了一下Android 10的适配内容。因为适配篇的篇幅问题,就将这一部本单独出来,也先放出来。1.介绍Android 4.4 就引入了存储访问框架 (SAF)。借助 SAF,用户可轻松在其所有首选文档存储提供程序中浏览并打开文档、图像及其他文件。用户可通过易用的标准界面,以统一方式在所有应用和提供程序中浏览文件,以及访问最近使用的文件。SAF 提供的部分功能:让用户浏览所有文档提供程序的内容,而不仅仅是单个应用的内容。 让您的应用获得对文档提供程序所拥有文档的长期、

2021-01-21 16:47:00 8146

转载 Android Cursor的一些浅显见解

一、Cursor的数据模型之前一直搞不懂Cursor的数据模型是怎么样的,等到看到下面别人博客中把Cursor比作.net中的DataReader才明白,原来是这么回事。但是没 学过.Net的同志可能还是不明白Cursor是怎么一回事,怎么取它的数据,和它的数据为什么那么取。上面的表代表的是一个cursor对象。当我们用query方法查询到的是一个指向cursor对象第一行的前面一行数据,即上图中的空行。所以我们使用cursor.moveToNext()方法时,是指向cursor..

2021-01-21 16:41:09 1492 2

转载 Android MediaStore的使用

一、简介MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了。今天我就介绍一些这些接口的用法。  首先,要得到一个ContentResolver实例,ContentResolver可以这样获取,利用

2021-01-21 16:33:03 2181

转载 Android11 最全适配实践指南

一、前言没错!Android 11 (version 30,Android R)正式发布了!看到这个新闻我知道我不能再拖了,再不好好准备好迎接Android 11的到来,到时候迎接我的就是客户的指责,甚至老板的一封休书了????。今天就和大家一起看看Android 11到底改了些什么,以及最重要的,我们需要怎么适配?targetversion 不改到 30,是不是就不用适配了呢?以下我分为两部分讲述,分别是 以Android 11为目标版本的应用 (targetSdkVersion>=30才

2021-01-21 15:59:44 2599

原创 AndroidQ 版本适配方案整理系列二

关于Android 10.0的适配,自己主要做了一些工具类,至于详细的内容分析,可以参考一下下面这些大佬的一、整个Android10.0版本的主要变化Android 10 适配攻略小结二、Android10.0版本中分区存储详解Android 10适配要点,作用域存储 -郭霖大佬的 Android 10分区存储介绍及百度APP适配实践 AndroidQ(10)分区存储完美适配方法 AndroidQ(10)分区存储完美适配 SAF(Storage Access Framework)使..

2021-01-21 15:46:45 255

转载 Kotlin 实现静态的几种方式详解

将 kotlin 编译成 java先来个题外话,我们如何看 kotlin 对应的 java 代码,kotlin 最终还是要编译成 java class 在 JVM 上运行的,有时我们的确是想看看用 kotlin 写完的代码编译完了是什么样子,这样有助于我们理解 kotlin 语法其实很简单,AS tools 工具里面有提供 tools -> Show kotlin Bytecode 点击 Decompile ok ,这样就行了kotlin 实现静态的方式..

2021-01-18 11:42:36 13869

空空如也

空空如也

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

TA关注的人

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