自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (13)
  • 收藏
  • 关注

原创 GitHub开源项目权限管理-使用账号和个人令牌访问

7.打开git 版本管理工具,使用https的方式访问,输入账号,密码栏输入刚才的证书。选择保存密码,后面就可以直接访问了。3.找到Personal access tokens 的 Tokens(classic)2.找到左下角的Developer settings。6.点击生成证书,复制证书并且保存起来,1.打开后台账号设置。

2024-03-28 18:54:52 335

原创 签名证书文件泄漏不要慌,Rotate signing带你无缝更换新签名

如果oldkey.jks 泄漏了,可以直接换一个新的签名newkey.jks,然后使用oldkey.jks和newkey.jks共同对新APK进行签名。(一)oldkey和newkey共同签名的包的签名MD5 和 oldkey签名MD5一致。1.oldkey签名的包可以被oldkey和newkey共同签名的包覆盖安装。(二)用新签名和旧签名一起生成一个沿袭签名(lineage key)2.共同签名的包和使用newkey.jks签名的包可以互相覆盖。1.共同签名的包不能被oldkey签名的包覆盖。

2024-01-30 18:30:08 309

原创 Error building Android library: Direct local .aar file dependencies are not supported 亲测有效

我们在使用 Android Studio version (4.0.0+)引用aar的时候,上面的报错是不是很熟悉,修复方法是。

2023-11-17 10:51:28 211

原创 Kotlin 函数参数和函数变量

以上示例 stateCallback 为参数名, ( studentId : Int )代表这个参数是一个带有Int类型的参数的函数,并且函数返回值是Unit。如下根据一个学生id查询学生名字,传入一个学生id和一个回调函数。val name = 根据id查询学生名字。1、函数参数:指的是方法的参数是一个方法。2、函数变量:指的是。

2023-11-10 18:46:32 142

原创 koltin 泛型Any和*的区别

相当于java泛型的?,就是未知任意类型。Any相当于Object类型。

2023-10-10 17:53:00 286

原创 第七章、用户体验五要素之表现层解析(本文作用是通俗讲解,让你更容易理解)

2、实验方法:简单的提问几个人,他们的视线落脚点是否是战略要表达的重点,就能评估设计的合不合理。实验要保证个体的独立性,保证每个个体之间不会因为互相交流之后,说出了自己大脑臆想的东西。即使是这样也有一些样本是准确的,因为有些人可能会经过一定的思考再写答案,经过思考后的答案就不太有参考性了。视觉设计的重点应该是是否能够让软件良好的运行。视觉设计作为最后一层的表现层,应该是对之前层面既定的目标做一定程度的支持。用户的使用产品的经历最终是通过感官来进行的。1、嗅觉味觉由产品的材质决定,不是交互设计能完成的。

2023-07-05 13:51:06 240

原创 第六章、用户体验五要素之框架层解析(本文作用是通俗讲解,让你更容易理解)

最重要的是,通过安排和选择界面元素来整合界面设计,通过识别和定义核心导航系统来整合导航设计,通过放置和排列信息组成部分的优先级来整合信息设计。我们应该思考的是大多数用户的使用路径,至于少部分用户的错误操作,我们可以给予提示,但是不能增加大部分用户的操作步骤或者不能增加大部分用户需要浏览的信息量。在框架层,功能型和信息型产品都需要信息设计,不同的是功能型还需要界面设计,而信息型产品则是导航设计。界面设计永远都是遵循二八法则,为了服务好80%的用户,让它们只需浏览尽量少的信息,做尽量少的步骤操作。

2023-06-21 14:08:34 650

原创 第五章、用户体验五要素之结构层解析(本文作用是通俗讲解,让你更容易理解)

但是实际上,我们的软件是给用户使用的,不是给机器系统使用的。很多企业没有专门的交互设计师,所以根据不同企业的企业文化不同,信息架构的确立会由不同的人负责。产品文档是很难描述一个产品的,并且文字传达信息的效率有限,需要非常多而复杂的文字来描述一个功能,所以基本不会有人仔细去看。使用元数据的好处就是,可以随时根据不同的需求,对已有信息进行分类,组成新的栏目。(2)从下到上,就是从内容和需求的分析角度,把所有信息都归为次要信息,然后挑出比较重要的提到高一级,这样一级一级的网上提,得出最终结构。

2023-06-06 17:26:07 590

原创 第四章、用户体验五要素之范围层解析(本文作用是通俗讲解,让你更容易理解)

但是如果是说做一个符合公司时尚指导书的网站,这是可以的,做出来是可以验证的,哪几条符合哪几条不符合,是可以明确。4、注意决策层对战略和特性的混淆,某些时候决策层会对某些特性有执念,而忽略了战略,我们应该把决策层引导到战略的制定上,而不是把精力花在实现的战术上。2、产品团队每个人对产品负责人的描述可能产生各种不同的理解,做出的功能或者内容差了十万八千里,就会造成巨大的资源浪费。1、需求优先级以战略目标为指导,战略一定要明确理解,不能有丝毫的模糊,删除因为某些特性而添加的不符合战略的需求。

2023-06-04 19:02:52 772

原创 第三章、用户体验五要素之战略层解析(本文作用是通俗讲解,让你更容易理解)

也不该太具体,否则就会把目标实现路径当成了要实现的目标本身,使得实现路径限定死了,难以应对实施过程的各种变化。定制策略的一般都是资深的决策者,决策会受到很多难以言说的因素影响,所以有时候因为信息差,执行的底层员工并不是很理解。品牌识别是自然而然的发生的,无法避免。我们的用户可能存在几个群体的交杂,同一个功能有的用户经验丰富而激进,有的用户缺乏经验而保守,所以同一个功能面对不同用户群体可能也要不同的设计。市场是变化的,社会是发展的,就像是射击一个移动的目标一样,只有不断的调整姿势才能击中移动的目标。

2023-05-27 10:17:23 215

原创 Android开机流程、Zygote进程、systemserver、ServiceManager

上电后,BootRom会被激活,引导芯片代码开始从预定义的地方(固化在ROM)开始执行,然后加载引导程序到RAM。Android是基于Linux系统的,它没有BIOS程序,取而代之的是(系统启动引导程序)。引导程序是厂商加锁和限制的地方,它是针对特定的主板与芯片的。厂商要么使用很受欢迎的引导程序比如redbootubootARMboot等或者开发自己的引导程序,它不是Android操作系统的一部分。流程图如下:Linux内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。

2023-05-25 20:22:51 1753 4

原创 第二章、认识用户体验五要素(本文作用是通俗讲解,让你更容易理解)

指的是我们要做的业务范围,我们需要解决社会问题,但是不能面面俱到,只能选择其中一些业务线,这些业务线形成一个完整的回路。就像是阿里这样的大公司,要让天下没有难做的生意,也是从基本的淘宝做起,慢慢的有了天猫,有了自己的物流系统——菜鸟。由于用户对业务线和响应的效率要求,所以更注重交互设计,每个任务点的人机交互,不同任务点串起来的人机交互,都是非常重要的。一般是用户用来完成一些特定的任务,用户更注重效率,对感官体验没有太大的追求,所以更注重用户使用流程任务线的流畅和简短,用户操作的反馈响应及时和有效。

2023-05-21 11:09:12 1151

原创 Java Thread 的创建

if (res == false) { ...//清理 return UNKNOWN_ERROR;//首次运行时会调用readyToRun()做一些初始化准备工作。= 0) { ... //创建失败,则返回 return 0;//重新请求强引用,用于下一次的循环。//该参数对于gdb调试很有作用。//只能调用C/C++代码的Native线程。//通过pthread_create创建线程。//user是指Thread对象。

2023-05-19 21:22:38 714 1

原创 Handler、Looper、Message 和 Thread 的合作机制——安卓 Handler 机制、跨线程机制详解

从源码看出,消息的回调严重依赖Handler。Handler 在哪个线程创建,Looper就绑定了哪个线程,消息就回调到哪个线程。所以所谓的跨线程通信就是Thread存储了自己对应的Looper而已。

2023-05-19 20:55:11 923

原创 Only the original thread that created a view hierarchy can touch its views. 刨根问底

开发过程中在子线程访问控件的时候会出现Only the original thread that created a view hierarchy can touch its views。那么异常是从哪里来的呢?通过查询源码可见:

2023-05-19 14:13:40 169

原创 管理罗盘-管理者角色认知与定位

品牌:成熟管理者的管理突破(品牌分:会做事(下限)+会作秀(上限)——唐骏)(3)管理者的表情就是下属的心情。(1)如果无法说出团队的共同目标,并让每个人分清楚目标,就是不合格的领导。好的思维是:锁定目标创造资源-有什么目标,寻找需要的资源(市场营销资源)(5)组织目标和个人目标有交集才最重要,统一组织目标和个人目标。(3)清楚目标但是不承诺完成,不重视完成度和完成质量。(2.人是管不住的,只能用事来管人。(2)大部分目标问题,在于管理者对目标的模糊和摇摆。(4)目标管理动作:有清楚目标并且承诺完成。

2023-05-13 12:04:20 663

原创 第一章、用户体验要素-用户体验为什么这么重要(本文作用是通俗讲解,让你更容易理解)

5.任何用户体验上的改善都是为了提高效率。即使是企业内部网站也是如此,如果使用人数巨大,那么一点点改善就可以得到巨大的经济效益。除了经济上的问题,对情绪和积极性的影响也不可忽略,如果工作的每天是和拙劣的工具做斗争,那么情绪肯定是差的,心态肯定是崩的。4.衡量体验好不好的一个商业标准就是转化率,比如衡量A功能的体验就是A功能的浏览和转化到下一个环节的百分比。特别电子商务类的,1%的转化率提升也是收益巨大的。3.好的产品是高效的和用户沟通,强大的功能需要用户能理解怎么使用才有意义,否则就是抱着核弹当废铁。

2023-05-12 22:19:22 90

原创 Java foreach遍历、for循环遍历、Iterator迭代器遍历区别和遍历中操作安全问题

Java foreach遍历、for循环遍历、Iterator迭代器遍历区别和遍历中操作安全问题

2023-05-12 19:11:59 2298

原创 一篇说清楚synchronized的类锁、对象锁、方法锁、代码块锁和它们的阻塞情况、死锁由来。

那么就会出现thread1占有mLock锁,需要访问mLock2锁,就需要等待thread2释放mLock2锁。c1.test()和c1.test2()、c1.test3使用的是同一个锁。c1.test()和c2.test()使用的是不同的两个对象锁,所以不同的线程可以同时访问c1.test()和和c2.test()。//非静态方法锁,使用的是对象锁。//非静态方法种的代码块,如果用.class类来加锁,也是类锁。//非静态方法种的代码块,如果用this来加锁,也是对象锁。//静态方法锁,使用的是类锁。

2023-05-10 16:18:20 1145

原创 单例模式的性能与线程安全详解(为什么要双重检查锁)

双重判空的意义在于,mInstance是静态变量,是线程不安全的。那么我们通过同步锁synchronized来锁定改类。如果不加第一个判空,那么每次调用getInstance()都会调一下同步锁,那么开销是很大的。如果加了第一个判空,那么大概率是只会调用一次同步锁。

2023-04-27 18:04:39 767

原创 git项目太大导致拉取超时或者内存溢出处理

git项目太大导致拉取超时或者内存溢出处理

2023-04-27 11:27:07 638

原创 pip 切换清华源

pip 切换清华源

2023-02-13 17:45:19 239

原创 非Root手机导出libart.so等系统库

非Root手机导出libart.so等系统库

2022-12-19 13:56:49 750

原创 美版 Pixel 5 网络无法使用问题解决

美版 Pixel 5 网络无法使用问题解决

2022-12-06 17:16:40 1429

原创 设计心理学中的重要概念(三)头脑中的知识与外界知识

作为设计师的职责就是把握用户头脑中的知识,然后通设计来组织外部世界知识与用户头脑中的知识相结合。好的结合就是好的设计。

2022-12-04 20:08:14 407

原创 软件测试四个阶段

软件测试四个阶段

2022-10-08 13:45:29 3315

原创 软件测试的七大原则

软件测试七大原则

2022-10-08 10:57:26 3618

原创 frida-dexdump Frida 脱壳

frida-dexdump Frida 脱壳成功

2022-06-21 16:35:57 3950

原创 Frida 基础环境部署和运行第一个 hook demo

frida环境部署教程

2022-06-21 14:21:44 569

原创 Parcelable原理分析以及读取数据异常的根源问题分析

着急的先看结论:Parcelable 的成员变量读写需要严格的遵循 先写先读、后写后读的原则。所以出现数据读取异常,大概率是因为读取顺序和写入顺序不一致。想学东西的看后文分析如下例子public class PackageInfo implements Parcelable { public String packageName="com.exemple.aa"; public int appId = 0; public int appMode = 0; publi.

2022-03-18 17:04:58 4877

原创 多线程编程 synchronized 阻塞独占锁

我们在进行多线程编程的时候往往需要进行线程同步或者防止重入。这个时候使用不同的机制,不仅处理逻辑不一样,运行效率也有很大的区别。synchronized我们一般用 synchronized 来做独占锁,而且线程是阻塞的。比如在设计单例的时候,同步代码块或者同步方法。...

2022-02-16 20:15:11 1467

原创 实例说明 Android 多线程、多进程与全局变量之间的关系

demo 地址https://github.com/994955138/ConditionVariableDemo.git我们先给结论,再用实例验证。结论:进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。1.线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。线程之间的通信更方便,同一进程下的线程共享全局变量、静.

2022-02-15 17:51:28 2094

原创 设计心理学中的重要概念(二)日常行为心理学

待续

2022-01-29 23:08:19 777

原创 设计心理学中的重要概念(一)日常用品心理学

等待持续更新中......

2022-01-16 22:09:56 799

原创 ContextImpl

内容等待补充

2022-01-13 18:31:57 164

原创 ActivityThread

暂无内容,等待补充

2022-01-13 18:18:11 122

原创 安卓App启动——Application的启动流程,从startActivity讲起

注意: 我们不在一片文章里面贴上所有代码,而是用 超链接 来连接调用链(蓝色部分为超链接),避免文章粘贴大量代码影响阅读质量。安卓开发日常最常见也是最基础的api可能就是startActivity了。平时使用起来习以为常,也觉得自己会用了。现在让我们来一探究竟,我们熟悉的startActivity究竟是怎么运作的。 让我们循序渐进的来了解,所以是先看代码,然后讲解代码,最后是总结。(一大堆的源码总是让人很无奈,但是他确是了解安卓的最佳资料)。 先上源码: @Ove...

2021-11-26 18:30:33 1507

原创 Instrumentation.execStartActivity

方法声明public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options)startActivity的时候传入的参数mInstrumentation.execStartActivity(this,//启动该Activit.

2021-11-26 18:29:53 1421

原创 Intent.resolveActivity

public ComponentName resolveActivity(@NonNull PackageManager pm) { if (mComponent != null) {//如果当前组件不为空,则返回组件,为显式Intent return mComponent; }//如果mComponent为空则是隐式Intent,就解析Intent来获得具体是哪个Intent ResolveInfo info = pm.resolveActivity( .

2021-11-26 18:28:25 264

原创 解读 PackageManager.resolveActivity

暂无内容,等待更新

2021-11-26 18:27:38 1501

Xshell-6.0.0175p.zip

可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。 由于在虚拟机中操作Linux系统需要频繁切换鼠标,缺乏个性化设置,不支持中文显示,所以我们将使用XShell来连接并使用安装好Linux系统的虚拟机。

2020-05-11

javaSeverWorkspace.zip

最简单的SpringBoot 开发demoJvava Server遵循的 模式 界面->Controller->Service->Dao(JpaRepository)->数据库->Dao->Service->Controller->界面显示 * * 这是一个MVC分离的模型 * * 界面通过接口 请求数据 由Controller接待, Service后台处理事务Controller进入等待,Service 分发给Dao处理,处理完再通知Controller,Controller再返回给View

2020-05-08

Http请求和服务器搭建的基本知识.doc

Http超文本传输协议请求和使用后端开发框架SpringBoot搭建服务器的基本知识,每一步的配置和这样配置的基本理论依据。

2020-05-08

mprop ro 属性更改

直接复制到/data/local/tmp目录下,并且实行相应的命令行,便可实现动态更改debug属性

2018-08-27

010Editor二进制文件编辑器

010Editor是二进制文件编辑器,可以用于修改so等文件的内容并打包

2018-06-06

CurrentActivity.apk

显示当前打开应用的包名和界面名称以及路径。需要打开悬浮窗权限,然后从悬浮窗看到具体的页面名字和路径

2018-06-06

百度ssp开发示例

百度ssp开发示例

2016-08-01

TextView限制最大行数,多出部分显示略号,ellipsize="end"失效问题解决办法

TextView限制最大行数,多出部分显示略号,ellipsize="end"失效问题解决办法

2015-11-28

实现滚动tab切换fragment + viewpager

实现滚动tab切换fragment + viewpager

2015-11-17

android volley包

volley是Google公司提供的移动通信框架,可以并发处理网络请求

2014-09-30

coherence jar包

openfire二次开发时,将该包导入到lib目录下

2014-09-30

tangosol jar包

openfire二次开发时使用该包导入到lib目录下

2014-09-30

coherence-work

openfire二次开发使用,在开发时把coherence-work导入/openfire_src/build/lib目录下

2014-09-30

空空如也

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

TA关注的人

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