惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
博客园 - 聂微东
S
SegmentFault 最新的问题
量子位
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页

Android Performance

SmartPerfetto 架构文章 Q&A:8 个深度技术问答 从 Trace 到洞察:SmartPerfetto AI Agent 的 Harness Engineering 实战 OpenClaw 常见问题解答:Token 消耗、能干什么、本地模型、隐私安全、使用体验 我把 OpenClaw 跑在本地三周后,发现它根本不是聊天机器人 Android Perfetto 系列 10 - Binder 调度与锁竞争 Android Perfetto 系列 9 - CPU 信息解读 Android Perfetto 系列 8:深入理解 Vsync 机制与性能分析 Android Perfetto 系列 7 - MainThread 和 RenderThread 解读 Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战 Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程 Android Perfetto 系列 4:使用命令行在本地打开超大 Trace Android ANR 系列 3 :ANR 案例分享 Android ANR 系列 2 :ANR 分析套路和关键 Log 介绍 Android ANR 系列 1 :理解 Android ANR 设计思想 Android Perfetto 系列 3:熟悉 Perfetto View Android Perfetto 系列 2:Perfetto Trace 抓取 Android Perfetto 系列 1:Perfetto 工具简介 Android Perfetto 系列目录 2023 年的方方面面 关于 The Android Performance 知识星球介绍 The Performance Design Of OS OS 设计之性能设计 当 App 有了系统权限,真的可以为所欲为? The Performance 星球茶话会 - 第一期 Systrace 线程 CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇 Systrace 线程 CPU 运行状态分析技巧 - Running 篇 Systrace 线程 CPU 运行状态分析技巧 - Runnable 篇 Android 性能优化的术、道、器 Techniques, Philosophy, and Tools for Android Performance Optimization 回顾 2021
使用 Android Studio 查看 Android Lollipop 源码
Gracker · 2015-01-16 · via Android Performance

Android Studio

作为Google的亲儿子,Nexus手机系列所收到的待遇大家有目共睹.Android5.0出来之后,Nexus5第一时间就升级到了最新的系统.那么作为Google亲儿子的Android Studio同样备受Google的重视,我也是第一时间从Eclipse转投到了Android Studio的怀抱中,从最初的测试版本一路升级到现在的1.0正式版本(今天发布了1.1,果断已经升级了).

这篇文章里的 idegen 方案是 Android Lollipop 时代把整棵 AOSP 导进 Android Studio 的老办法。现在如果只是查代码,优先用 cs.android.com;如果要本地 IDE 跳转和改代码,先按当前 AOSP 流程同步并 source build/envsetup.sh && lunch <TARGET>,然后用 AIDEGen 为具体模块生成工程,例如 aidegen Settings frameworkaidegen packages/apps/Settings frameworks/base。整棵树导入仍然会很重,通常更推荐按模块打开;Rust/C++/Java 混合模块也要按 AIDEGen 的语言/IDE 参数分别生成,而不是继续维护 android.ipr/android.iml 这套旧文件。

关于Android Studio的好处我就不用说了,下面两点就足矣让你转投Android Studio了:

  • Android Studio是Google官方指定的,目前官网已经去掉了ADT, 大家可以在Android开发者官网 中进行查看,目前只有Android Studio提供下载了.
  • Google也表示ADT不再进行维护了.
    转投Android Studio时大势所趋,网上关于如何使用Android Studio的帖子也是满天飞,所以我就不再啰嗦夸奖Android Studio了.看一下下面的图,估计你就会很有欲望了.想查看详细的内容,可以查看Android Studio官方文档

Android Studio Preview

Android 5.0 : Lollipop

Android Lollipop是Google在今年推出的,关于Lollipop的详细介绍可以查看Lollipop官方介绍,我也就不多说了.作为一个开发者,我们不应该停留在表面(即Lollipop的绚丽的界面,和新奇的设计语言Material design,我们更要了解其中的原理.

准备工作

在使用Android Studio查看源码之前,你需要做下面几件事:

  • 下载Android Lollipop源码(当然不一定非要是Lollipop源码,其他的版本也是可以的)
  • 进行过一次完整编译(不编译是无法进行源码导入工作的)
    以上操作可以参考Google 官方教程 以确保万无一失(呵呵).如果访问官方文档或下载源码不顺畅,可以先处理本地网络环境,能花钱解决的事情,就不要花太多时间.

开始

  • 进入Android 源码根目录
  • 执行
    mmm development/tools/idegen/
    这行命令的意思是编译idegen这个项目,生成idegen.jar文件.生成成功后,会显示这个jar包的位置,并显示
    make completed successfully (43 seconds),如果编译失败了,后面会讲到这种情况(比较少见)
  • 执行
    sh ./development/tools/idegen/idegen.sh
    这行命令的意思是生成对应的文件:android.iws, android.ipr, android.iml .如果生成失败,后面也会讲到这种情况.
  • 生成对应的文件后,打开Android Studio,选择打开一个现有的Android Studio项目,选择Android源码的根目录,导入即可(起作用的是android.irp文件).在配置sdk版本之后就可以查看Android 源码了.
  • 已经完成了,没有下一步了.

问题

  • 执行第一个命令的时候编译不过,出现这种情况的原因有好几种:

  • Android 源码没有下载完全

  • 没有进行全部编译

  • 环境变量配置有问题解决方法依问题而定,网上对应的帖子很多,可以自己去找. 推荐这种问题还是去GoogleStackOverFlow 上去问.

  • 执行第二个命令的时候,碰到下面的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Exception in thread "main" java.io.FileNotFoundException: ./out/target/product/hammerhead/obj/GYP/shared_intermediates/res.java (Is a directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:138)
at java.io.FileReader.&lt;init&gt;(FileReader.java:72)
at Configuration.parsePackageName(Configuration.java:204)
at Configuration.rootOf(Configuration.java:180)
at Configuration.traverse(Configuration.java:140)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.traverse(Configuration.java:167)
at Configuration.&lt;init&gt;(Configuration.java:72)
at Main.main(Main.java:37)

解决办法是将
./out/target/product/hammerhead/obj/GYP/shared_intermediates/res.java
修改为:
./out/target/product/hammerhead/obj/GYP/shared_intermediates/res.j
即可.

后记

使用Android Studio看Android源码很爽,下面是他们的优缺点:

优点

  • 和Android 完美结合
  • 代码提示很全
  • 代码跳转很强
  • IDE比Eclipse好看(我说的是黑色主题)
  • 插件很强大(底层是IDEA你懂得)
  • 免费(SourceInsight负分,啥?你用的破解版? 当我没说)

缺点

  • 对C++代码的支持不是很好
  • 有一定的上手难度

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球 : 欢迎加入,多谢支持~

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫