小米8 刷入 MIUI 欧洲版并 Root

先大致介绍一下各个 MIUI 版本: 国内版 MIUI 国内版就是官方 MIUI 的国内版,优点:能吃上新功能,有小爱,缺点:有广告,臃肿,后台常驻很多系统组件,同时有不少系统组件没办法禁用,Google 套件不太好安装,安装好了之后也会经常因为不稳定而 Crash。官方站点:米柚 国际版 MIUI 也称为 俄罗斯版,国际版就是官方 MIUI 的国际版,优点:自带 Google 套件,无广告,缺点:还是比较臃肿,自带的 Google 套件过多。官方站点:MIUI Global 欧洲版 MIUI 也称为 波兰版,属于 MIUI 的第三方定制 Rom,也就是通常所说的 魔改MIUI,但不是小作坊制作,稳定性比较可靠。优点:自带 Google 套件,无广告,不臃肿,缺点:无小爱。 官方站点:XIAOMI.EU

1月 01 ,19

Xposed注册系统服务

我们知道像 ClipboardManager, ActivityManager 实际上底层都是通过 Binder 以 aidl 接口的形式实现的,对应的服务端类名都是 xxxService 的形式,例如 ClipboardService, ActivityManagerService。幸运的是,在 Xposed 框架支持下,我们也可以注册自定义的系统服务。

12月 29 ,18

Android shell service 命令

Android Shell 中有 service 命令,其二进制文件位于 /system/bin/service,该命令可以用来调试,甚至是应用于开发。

11月 21 ,18

Webview加载本地资源时的多语言国际化问题

在开发中,有时候 App 的本地资源(如离线 html 文件)等会用 Webview 去加载,如果同时需要考虑多语言国际化问题,应该如何处理呢?

10月 29 ,18

Xposed开发之短信Hook

我的 Xposed 模块 - 短信验证码提取 中比较关键的就是如何通过 Hook 短信接收过程,并获取短信内容。

10月 19 ,18

Android O SMS 接收过程源码分析

Android O (8.0 和 8.1) 起,Google 开启了 Project Treble 计划,引入了新的系统架构模式 Treble。

10月 17 ,18

Xposed开发之检查模块是否启用

个人开发的 Xposed 模块中,确实有检查自己模块是否已启用的需求,那么该如何实现呢?

10月 12 ,18

Xposed开发之微信赞赏

个人开发者开发出来的 App,经常会见到微信赞赏(或者捐赠)入口。这个是如何实现的呢?

10月 10 ,18

关于抄袭开源项目的感想

昨天,一位用户告诉我,最新 Xposed 仓库上最新版本(2.6.6)的 阻止运行 增加了新的功能:收到短信验证码弹出提示,并自动复制验证码到剪切板。这跟我本人的模块 验证码提取器Xposed 的核心功能之一是重合的。因为考虑到 阻止运行 这款 Xposed 模块本身是专攻对流氓 App 的治理的,新增的这个功能怎么都和其核心业务不搭边,在好奇心的驱使下,我反编译了其 2.6.6 版本的 apk…

10月 10 ,18

Android 应用关联特定后缀名的文件

Android 开发中,会碰到一些特殊后缀的文件需要用自家 App 打开,也就是需要 Android 应用关联特定后缀名的文件。

10月 06 ,18

正则表达式 - 分组 & 前瞻 & 后瞻

之前在处理短信验证码问题的时候,碰到了关于验证码正则的问题,其中涉及到正则表达中的 前瞻(lookahead) 和 后瞻(lookbehind),借此机会总结一下正则表达式的这种高级用法。

10月 04 ,18

Xposed 碎碎念

最早接触 Xposed 是在 酷安网 上,约摸是2014年,那个时候的酷安还叫酷市场。当时手里就一台小米2s,由于热衷于刷机尝鲜,稀里糊涂地就接触到了Xposed。当时最震撼的莫过于 WechatUI(链接已失效),我们知道,在 Materail Design 未流行的时候,国内市场通行各式各样的美化主题和美化App,也就是那个时候的 MIUI 还有其它的国产 Rom 或者 App 来进行主题美化。而 Android 版微信还有很大的 iOS 风格,WeChatUI 却能将微信修改为 MD 风格,着实惊艳。

7月 27 ,18

Android 笔记:AIDL进阶

在上一篇博客 Android 笔记:IPC - AIDL 中讲到的 IPC 方式之一 AIDL 的基本用法,本文主要记录一下 AIDL 的进阶。  

4月 04 ,18

Android笔记:IPC

IPC (Interprocess Communication) 即进程间通信,需要用到 IPC 主要有以下原因: 应用内自身原因需要采用多进程,比如,大应用模块多,需要的内存大,而 Android 对单进程内存有大小限制,所以需要多进程获取更多的内存空间; 当前应用需要获取其他应用数据。

3月 31 ,18

2018一月新番推荐

狗年吉祥,狗年汪汪汪 (┬_┬)

2月 18 ,18

Android 笔记:Activity 二三事

本文主要记录一些与 Activity 相关的,并不是很容易弄清楚的点。

2月 12 ,18

Hexo 折腾记

本博客以 Hexo 3.2.2 为静态博客框架,以 material 1.3.0 为主题搭建而成。 参阅这两个的官方文档便可以初步搭建一个美美哒的博客了。 本文主要记录一下所折腾的东西。 

2月 09 ,18

Android 文字绘制中的 FontMetrics 和 drawText()

在绘制文字的时候,不可避免的用到 FontMetrics 类和 Canvas#drawText() 方法,这里详细介绍下。

1月 26 ,18

Hexo 折腾:音乐播放

最近想要在博客中插入音乐(网易云音乐),目前找到了三种解决方案: 使用音乐平台自己的插件 结合 MetingJS 使用 APlayer 使用 hexo-tag-aplayer

1月 25 ,18

JitPack - 发布Android库

JitPack.io 是一个 JVM/Android 工程的包管理仓库。

1月 11 ,18

Goodbye 2017 Welcome 2018

白驹过隙,2017已离我而去,2018也匆匆而至。

1月 02 ,18

百度云资源加速下载

基于某些特殊的原因,非会员的情况下,百度云网盘客户端在下载资源时会进行限速。

7月 28 ,17

迅雷极速版 - 时代的眼泪

如果说提供 高效迅捷的P2P 下载服务是迅雷的核心业务,那迅雷产品中从一而终的就是 迅雷极速版。然而,伴随着与QQ旋风 PK 的胜利,迅雷的产品理念逐渐多了些杂乱无章的东西,引发的的恶果之一就有 迅雷极速版 的下架。

7月 28 ,17

Hexo 折腾:利用 Fancybox 添加图片放大预览查看功能

在之前的博客中,有的图片因为页面宽度或者高度的限制,显得比较小,不是很清晰,而我目前使用的主题是 hexo-theme-material ,版本为 1.5.2,该版本主题本身未加入图片预览功能,所以就自己折腾来加入图片点击放大预览效果。

7月 22 ,17

打包导入BaiduExporter到Chrome教程(译)

本文主要译自 Guide on Packaging and Import Baidu Exporter to Chrome,并在一些细微之处做了补充或修改,所有解释权归属于原作者,侵删。

7月 20 ,17

BaiduExporter 介绍与使用

介绍BaiduExporter 是一款可以方便地将百度网盘的下载地址导出为 aria2/aria2-rpc 链接的工具。

7月 20 ,17

下载工具aria2 - 配置和使用

简介aria2 是一款支持跨平台、多源、多协议的轻量级的命令行式的下载工具。它支持 HTTP/HTTPS、FTP、SFTP、磁力链接以及 Medialink等多种下载方式。不仅如此,更值得称赞的是,aira2 还是一款开源免费的软件。

7月 19 ,17

炉石开包引发的血案(雾

昨天星苏直播开炉石卡包,并发起对应的竞猜,竞猜内容大致是: 50包卡包中,出现橙卡数目的奇偶性。 然后就有弹幕说:“哎呀,猜单双多没意思呀,可能性一样,赔率不会悬殊,没意思。” 那么,奇偶出现的可能性是一样吗?

7月 05 ,17

组合数的计算

组合数的计算虽然在一般的编程领域中不太能用到,但是在数学相关领域及ACM中还是有其用武之地的。那么,如何在程序中计算组合数呢?

7月 04 ,17

熊猫tv竞猜引发的组合问题

背景今天晚上在看秋日播炉石的时候,发现最近熊猫tv加入了竞猜活动,可以通过该活动来获取竹子(熊猫tv中货币之一),嘛~ 这就是一娱乐活动嘛。

6月 19 ,17

Android 跳转至微博用户个人信息页面

最近需要去实现应用内跳转至微博的个人信息页面(用户个人主页),其本质就是打开并跳转至第三方App指定的页面。显然,我们可以通过调用 startActivity(intent) 来实现该功能,其关键就是 intent 中需要携带哪些信息。

6月 09 ,17

RecyclerView添加分割线

RecyclerView 并没有 divider 属性,但是我们可以通过 RecyclerView 的 addItemDecoration() 来添加分割线,该方法参数为 RecyclerView.ItemDecoration。

6月 06 ,17

在Android Studio中使用Lambda表达式

Lambda 表达式是 Java 8 的新特性之一,本文主要介绍如何让 Android 项目集成 Labmda 表达式功能。

5月 23 ,17

FloatingActionButton的滚动隐藏和显示

概述FloatingActionButton(FAB)其实就是遵循了 Material Design 设计规范的并拥有特定动作行为的 ImageButton,基本用法参照 ImageButton 即可。

4月 18 ,17

监听RecyclerView是否滑动到底部

最近想动手实现 RecyclerView 的“自动加载更多”功能,即当 RecyclerView 滑动到底部时,执行加载更多操作。这里的关键在于,需要监听RecyclerView是否滑动到底部。

4月 04 ,17

Java反射修改final修饰的属性值

之前在阅读其他源码的时候,想要修改其中被 final 修饰符修饰的字段的值,可行吗? 

3月 13 ,17

处理PopupWindow在Android 7.x中兼容性问题

问题描述PopupWindow 中的 showAsDropDown(View anchor) 用于在指定锚点View下方显示 PopupWindow,在Android 7.0 (api<=23) 以前是没什么问题的,但是在Android 7.x系统上,会在某些情况下出现兼容问题: 如果指定 PopupWindow 的高度为 MATCH_PARENT,调用 showAsDropDown(View anchor) 时,在 7.0 之前,会在锚点 anchor 下边缘到屏幕底部之间显示 PopupWindow;而在 7.0、7.1 系统上的 PopupWindow 会占据整个屏幕(除状态栏之外)。 如果指定 PopupWindow 的高度为 WRAP_CONTENT, 调用 showAsDropDown(View anchor) 时,便不会出现兼容性的问题。 如果指定 PopupWindow 的高度为自定义的值height,调用 showAsDropDown(View anchor)时, 如果 height > 锚点 anchor 下边缘与屏幕底部的距离, 则还是会出现7.0、7.1上显示异常的问题;否则,不会出现该问题。可以看出,情况1和2是情况3的特例。

3月 07 ,17

消除Android 5.0 ~ 7.1.1原生系统中感叹号或叉号

前言在使用Android5.0以上的原生系统过程中,大家会遇到明明自己网络是OK的,但是会在状态栏的移动信号或 WiFi 图标旁显示感叹号(5.0 ~ 7.0.0)或叉号(7.1.1),并且会提示“已连接,但不能接入互联网”的情况… 原因从Android 5.0开始,系统连接网络或切换网络时,系统模块 NetworkMonitor 会向一特定网址发送数据请求,根据响应的结果从而判断网络的连通性。在原生Android系统中,这一特定网址是Google的网址,不翻墙访问不了,故而会出现感叹号或叉号。

2月 07 ,17

监听Android设备网络变化

目标在实际开发中,我们不可避免地需要对请求错误进行处理,通常情况下,我们会这样去处理错误请求: 没有网络的情况下,提示用户网络连接不可用,引导用户打开网络或重新刷新等 有网络的情况下,则是客户端或服务端的错误,给用户相应的提示 如果针对第一种情况,我们需要在网络恢复的时候重新刷新数据或进行其他操作,又应该如何实现呢?以下就是我们的目标: 监听Android设备网络状态 在网络状态发生改变时,做出相应操作 在示例中,我们在网络状态发生变化时,显示当前网络变化的类型。

1月 05 ,17

Hello World

Hello World  :)  

11月 03 ,16

免费ShadowSocks账号

免费提供SS账号的网站在这里我列出几个免费提供SS账户的网站: 免费ShadowSocks账号 世界那么大,我想去看看 SS ISS 这里需要注意的是: 以上这些网站提供的ss账号都会不断更新的,所以如果你使用这些免费的服务的话,可能需要及时更新。当然了,如果你是Programmer,你当然可以写脚本去爬取了对吧 :) 如果这些网站访问不了,可能是换网址了 or 被墙了 or 其他不可抗力的原因…

10月 29 ,16

排序-快速排序及其优化

概念快速排序是交换类排序,采用分治思想,其基本原理是:通过一趟排序,将待排序数组分割成独立的两部分,其中一部分的关键字均比另一部分小;然后再分别对这两部分序列递归进行快速排序,从而使整个序列有序。

5月 06 ,16

排序-归并排序

概念归并排序就是利用归并的思想实现的排序算法。归并排序的原理:假设初始序列含有n个记录,该序列可以看成n个有序的子序列,其中每个子序列的长度为1,然后两两归并,得到⌈n/2⌉(⌈x⌉表示不小于x的最小整数)个长度为2或者1的子序列,然后再两两归并,……,如此重复直到得到1个长度为n的有序序列为止。

4月 27 ,16

排序-堆排序

概念堆: 堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子(如果存在的话)的值,称为最大堆;或者每个节点的值都小于或等于其左右孩子(如果存在的话)的值,称为最小堆。

4月 24 ,16

排序-希尔排序

概念希尔排序是插入类排序算法,它的本质就是分组插入排序,它采取分割策略:将相距某个“增量”的记录组成一个子序列,保证在每个子序列内部分别进行插入排序后得到的结果是基本有序。

4月 21 ,16

排序-插入排序

概念插入排序是插入类的排序算法,基本原理:将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数增加1的有序表。

4月 21 ,16

Java-IPv4地址和int类型数字的互相转换

问题分析对于ipv4的地址来说,如果用字符串的形式存储的话,其占用字节就比较大,比如对于IPv4地址0.0.0.0的字符串,就需要7个字节,IPv4为255.255.255.255 的字符串,需要15个字节,也就是说存储一个ip需要占用7~15个字节。

4月 21 ,16

排序-选择排序

概念简单选择排序是选择类的排序,算法原理:第i次排序(1≤ i ≤n-1),从待排序的n-i+1个记录中, 进行n-i次关键字比较,从n-i+1个记录中选出最小的,并和第i-1个记录进行交换。

4月 21 ,16

排序-冒泡排序及其优化

概念冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直至没有反序的记录为止。因为按照该算法,每次比较会将当前未排序的记录序列中最小的关键字移至未排序的记录序列最前(或者将当前未排序的记录序列中最大的关键字移至未排序的记录序列最后),就像冒泡一样,故以此为名。

4月 20 ,16

查找-二叉搜索树(Java实现)

前言如果查找的数据集是有序的线性表,并且是顺序存储的,查找可以用折半查找、插值查找、斐波那契查找算法(详细算法见:有序表查找(折半、插值、斐波那契查找))等实现。但是正是因为他们是顺序的,所以在插入和删除操作中需要耗费大量时间,也就是说这些算法适合静态查找(只有查找操作),不适合动态查找(不仅有查找操作还有插入删除等操作)。而二叉搜索树正适合动态查找。

4月 13 ,16

查找-有序表查找(折半查找,插值查找,斐波拉契查找)

引言如果待查找的数组是有序的,那么此时的查找就是有序表查找,这对于查找的帮助是很大的。属于有序表查找的有:折半查找(二分查找)、插值查找以及斐波那契查找。

4月 11 ,16

查找-顺序查找

定义顺序查找又称为线性查找,其算法思路是从数组中的第一个(或最后一个)记录开始,将数组中元素逐个与需要查找的关键字进行比对,若发现有相等的,则查找成功;若始终未能相等,则查找失败。

4月 11 ,16

栈的应用之中缀表达式和后缀表达式

中缀表达式: 是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法,但是不易被计算机所解析。 后缀表达式:是一个通用的算术或逻辑公式表示方法, 操作符是后缀形式处于操作数的后面(例:3 4 +),后缀表达式虽然不是人们所习惯的运算表示方法,但是易被计算机解析。

4月 10 ,16

KMP字符串模式匹配算法Java实现

本文灵感来自于July的博客从头到尾彻底理解KMP,并着重于Java实现 :)。 现有字符串匹配算法有不少,如简单暴力的朴素算法(暴力匹配算法)、KMP算法、BM算法以及Sunday算法等,在这里仅介绍前两种算法。

4月 10 ,16

Android根据图片Uri获取图片绝对路径

当我们需要选择并获取图片将其展示出来时,一般会这样处理: // 进入选择图片的界面 private void selectImage(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, YOUR_CHOOSE_IMAGE_REQUEST_CODE); } // 在onActivityResult()回调方法中进行数据获取 protected void onActivityResult(int requestCode, int resultCode, Intent data) { // ... 进行一些判断处理 Uri uri = data.getData(); // ... 接下来进行图片显示 } 以上可以看出我们获取的是Uri类型的数据,要显示图片可以先根据Uri获取图片的位置,然后再显示在界面上,那么如何根据Uri来获取图片的绝对路径呢?

3月 23 ,16

Android获取图片压缩后的Bitmap避免OOM

OOM即Out Of Memory的简称,Android平台避免OOM异常的发生是非常有必要的。而在Android中加载大量大图便可能会导致OOM异常的出现,解决的办法之一就是加载图片之前对图片进行压缩然后再获取图片对应的Bitmap对象,那么应该如何操作呢?

3月 23 ,16

Android获取Bitmap在其ImageView中的偏移量

在ImageView中设置不同的scaleType(包括center, centerInside, centerCrop, fitXY, fitCenter, fitStart, fitEnd, matrix)属性时,ImageView中实际的图片(也就是Bitmap)会根据不同的scaleType属性来确定自己相对于ImageView的位置。

3月 21 ,16

Python3.4在内存中生成zip压缩文件

最近使用Django1.8.5搭建了一个Web项目,用来生成Android客户端的皮肤apk,相当于一个在线的皮肤apk生成工具,于是就理所当然的需要进行在线的下载apk的操作。由于Android项目比较大,一种主题皮肤对应的apk不止一个,一次性下载多个文件的话,于是选择打包下载。

11月 25 ,15