AGP7 适配 Transform

AGP7 适配 Transform

环境:

Gradle 版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

AGP版本:

buildscript {  
ext.kotlin_version = "1.6.20"
dependencies {
classpath "com.android.tools.build:gradle:7.2.2"
}
}

plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}
阅读更多
Kotlin 操作符重载
路由器搭建私人NAS(四) -- 串流

路由器搭建私人NAS(四) -- 串流

系列文章:
路由器搭建私人NAS(一) – 刷梅林固件 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(二) – 下载器安装 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(三) – 文件管理 - 水沝淼 (laoyuyu.me)

在前面几篇文章中,已经安装了一些核心的软件,在本篇文章中将介绍如何打开串流,让家里的所有设备都能直接播放路由器中的多媒体文件。

本文使用的路由器是RX-AX86U
阅读更多
路由器搭建私人NAS(三) -- 文件管理

路由器搭建私人NAS(三) -- 文件管理

系列文章:
路由器搭建私人NAS(一) – 刷梅林固件 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(二) – 下载器安装 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(四) – 串流 - 水沝淼 (laoyuyu.me)

在前面两篇文章中,已经介绍文件的下载和系统的刷入,在本篇文章中将介绍如何管理路由器里面的文坛吗

本文使用的路由器是RX-AX86U
阅读更多
路由器搭建私人NAS(二) -- 下载器安装

路由器搭建私人NAS(二) -- 下载器安装

系列文章:
路由器搭建私人NAS(一) – 刷梅林固件 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(三) – 文件管理 - 水沝淼 (laoyuyu.me)
路由器搭建私人NAS(四) – 串流 - 水沝淼

在上一篇文章中,介绍了该如何刷入梅林系统,刷梅林系统最主要是为了能安装软件,在本篇文章中,将介绍安装一些软件达到nas的效果。

本文使用的路由器是RX-AX86U
阅读更多
frida教程(一)

frida教程(一)

首先,frida是啥,github目录Awesome Frida这样介绍frida的:

Frida is Greasemonkey for native apps, or, put in more technical terms, it’s a dynamic code instrumentation toolkit. It lets you inject snippets of JavaScript into native apps that run on Windows, Mac, Linux, iOS and Android. Frida is an open source software.
frida是平台原生appGreasemonkey,说的专业一点,就是一种动态插桩工具,可以插入一些代码到原生app的内存空间去,(动态地监视和修改其行为),这些原生平台可以是WinMacLinuxAndroid或者iOS。而且frida还是开源的。

阅读更多
获取函数签名
Framework -- wsl编译安卓系统

Framework -- wsl编译安卓系统

最近在研究研究android系统源码,打算在编译一个room验证下自己的想法,在windows上折腾很久,终于算是在windows上把安卓系统编译出来了。

阅读更多
Gradle -- 统一依赖库版本

Gradle -- 统一依赖库版本

这么多年的安卓开发中,让人最头疼的莫过于多个项目之间的三方库的版本统一,用过多种多样的版本统一方式,从最开始的ext,到buildSrc,再到自定义插件,无论是哪种方式都没有完全解决这个疼点。
现在在gradle 7.0以上的版本中,gralde官方添加了一个新的特性Catalog,用于统一不同项目之间的版本依赖库。

阅读更多
WSL系列--Wslg使用

WSL系列--Wslg使用

是 Windows Subsystem for Linux GUI 的缩写,这个项目的目的是在一个完全集成的桌面体验中支持在 Windows 上运行 Linux GUI 应用程序,比如可以在wslg中运行idea

阅读更多

Android Dex加载流程

Android 系统加载Dex 分两步:
首先是开发者通过Jave Api 调用加载Dex的方法;
然后是jvm调用Native的方法进行加载Dex文件

JAVA中加载一个DEX

DexClassLoader classLoader = new DexClassLoader(dexPath, OutputDir.getAbsolutePath(),null,getClassLoader())
阅读更多

安卓功耗优化

优化电池续航时间  |  Android 开发者  |  Android Developers

一、原理

PowerManager 用来控制设备的电源状态. 而 PowerManager.WakeLock 也称作唤醒锁, 是一种保持 CPU 运转防止设备休眠的方式.

  • WakeLock是什么

    WakeLock是Android框架层提供的一套机制,应用使用该机制可以达到控制Android设备状态的目的。这里的设备状态主要指屏幕的打开关闭,cpu的保持运行。简单的理解WakeLock是让系统保持”清醒”的一种手段.

  • WakeLock作用

    当手机灭屏状态下保持一段时间后,系统会进入休眠,一些后台运行的任务就可能得不到正常执行,比如网络下载中断,后台播放音乐暂停等。WakeLock正是为了解决这类问题,应用只要申请了WakeLock,那么在释放WakeLock之前,系统不会进入休眠,即使在灭屏的状态下,应用要执行的任务依旧不会被系统打断。

  • WakeLock有那些分类

    WakeLock是PowerManager的内部类,其代码路径位于:

    frameworks/base/core/java/android/os/PowerManager.java
  • WakeLock 分类如下:

    • PARTIAL_WAKE_LOCK: 灭屏,关闭键盘背光的情况下,CPU依然保持运行。
    • PROXIMITY_SCREEN_OFF_WAKE_LOCK: 基于距离感应器熄灭屏幕。最典型的运用场景是我们贴近耳朵打电话时,屏幕会自动熄灭。
    • SCREEN_DIM_WAKE_LOCK/SCREEN_BRIGHT_WAKE_LOCK/FULL_WAKE_LOCK:这三种WakeLock都已经过时了,它们的目的是为了保持屏幕长亮,Android官方建议用getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);方式替换。因为比起申请WakeLock,这种方式更简单,还不需要特别申请android.permission.WAKE_LOCK权限。
    • DOZE_WAKE_LOCK/DRAW_WAKE_LOCK: 隐藏的分类,系统级别才会用到。

如果是PARTIAL_WAKE_LOCK, 无论屏幕的状态甚至是用户按了电源钮, CPU 都会继续工作. 如果是其它的唤醒锁, 设备会在用户按下电源钮后停止工作进入休眠状态.

  • WakeLock的flag如下:
    • ACQUIRE_CAUSES_WAKEUP: 点亮屏幕,比如应用接收到通知后,屏幕亮起。
    • ON_AFTER_RELEASE: 释放WakeLock后,屏幕不马上熄灭。
    • UNIMPORTANT_FOR_LOGGING: 隐藏的flag,系统级别才会用到。
阅读更多