0%

资源地址


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#modularizehttps://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

阅读全文 »

memory-types.svg

  • RAM:最快的内存类型
  • zRAM:用于交换空间的RAM分区,数据进入zRAM会压缩,减小内存占用,从zRAM出来时会解压
  • Storage:持久化数据存储
阅读全文 »

Trace工具主要是为了快速的分析java层方法耗时,在收集收集数据时,我们只收集了自己关注的数据,没有其他数据的干扰,可以很快的找到方法索引,分析方法耗时。
搜索方式:类名|方法名,或者方法名

阅读全文 »

IServiceConnection

bindService,我们会传递一个ServiceConnection对象,这个ServiceConnection对与IServiceConnection做一个映射,系统帮我们初始化完成Service后会将我们自己写的Binder Stub(Server端)通过IServiceConnection返回给Client端

阅读全文 »

  • systrace 33.0.0之后的版本都没有了,下载
    1
    wget https://dl.google.com/android/repository/platform-tools_r33.0.0-darwin.zip
阅读全文 »

日志

NOTE: appcompat.sh is still under development. It can report
API uses that do not execute at runtime, and reflection uses

阅读全文 »

疑问

  1. root问题,你想象中手机root后是什么样子的?
    1. 手机root之后,是不是每个应用进程都具有了root权限?
    2. 如果root了,是不是就可以调用系统api了?
    3. 老听别人说,利用一个安全漏洞,获取了root权限,是怎么实现的?
    4. 自己编译的aosp的root和传统的root有啥区别?
  2. 我听说过xposed,但是我不知道怎么使用xposed,xposed模块开发难不难?
阅读全文 »

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,实现了对系统的接管
阅读全文 »

参考
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 相关可以自由发挥

阅读全文 »

编译dex字节码为机器码

虚拟机的创建

阅读全文 »

加载 - 链接(验证,准备,解析)- 初始化 - 使用 - 卸载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ClassStatus: uint8_t {
kNotReady = 0//零初始化类对象在此状态开始。
kRetired = 1//退役,不应该使用。请使用新克隆的那个。
kErrorResolved = 2
kErrorUnresolved = 3
kIdx = 4//已加载,DEX idx在super_class_type_idx_和interfaces_type_idx_中。
kLoaded = 5// DEX idx值解析。
kResolving = 6//从临时类对象克隆。
kResolved = 7// 链接部分
kVerifying = 8//正在验证。
kRetryVerificationAtRuntime = 9//编译时验证失败,运行时重试。
kVerifyingAtRuntime = 10//运行时重试验证。
kVerified = 11//链接的逻辑部分;pre-init完成。
kSuperclassValidated = 12// init的超类验证部分已经完成。
kInitializing = 13// 类初始化正在进行。
kInitialized = 14// Ready to go。
kLast = kInitialized
};
阅读全文 »

  • load 读取数据到操作栈
  • add 相加 出栈比较的2个元素,入栈结果
  • store 存储到变量表
阅读全文 »

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
2
3
public interface Parse {
int parse(int start, byte[] code);
}
阅读全文 »

依赖

core-ktx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+--- androidx.core:core-ktx:1.7.0
| +--- org.jetbrains.kotlin:kotlin-stdlib:1.5.31
| | +--- org.jetbrains:annotations:13.0
| | \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31
| +--- androidx.annotation:annotation:1.1.0 -> 1.2.0
| \--- androidx.core:core:1.7.0
| +--- androidx.annotation:annotation:1.2.0
| +--- androidx.annotation:annotation-experimental:1.1.0
| +--- androidx.lifecycle:lifecycle-runtime:2.3.1
| | +--- androidx.lifecycle:lifecycle-common:2.3.1
| | | \--- androidx.annotation:annotation:1.1.0 -> 1.2.0
| | +--- androidx.arch.core:core-common:2.1.0
| | | \--- androidx.annotation:annotation:1.1.0 -> 1.2.0
| | \--- androidx.annotation:annotation:1.1.0 -> 1.2.0
| \--- androidx.versionedparcelable:versionedparcelable:1.1.1
| +--- androidx.annotation:annotation:1.1.0 -> 1.2.0
| \--- androidx.collection:collection:1.0.0
| \--- androidx.annotation:annotation:1.0.0 -> 1.2.0
阅读全文 »

  • vararg 可变长度类型
  • lambda 匿名函数
    1
    val sumLambda: (Int, Int) -> Int = { x, y -> x + y }
阅读全文 »

boot.img解压

1
2
3
python /Volumes/android/aosp/system/tools/mkbootimg/unpack_bootimg.py \
--boot_img=/Users/juneleo/Downloads/magisk_patched-26300_WZdn1.img \
--out /Users/juneleo/Downloads/magisk_boot
阅读全文 »

mmap映射

  • 7c70179000-7c7017a000 内存地址
  • rw-s rwx权限
  • 磁盘文件:/data/media/0/Android/data/com.amap.trace.sample/files/monitor/monitor_1679454363722.txt
阅读全文 »

1
2
3
ANR in com.autonavi.minimap
PID: 28415
Reason: executing service com.autonavi.minimap/com.alipay.mobile.common.logging.process.LogServiceInPushProcess

此问题发生在Service中超时,抛出异常的时机是在系统进程

阅读全文 »