自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

倚竹幽篁

心静,成器。[github/ysy950803]

  • 博客(129)
  • 问答 (1)
  • 收藏
  • 关注

原创 让WCDB兼容最新版Room

然而,WCDB 2.x版本后变成了一个纯ORM框架,虽然也支持Java、Kotlin等语言(本质上就是一层封装,底层接口都一样),但是暂时没有计划支持兼容Room,从官方文档看,2.x版本更纯粹,一套代码跨全平台,所以也不关注各平台的其他框架兼容了。

2024-03-28 14:21:54 698

原创 在assembleRelease之前执行自定义任务

可以看到,createReleaseVariantModel这个预定义的任务其实就是在动态生成assembleRelease,然后removeLogs在preBuild的前面,这样就能保证在代码优化和混淆开始之前,对源码进行自定义修改。上述代码都是一些简单的Gradle脚本,专用于自己项目的一些编译优化,进行大量实践后,完全可以开发成Gradle插件来使用,关键代码都是差不多的,需要的只是熟读Gradle官方文档,了解整个编译构建流程。,那么在preBuild之前就将按序依次执行这3个task。

2024-03-25 16:36:00 400 1

原创 双进程交互实现App自动重启

这个体验确实不错,因为不需要用户手动点击桌面图标重启App,在一些数据恢复备份的场景中,很实用。比如,从云端拉取SQLite数据库db文件或一些prefs配置文件后,会直接覆盖到本地,但进程不重新启动的话,是不会生效的。先在Manifest中声明进程B,为了良好的交互体验,需要实现一个Activity,进程名称自定义,比如此处叫“killer”,是不是很贴切?方法哪些时候是kill的哪个进程,就理解了。基本思路其实很简单,利用Android应用对多进程的天然支持,来实现双进程互拉。

2024-03-25 16:33:24 560 1

原创 解决macOS执行fastboot找不到设备的问题

进入Recovery后,先清除内部储存和缓存,点击Factory reset,再点击Format data/factory reset,点击format data确认格式化。思来想去,我发现我用的Apple官方自带的充电数据线(双头Type-C)来连接手机和电脑,会不会是线的问题?大概查阅了一下资料,有说adb驱动问题的,有说没开USB调试的,这些对我来说都不是问题,因为在电脑开机状态下,我是可以使用adb命令操作手机的,说明驱动什么的都没问题。,可我明明已经用USB线连接好手机和电脑了呀!

2023-08-12 22:11:49 2192 1

原创 给不蒜子(busuanzi)统计数据增加初始值

但是,有个小问题,如果你的网站首次集成这个脚本,计数自然是从0开始的,对于很多已经运行很久的网站,不能很客观的展示数据,我们更想要的是能够从一个初始值开始计数。首先我们看一下不蒜子的源码是怎么实现统计和展示数据的,打开上述脚本中的js文件,可以发现代码还是不多的,格式化美化之后才60多行。分别是site_pv对应网站访问总次数,page_pv对应每个子页面的访问次数,site_uv对应网站访问的人数,并通过给元素的innerHTML赋值来展示数据。计数工具,可以统计网站的访问数据(人数,次数等)。

2023-08-12 22:09:49 830 1

原创 在Android应用中集成使用traceroute工具

traceroute是一个常用于Linux系统的网络工具,它可显示数据包在IP网络中所经过路由的IP地址,理想状态下可探测本机和目标地址之间的所有路由节点。

2023-05-05 18:17:56 2783 1

原创 删除Android Studio中重复的JDK配置

可能因为一些不经意的操作,导致如下这种情况:出现多余重复的JDK路径配置,其实指向的是同一个路径。

2023-02-12 22:16:01 1885

原创 让终端命令更有时间观念

即便oh-my-zsh已经如此强大,还是有不满足需求的地方。

2022-11-05 15:09:43 1165

原创 简单几步实现内网穿透

场景为了避免阐述过多理论,我们直接从需求场景入手,来了解一下为什么需要内网穿透?小明是少数派的一位咕咕作者,在家里电脑稿某文稿了一半,到公司后打算摸鱼继续稿,怎么办呢(此处假定他没有使用任何云同步软件,也不会使用git,就算会用他也忘了提交)?此时,小明想通过ssh等远程访问设备文件的方式来下载家里那半稿子,但他的家庭网络是没有分配公网IP的,无法通过互联网直连。内网穿透就这样派上用场了。所以通俗地讲,内网穿透就是要将流量从公网穿透到内网,让内网设备也能通过公网访问,帮助小明在公司访问家里电脑的

2022-05-24 11:12:11 6139 3

原创 谁家推送服务限制最严格

先说句题外话,又过了这么多年了,没想到国内Android的统一推送还是没有实现。由于工作需要,最近正好在调研各家系统推送服务,我发现从他们的技术文档可以分析出很多有意思的东西,比如说能看出来哪家厂商的推送限制最严格,最考虑用户的综合体验。在讲解之前,我们先简单提几个推送服务的基本概念:设备:用户所持有的某台设备,在技术文档中所提到的日活跃用户数一般也就指日联网设备数应用:某台设备上安装的某个应用,后续我们所描述的推送数量限制都是以此维度比较的推送:应用进程活跃或关闭时,通过系统级的推送通道下发.

2022-05-17 23:52:07 1423

原创 解决iptables导致无法联网的问题

问题先说下我的单机环境是Ubuntu 16.04,只放了点小应用,一直没升级系统(懒),防火墙规则也是简单地使用iptables来控制。今天我因需要重启服务器之后,发现突然连不上了,ssh无法连接,ping也不通,我开始慌了。于是我只能进入云服务器商的后台,用网页版登录,不管你是阿里云还是腾讯云还是国外的服务商,现在大多都有这种功能。进去之后,先任意ping一个公网IP,提示 “Network is unreachable” ,看来这互联网是彻底断了。用ifconfig也能发现本机的公网IP看不见了。

2022-03-01 17:23:05 4763

原创 Rust为Android应用编译so库

前言Rust是个好东西,Google也开始把它用于AOSP了。我们开发应用同样也可以使用Rust来编写原本为C++的Native代码。网上搜罗一圈,入门的文档不多不少,这里稍微归纳整理一下吧,毕竟Hello World是人类的一大步。安装RustRust的文档真的非常棒,目前的翻译版本也几乎满足所有学习需求。安装很简单,参考官网(Rust-lang.org)即可,一行命令:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2022-02-11 15:52:15 6173

原创 Android手机如何修改DPI触发平板模式

前言目前,微信可以支持平板和手机同时登录,不过并不是所有人都有Android平板设备。实际上,我们可以修改系统文件来达到目的。我看了下网上(主要是酷安社区)很多方法其实都已经过时了,包括一些修改工具App。所以你以为改了实际上对微信没用,会发现其他软件都受dpi影响了,但是打开微信还是正常的手机分辨率,也就触发不了平板登录。分析下面我简单说一下原因,主要是很多ROM随着版本升级,可能那些系统配置的参数字段名称已经变了,如果大家还是一味地改以前的参数自然就没有效果,开发那些工具App的朋友们也不能保证

2022-01-28 16:19:59 17784

原创 个人网站Log4j2漏洞风险排查

前言Log4j2漏洞事件已经过去了几个月,影响面可以说是非常的广。本质上还是权限和代码注入问题,这里就不作赘述,和SQL注入在原理和形式上都异曲同工。我个人没太明白还是,如此流行的开源库,竟然开发者和使用者这么久都没发现这个巨大漏洞(可能早有人发现但并未公布),而且作为一个日志记录工具,权限未免太高。修复从互联网上可以查到最新的修复建议:升级到最新版本:目前官方已推出最新Apache log4j 2.15.0版本,可从地址中下载升级:https://logging.apache.org/l

2022-01-24 17:48:48 2838

原创 解决Android Studio升级到Arctic Fox后编译失败的问题

问题从Android Studio 4.1.3升级到最新的Arctic Fox之后,整个组件化工程会编译不过。编译错误显示:e: [kapt] ‘com.sun.tools.javac.util.Context’ class can’t be found (‘tools.jar’ is absent in the plugin classpath). Kapt won’t work.很多同学知难而退,被迫回滚到4.1.3,那怎么行呢?分析首先说,这个错误不是组件化插件的问题,不是Kotli

2021-12-21 15:50:17 881

原创 Apache和PHP环境打开php页面File Not Found问题

问题之前搞了个腾讯云的轻量应用服务器(预装环境LAMP)来玩,结果最近发现网站目录下面的php文件访问不了,在浏览器打开就出现“File Not Found”的提示。搜罗了很多答案,没有一个明确能解决问题的,不过还是得到了一些启示。下面属于我的个例,不一定能解决所有此类问题。解决腾讯云的这种服务器预装的软件都在此目录下面,包括相关配置:[root@VM-0-15-centos ~]# cd /usr/local/lighthouse/softwares[root@VM-0-15-centos s

2021-10-23 15:56:39 3616 1

原创 IDE Eval Reset忘了重置进不去怎么办

问题我相信很多白嫖怪都知道目前JB全家桶“极为先进”的使用方法——其实就是无限重置30天(IDE Eval Reset)。具体使用方法就不赘述了。这里会出现一个问题,尤其是针对电脑上安装了多款JB家的IDE用户来说(比如我就是,IDEA、PyCharm和CLion都在使bai用piao),如果超过30天未打开其中某个IDE进行试用重置,那么你就会发现打不开了,要求你补充License,而且菜单栏也没有地方让你再去打开Eval Reset插件了。怎么办!?或许你唯一能想到的办法就是完全卸载,清空一切相关

2021-10-10 22:44:27 25895 23

原创 Android Shortcut启动导致其他Activity销毁问题

问题我们都知道,从API 25开始,Android加入了类似3D Touch一样的功能,即长按桌面图标可以弹出快捷方式菜单(最多4个)。早期国产系统的桌面Launcher并没有积极适这一功能,所以各大应用也懒得做,后来才逐渐完善。目前包括微信、支付宝等都可以长按弹出快捷方式,支付宝更是支持动态配置。开发文档直接看官方的就行:https://developer.android.com/guide/topics/ui/shortcuts ,静态快捷方式适配很简单,加xml文件就完事,此处不赘述。但在实际

2021-09-27 16:54:02 624

原创 安装Anaconda后终端base前缀问题

问题最近想训练个小模型来用用,于是乎我在macOS安装 Anaconda | Individual Edition ,选择的是图形界面安装(64-Bit Graphical Installer),整个过程很顺利,一路下一步就行了。然鹅,安装完之后,我发现我的终端命令行前缀出现了一个base,像这样:(base) -> ~这就很无语。原因猜测原因应该是Anaconda安装后在shell的配置文件中注入了脚本,因为我用的是zsh,所以打开 .zshrc 文件可见:# >>&gt

2021-08-24 21:33:26 3628 2

原创 最简单改变状态栏文字及背景颜色的方法

问题我们知道,Android的状态栏(StatusBar)是可以由开发者自行更改背景颜色的,至于文字颜色,不能直接由自己修改色值,而是黑白两种颜色,对应的是Light和Dark两种全局主题模式。为了良好的用户体验,我们在状态栏背景为深色时,需要给予白色字体,反之亦然。比如这样:然而,有些时候我们在Light Mode下并不需要黑色字体,就需要自己手动修改了。方法以前我们修改状态栏相关的内容,都是去找各种反射代码,或者各种封装好的StatusBarUtil之类的,不仅代码不优雅,还容易出现千奇百怪

2021-08-23 15:04:01 4339 1

原创 快速解决macOS升级后截图权限授予无效的问题

问题macOS的新版系统Bug Sur也发布了大半年了,今天终于下决心升级。都11.4了,应该挺稳定了吧。结果没想到还是有一些小坑。很多软件都需要一项叫“屏幕录制”的权限,一般用于截图和录屏等功能。我在升级系统后发现,打开相关软件时提示需要重新授予权限,但我发现明明权限已经勾了(如上图),而且反复取消和重新勾选后,依然不行,陷入了无限循环。那你要我怎样?重启了系统还是不行。解决冷静下来,思索了一会儿。发现了这个删除按钮:干脆删了重新添加一下这些应用试试呢?(脏话……)没想到这就可以了,我真是

2021-06-19 19:24:01 7253 8

原创 快速实现Sublime Text的Kotlin高亮

问题Sublime Text是一款非常实用的编辑器软件,偶尔不想开大型IDE的时候,用它来看看代码还是不错的。不过发现在用它来查看Kotlin代码时,默认是一片白,没有语言对应的高亮,点击右下角选择语言时也没有Kotlin这个选项(下图是解决问题之后的)。解决没有高亮看着多不舒服啊,如何快速搞定呢?已经有开源项目帮我们解决了。GitHub - vkostyukov/kotlin-sublime-package: Sublime Text 2 Package for Kotlin Programm

2021-06-19 19:01:19 2132 2

原创 macOS备份迁移系统偏好设置

场景不知道诸位在使用macOS时是否遇到过这样的场景:有两台电脑,想把旧电脑中的系统偏好设置原封不动地迁移(导入)到新电脑中,只关心这些设置,不想迁移其他东西。解决方案1:官方迁移助理其实官方提供了一个方案,叫“迁移助理”。具体操作步骤可见文档:将内容迁移到一台新的 Mac 上,不仅可以迁移系统设置,还包括整个用户帐户下的文件、应用程序等。如图,我们可以在此步骤中只选择“系统与网络”,就能实现系统设置的迁移。方案2:macprefs第一个方案其实是比较安全保险的做法,但是需要注意的是:在

2021-02-24 22:00:16 762

原创 QQ闪照保存小妙招

QQ闪照在IM工具中,QQ较之于微信一直是比较前卫的,毕竟年轻用户居多。比如QQ闪照就是一个有趣的功能,而且已经推出很久了(记得大概是V6.5左右):不管单聊还是群聊都可用,在发送图片时勾选闪照即可,发送成功后所有人都只能看5秒,时间结束后图片被“销毁”,UI层面被打上厚厚的马赛克。这个功能一经推出,不少老司机可谓是既爱又恨,我们暂且不说其功能意义和影响。但是相信大家都思考过,怎么把闪照保存下来?接下来我们就以Android端QQ为例探索一下闪照的持久化存储方式。截图想多了哈哈,Android端

2021-02-24 12:10:08 40613 11

原创 微信Android端如何安全降级

前言最近微信8.0开始灰度更新,小龙给大家整的新功能我就不赘述了。有不少小伙伴等不及灰度,也开始自行下载安装。微信Android端内测下载链接(复制后通过微信打开即可):https://szsupport.weixin.qq.com/cgi-bin/mmsupport-bin/readtemplate?t=page/android_exp__index然而,“后悔药”无论何时都是有市场的。不喜欢or不习惯新版本?想回退旧版本?这让我想到MIUI刷机党回退旧版ROM的麻烦,当然,微信要回退旧版并非难

2021-01-26 13:23:23 6189 1

原创 解决前端开发之微信内置浏览器页面渲染和缓存问题

最近在做一个前端的项目,因为需求是最好能够分享到微信朋友圈,那免不了兼容微信内置的QQ浏览器。我不得不说,微信内置的浏览器简直就是前端开发的绊脚石,业界之毒瘤啊!w(゚Д゚)w说白了就是个手机版的IE,对H5响应式页面支持非常差,但我们必须承认微信这整个生态圈是很NB的。另外页面缓存问题也是大家很烦恼的,由于微信内置的简易浏览器没有提供刷新功能,后台更新图片资源后,根本刷新不了。那么现...

2021-01-07 13:28:08 29378 4

原创 InputMethodManager内存泄漏已成为历史

历史问题相信做过很多业务开发的同学都遇到过Android应用的内存泄漏问题,虽然大部分泄漏都是我们自己菜导致的,但实际上系统服务也有可能出现内存泄漏。毕竟,代码都是人写的,AOSP也不是完美无瑕的。说到系统服务,在处理文本输入的时候,我们以前经常会看到这样的泄漏:这里大家也可自行搜索了解,大致上就是因为InputMethodManager(下简称IMM)实例内部会持有View,而View又持有Activity的引用,最终在Activity退出后没有正确处理View导致了Memory Leak。我们明

2020-11-27 12:55:46 1124

原创 源码茶舍之没有epoll就没有Handler

Handler,英文释义:处理者,处理程序。他就是Android系统中的打工人,背负着传递消息的重任。很多人在第一次尝试去阅读framework源码时,可能也是从Handler消息机制开始的,我们会发现源码的很多地方都用到了Handler。然而,他好像并没有我们想象的那么简单,如果我们要深入探索的话,可以一直追溯到Linux内核。预备本文分析源码均基于API 29,来源于官方AOSP:cs.android.com问号Handler的API使用还是比较简单的,我们比较常用的就是通过类似如下方式来发.

2020-11-19 00:07:28 524 1

原创 Mace-micro引擎编译与测试

官方简介Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台(支持Android, iOS, Linux, Windows)优化的神经网络计算框架。主要从以下的角度做了专门的优化:性能代码经过NEON指令,OpenCL以及Hexagon HVX专门优化,并且采用Winograd算法来进行卷积操作的加速。此外,还对启动速度进行了专门的优化。功耗支持芯片的功耗管理,例如ARM的big.LITTLE调度,以及高通Adreno GPU功耗选项。.

2020-10-25 16:03:59 674

原创 借助acme.sh免费开启网站的HTTPS(Apache2环境)

本文仅记录无套路搞定网站HTTPS的方法。网上搜索的资料实在太杂乱了,就连acme.sh官方文档也不够详尽。主要就三步:生成证书、安装证书、配置SSL。下文以Ubuntu 16.04(版本不重要) + Apache2为例。默认已经安装crontab、openssl等基本工具。网站目录也是默认的 /var/www/html/ 。生成证书1、先做准备工作:# 进入服务器的用户(一般是root)目录然后创建文件夹cd ~mkdir -p ~/.acme.sh/cd ~/.acme.sh/# 配.

2020-07-09 15:22:07 1233

原创 等差数列异或和的小规律

背景异或(xor,运算符号^):按位计算,同0异1,1 ^ 0 = 1 ,1 ^ 1 = 0 ,如此。现定义等差数列 1, 2, ... , n 的 异或和 为 f(n) = 1 ^ 2 ^ ... ^ n ,求f(n)的值。实现我们很容易想到质朴的实现如下:int func(int n) { int xor_sum = 0; for (int i = 1; i <= n; ++i) { xor_sum ^= i; } return xor_s

2020-07-06 17:49:54 902

原创 Magisk与EdXposed框架安装实践(Android P及以上)

记得初中的时候还在用Android 2.3,高中开始刷机,每个月都去追论坛大佬的自定义精简ROM,不亦乐乎,这一晃都过了快十年了。从以前旧版Android(支持到8.x)的Xposed到现在的EdXposed、Magisk等玩机框架,大佬些的脚步从未停歇。模块开发生态也好了很多(得益于Github及各种文档)。不过由于现在ROM厂商越来越深度的定制和限制(当然也是考虑到普通用户的安全),ROOT起来也麻烦了不少。其实我自从以前用Android 4.x时搞过机,后来也很久没接触这些了。最近把手边的测试机器(

2020-07-04 01:08:30 24194

原创 Kotlin变长参数的一些小坑

Java中的变长参数先来看看Java中的变长参数,很简单,为了后面的对比,我们做进行一个连续的传参:import java.util.Arrays;public class TestVarargs { public static void main(String[] args) { test1("1", "2"); } private static void test1(String... args) { test2(args);

2020-06-13 15:19:39 844 1

原创 浅谈JVM语言之函数式编程

Java中的函数式编程闲聊函数式编程在上世纪五十年代就有了,只不过在工业界一直不温不火,最近十年才被广泛认知。其理论基础也并非为编程而设计,而是一种数学抽象(Lamda演算),其实初中就学过了,λ表达式。在JS(建议把JS作为函数式编程思想学习的入门语言,Java的实现略显臃肿,可能不太便于理解)当中,函数式编程算是应用比较多的了。各现代高级编程语言,都或多或少地支持了函数式编程。一些基本特点总结相比平常的指令式编程,函数式编程更在乎执行结果而非过程;函数是一等公民,可以像普通的数值、引用等变

2020-06-10 12:47:39 396

原创 覆盖安装Play Store版本的国产App

前言对于Android平台,如果在国内应用商店安装诸如微信、支付宝等国产大型App,相比去Google Play Store安装,会多要不少权限,即便权限无差异,在隐私政策等规则方面,Play Store也会更严格一些,能上架的应用肯定不敢乱搞。之前也有不少用户反映在Play Store安装的微信要流畅不少,某些功能细节也会有差异。不过由于严格的审核机制,Play Store上的国产App更新频率普遍落后于国内应用商店,如果我们已经安装了国内的最新版本,正常情况下就没办法覆盖安装低版本了。Play St

2020-06-06 12:55:07 2531

原创 用Gradle脚本管理Manifest文件

编译时区分不同的manifest很多Android项目都会区分debug和release的manifest文件,以便调试,一些组件化的项目甚至有多个manifest文件来调试不同的组件。举个简单的例子,在app的build.gradle文件中:android { defaultConfig { applicationId "com.xxx.xxx" } sourceSets { main { if(是否为debug打包) {

2020-06-01 22:36:08 4796

原创 Win10用WSL下载AOSP

WSL还是挺方便的,配合国内镜像源,可以轻松下载Android源码。启用WSL关于Win10启用WSL的方法微软官方的文档非常清晰了:适用于 Linux 的 Windows 子系统安装指南 (Windows 10)。由于我这里只用到WSL 1而非WSL 2,所以Win10版本号更新到1909即可,等2004正式推送再折腾WSL 2吧。安装Ubuntu 20.04直接在微软应用商店搜索Ubuntu即可下载安装。更好地体验WSL,建议安装Windows Terminal这一步非必须,不过Windo

2020-05-17 13:55:18 1627 2

原创 自定义EditText的无障碍描述(不读hint)

问题我们一般给一个控件设置描述时,会这样:xxxView.setContentDescription(``"xxx"``);但是,当你给EditText设置这个时,会发现毫无卵用。为什么呢?搜了下EditText和其直接父类TextView,没有重写setContentDescription方法,那应该不是setXXX时发生改变,而是getXXX的问题。果然,在TextView中发现:/** * Returns the text that should be exposed to acces

2020-05-14 23:44:02 1485

原创 快速修改字节码并重打jar包

背景不管是做Android项目还是Java后端Web项目,我们一般都会引用各种三方库。遇到特殊需求时,可能需要修改jar包中的代码。本文以实际示例讲解一些基本方法,方便大家快速入坑。首先我们都知道直接解压jar包的话,都是class二进制文件,打开后是看不见代码的。之所以可以在开发环境中直接查看jar中的代码是因为IDE已经帮你反编译好了,才能看见Java源码。入坑如何修改这些jar包中的...

2020-03-25 02:04:01 1849

原创 Win10也要愉快地使用Bash

对于习惯了Linux和Mac的同学来说,Windows自带的终端确实不太好用。其实我们完全可以用Bash取而代之。安装Windows Terminal自从巨硬拥抱开源之后,那是骚操作频频。Windows Terminal是一个开源项目,它本身只是一个终端容器,可以装载系统自带的CMD、PowerShell甚至是WSL子系统的终端。下载安装很简单,可以在应用商店直接搜索Terminal安装,也...

2020-02-24 18:16:16 3877

空空如也

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

TA关注的人

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