AOSP 目录结构说明
bionic
: 包含 Android 的 C 标准库(libc)、数学库(libm)、动态链接器(linker)等基本库的实现。专为 Android 设计,优化了性能和内存使用。bootable
: 包含启动相关的代码,例如 recovery 系统,用于更新和恢复设备的小型独立操作系统。build
: 包含构建系统的核心脚本和配置文件,用于编译 Android 源代码和生成系统镜像。cts
: Compatibility Test Suite(兼容性测试套件),用于验证设备兼容性以确保应用在所有设备上的一致性表现。dalvik
(在较新版本的 Android 中已被移除): 早期 Android 版本使用的 Dalvik 虚拟机的源代码。development
: 包含用于开发和测试的应用程序和工具,例如模拟器配置、测试工具等。device
: 包含特定硬件设备的代码和资源,如设备制造商和运营商的定制。docs
: 项目文档。external
: 包含 Android 系统使用的第三方库和工具。frameworks
: 包含大部分的 Android 框架层代码,支持所有 Android 应用运行的核心组件。hardware
: 包含与硬件相关的接口和抽象层代码,支持不同的硬件组件。libcore
: 包含 Android 核心库,例如 Java 核心库的实现。out
: 编译过程中生成的输出文件存放位置,包括最终的系统镜像文件。packages
: 包含 Android 中的标准应用程序和库,例如电话、联系人应用和 WebView。prebuilts
: 包含编译 Android 源代码所需的预编译工具和库。system
: 包含操作系统的核心组件,如 init 进程和各种系统服务。vendor
: 通常包含供应商特定的代码和资源,这些通常是与特定硬件密切相关的。
替换framework
编译framework
模块路径/framework/base/Android.bp
out/target/product/flame/system/framework/framework.jar
sh
make framework-minus-apex
cp out/target/product/flame/system/framework/framework.jar /system/framework/framework.jar
删除优化文件 .art .oat .vdex/system/framework/oat
/system/framework/arm
/system/framework/arm64
重启zygote
adb shell stop
adb shell start
Android 文件格式说明
.OAT 文件(Optimized Android File):
.oat
文件包含了为 Android 设备优化后的应用程序代码。当 APK 文件安装到设备上时,Android 的运行时环境(ART)会将 APK 中的 DEX 文件编译成机器码,这个过程称为“预编译”或“AOT 编译(Ahead-of-Time Compilation)”,编译后的代码就存储在.oat
文件中。.oat
文件使应用程序启动更快,因为它直接运行编译后的机器码,而不是每次都从原始字节码开始。
.ODEX 文件(Optimized DEX):
.odex
文件是 Android 应用中分离的优化的 DEX 文件。在早期 Android 版本中,系统应用常常将 DEX 文件(包含字节码)预编译成.odex
文件来提升启动速度和系统性能。.odex
文件减少了在应用启动时的 CPU 耗时,因为它已经是预处理和优化过的代码。
.VDEX 文件(Verified DEX):
.vdex
文件是在 Android 8(Oreo)引入的,包含了验证后的 DEX 文件。这些文件用于存储经过验证但未优化的 DEX 文件,从而加快了应用的安装过程以及 ART 的 JIT(即时编译)过程。
.ART 文件:
.art
文件格式与 Android 的运行时(ART)环境相关,主要用于存储预编译的应用代码。不过,在实际使用中,.art
文件并不常见,因为 Android 主要使用.oat
文件来存储这类信息。
创建分支
sh
repo start android-12.0.0_r34_hack --all
下载Github Desktop
sh
export ALL_PROXY="http://192.168.2.12:7890"
#配置源
wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/mwt-desktop.gpg > /dev/null
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mwt-desktop.gpg] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
#安装github-desktop
sudo apt update && sudo apt install github-desktop
几种读取属性的办法
sh
Settings.Secure.getInt(getContentResolver(),Settings.Secure.ADB_ENABLED)
android.os.SystemProperties.get("ro.debuggable");
adb shell getprop ro.debuggable
新增API 要重新生成文档
sh
make update-api
make api-stubs-docs-update-current-api
make api-stubs-docs-non-updatable-update-current-api
读取log
sh
#-E匹配多个条件,用|分割
adb logcat | grep -E "MyGame|Settings"
参阅
- https://huanle19891345.github.io/en/android/art/jni/jni数据转换/ 记录着一些art转换的代码
- https://evilpan.com/2021/12/26/art-internal/ 比较详尽的android runtime 初始化流程
- https://segmentfault.com/a/1190000038357455 Context详解
- https://lixiaogang03.github.io/2021/01/11/Android-AppOpsService/
- https://bbs.kanxue.com/thread-274396.htm android源码调试
- https://www.cnblogs.com/alisecurity/p/5501832.html 让某个方法解释执行
- https://www.cnblogs.com/hellokitty2/p/11248975.html 编译选项(user eng userdebug) 详细说明
- https://juejin.cn/post/7236915296963428408 深入理解Android-Runtime
- https://www.jianshu.com/p/c113ad606080 (UID Userid appid 注解)
- https://miuiver.com/aosp-rom-of-xiaomi/
- https://ukdiss.com/examples/android-instrumentation-aspect-oriented-programming.php 安卓源码AOP
- https://zsxwz.com/2021/03/17/使用dex2oat编译优化app,提升运行速度,无需root-adb/
- https://juejin.cn/post/7016531198516133902 Dex2Oat 优化说明
- https://www.reddit.com/r/androiddev/comments/mfkyr5/byte_buddy_on_android_made_possible/
- https://www.jianshu.com/p/acfb5cdf385c (10种AOP实现方式)
- https://cloud.tencent.com/developer/article/1689561 (一些参数说明)
- https://juejin.cn/post/7226327556197859386 (byte-buddy说明)
- https://cloud.tencent.com/developer/article/2106274 (vdex文件介绍)
- https://github.com/FudanSELab/How-to-replace-framework-in-AOSP
- 在线阅读源码https://cs.android.com/
- Github阅读笔记
- Android笔记关于安卓的相关教程非常全
- 老罗的安卓
- https://yuandaimaahao.github.io/AndroidFrameworkTutorialPages/ AOPS学习笔记
- https://github.com/CoenQian/android-api-guide/tree/master 关于权限相关教程
- FartExt超进化之奇奇怪怪的新ROM工具MikRom
- https://wwm0609.github.io/2018/03/07/pkms-permission/
- https://source.android.com/docs/setup/build/building-kernels?hl=zh-cn
- https://androidperformance.com/2021/10/26/build-android-12/#/1-代码下载
- lancet Android SDK可以使用的AOP框架
- https://windysha.github.io/2018/01/18/Android-AOP编程的四种策略探讨:Aspectj,cglib-dexmaker,Javassist,epic-dexposed/