TH779's Blog


稻花香里说丰年,听取人生经验。

关于 Android 12 的 vendor freeze,我的理解是这样的

0 条评论 Android 原创 TH779
  1. 这个特性高通是从 SMx350 及以后的平台才开始实施,已经和秋大确认过SMx150(SMx250 仍存疑)及之前的平台不会实施(也就是说,老机子不要想太多)。之所以说 SMx150 及之前的不会有,是因为此特性高通是在对 SDM845+ 的 Android 12 tag(LA.UM.10)中才加入的,目前绝大多数厂商已经不再对其维护 Android 12,无缘该特性。
  2. 这个的意思是,odm、vendor 分区的绝大多数 blobs 和内核出厂后基本保持不变(因为芯片厂给的 BSP 代码不会有太大的更新),后续更新将采取只更新 system 分区的内容来升级 Android 版本。
  3. 这应该算是一件好事(至少在我看来),使得厂家能够减轻升级 Android 版本时的压力,第三方 ROM 维护者在适配第三方系统时变得更为简单。
  4. 理论上其他厂商也会遵从此策略(毕竟这是 Google 所提倡的)。

个人观点,如有错误或补充欢迎在评论区交流。

附:vendor freeze 的样例


超星学习通刷章节学习次数

0 条评论 日常 转载 TH779

随便打开课程某一章节学习页面,按下 F12 并在弹出的开发者工具中选择 Console 选项卡,然后在控制台中粘贴下面的脚本并执行:

var timeout = 35; // 设定刷新的时间间隔,单位为秒
var current = location.href; // 获取当前的 URL

if (timeout > 0)  {
    setTimeout('reload()', 1000 * timeout); // 时间间隔大于 0,timeout 秒之后执行 reload 函数
} else {
    location.replace(current); // 时间间隔不大于 0,仅刷新一次
}

function reload() {
    setTimeout('reload()', 1000 * timeout); // timeout 秒后执行 reload 函数,实现无限循环刷新

    /*
     * 下面两行代码的格式化后的内容为:
     * <frameset cols='*'>
     *   <frame src='当前地址栏的 URL' />
     * </frameset>
     */
    var fr4me = '<frameset cols=\'*\'>\n<frame src=\'' + current + '\' />';
    fr4me += '</frameset>';

    with (document) {
        write(fr4me); // 引用 document 对象,调用 write 方法写入框架,打开新窗口
        void(close()); // 关闭上面的窗口
    };
}

注:刷新时间尽量设置在 30 ~ 60 秒,否则有可能不计算学习次数。

转载自知乎回答:超新星,学习通访问次数怎么刷才有用?,本文已对回答中的脚本做了格式化处理。


记录一下几个常见的排序算法(纯手写)

0 条评论 算法 原创 TH779

虽然使用 STL 函数来进行排序会更方便,但还是想记录一下。


Linux 查找一个文件的重复行或非重复行

0 条评论 Linux 转载 TH779

使用以下命令时请将 <file> 改成相关文件名。

查找重复行:

sort <file> | uniq -d

查找非重复行:

sort <file> | uniq -u

注:转载自互联网,因原文已无法获取,故不注明链接。


如何自己编译自定义 Android ROM

0 条评论 Android 原创 TH779

准备工作

  1. 一台服务器,要求如下:

    • 一个 x86_64 架构的 CPU,性能越强越好。
    • 至少 16G 运行内存。
    • 有至少 200G 的空闲磁盘空间。
  2. 有 Git 基本常识。

开始(以使用 Ubuntu 20.04 编译 LineageOS 18.1 为例)

  1. 安装编译 Android 所用到的软件包:

    apt-get update && apt-get upgrade -y
    apt-get install -y openjdk-8-jdk git gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses-dev libncurses5 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip bc imagemagick ccache schedtool libssl-dev jq patchelf python-is-python3