https://blog.csdn.net/xr_acmer/article/details/37992749
https://blog.csdn.net/qq_20892953/article/details/122023099
静默安装apk以及系统apk安装的2种方式
一文搞懂AndroidAppBundle
资源地址
demo:https://github.com/android/app-bundle-samples
bundletool工具:https://developer.android.com/studio/command-line/bundletool
优势:https://developer.android.com/guide/app-bundle/dynamic-delivery#modularize,https://developer.android.com/platform/technology/app-bundle
引导:https://developer.android.com/guide/app-bundle
免安装:https://developer.android.com/topic/google-play-instant/getting-started/instant-enabled-app-bundle
adb网络代理原理
adbbugreport原理
adb源码
Android反射权限豁免原理
导出路径:aosp/out/soong/hiddenapi/hiddenapi-flags.csv
格式为:签名+annotationProperties
Android内存
- RAM:最快的内存类型
- zRAM:用于交换空间的RAM分区,数据进入zRAM会压缩,减小内存占用,从zRAM出来时会解压
- Storage:持久化数据存储
最简单的Trace工具
Trace工具主要是为了快速的分析java层方法耗时,在收集收集数据时,我们只收集了自己关注的数据,没有其他数据的干扰,可以很快的找到方法索引,分析方法耗时。
搜索方式:类名|方法名,或者方法名
AndroidBinder
oat字节码
AndroidSystemTrace
- systrace 33.0.0之后的版本都没有了,下载
1
wget https://dl.google.com/android/repository/platform-tools_r33.0.0-darwin.zip
Android12
Android13HiddenApi
kernel编译
androidstudio快捷键
Android快捷键
Android和KernelSU内核编译
Android逆向开发
Android启动分析
Android自动化测试冷门知识
问题
- AndroidJUnitRunner 原理 (https://yuque.antfin.com/xiaobao.spf/ad2gcp/ktqa9u)
- 编译产物 (自动化测试生成的2个apk对比)
- 启动方式 (主要研究AndroidJUnitRunner如何被调起)
- 运行方式 (研究 espresso和 uiautomator原理,如何模拟操作)
- espresso和uiautomator是否可以打包到主apk
AndroidJUnitRunner原理
app_process启动进程
app_process进程
- 进程
1
2
3
4
5
6
7
8
9
10
adb shell ps -A
USER PID PPID VSZ RSS WCHAN ADDR S NAME
u0_a143 17275 902 13818920 135244 futex_wait_queue_me 0 S com.example.myapplication2 //app
u0_a143 17302 17275 10771080 2528 SyS_rt_sigsuspend 0 S sh //shell
u0_a143 17304 17302 13006212 73728 do_sys_poll 0 S songpengfei // app_process进程
# app -> shell -> app_process kill app ,一切皆亡
# Xposed的原理就是 重新制作app_process,实现了对系统的接管
Appium在Android中的使用
参考
helloworld: http://appium.io/docs/en/about-appium/getting-started/index.html
appium:https://github.com/appium
Android server: https://github.com/appium/appium-uiautomator2-server
uiautomator:https://developer.android.com/training/testing/ui-automator
uiautomator helloworld: https://github.com/android/testing-samples/blob/master/ui/uiautomator/BasicSample/app/src/androidTest/java/com/example/android/testing/uiautomator/BasicSample/ChangeTextBehaviorTest.java
webdriver标准:https://w3c.github.io/webdriver/
webdriverio 相关可以自由发挥
ART
class加载的几个阶段
加载 - 链接(验证,准备,解析)- 初始化 - 使用 - 卸载
1 | ClassStatus: uint8_t { |
Compose
Android Studio
- Android Studio Flamingo 版本新建项目时已经没有了Empty Compose Activity 模版
参考: https://developer.android.com/studio/releases?hl=zh-cn#updates-to-npw-nmw
eBPF相关
https://source.android.com/docs/core/architecture/kernel/bpf?hl=zh-cn
- eBPF的跟踪点目录 /sys/kernel/debug/tracing/events
java原子性可见性有序性
class字节码
- load 读取数据到操作栈
- add 相加 出栈比较的2个元素,入栈结果
- store 存储到变量表
class字节码解析工具
https://github.com/JuneLeo/class-parse
解析程度:比 editor Class.bt 要解析的更深,同javap解析一样。
属性表也已经全部解析完毕
https://github.com/JuneLeo/class-parse/tree/master/src/main/java/org/example/bytecode/parse/attribute
原理
根据class字节码的组成,分段解析class字节码,依此逐个解析;Parse中pase方法传入解析开始位置索引;返回结束位置索引
1 | public interface Parse { |
JetpackCompose学习
JetpackCompose学习2
Kotlin学习2
依赖
core-ktx
1 | +--- androidx.core:core-ktx:1.7.0 |
Kotlin学习1
- vararg 可变长度类型
- lambda 匿名函数
1
val sumLambda: (Int, Int) -> Int = { x, y -> x + y }
Lamda工具
https://github.com/rev1si0n/lamda/
功能很强大,下列只是使用了其中一部分功能,很炸裂的功能。这里是使用了Lamda Magisk模块。
LLDB命令
LLDB使用帮助
MagiskBootPatch原理
Magiskinit学习
proc_self_maps
Service ANR 流程分析
1 | ANR in com.autonavi.minimap |
此问题发生在Service中超时,抛出异常的时机是在系统进程