草庐IT

android - 如何理解android根树的目录结构?

coder 2023-06-05 原文

我已经下载了android源代码。我想对源代码进行一些修改以嵌入一些当前不存在的功能。但这里的问题是我无法理解源代码是如何组织的,可以在何处找到什么样的文件。因此,如果有人可以帮助我理解这将非常有帮助。

最佳答案

这是您下载 Android 源代码时会发现的简短版本。我将省略一些次要目录,并深入挖掘几个重要的目录。基本上你会得到什么(基于当前的 Ice Cream Sandwich 版本),按字母顺序排列:

  • Bionic - Android 的 C 运行时。请注意,Android 不像大多数 Linux 发行版那样使用 glibc。相反,c 库被称为仿生,主要基于 BSD 派生源。在此文件夹中,您将找到 c 库、数学和其他核心运行时库的源代码。
  • Bootable - 引导和启动相关代码。其中一些是遗留的,fastboot 协议(protocol)信息可能很有趣,因为它是由许多设备(例如 Nexus 设备)中的引导加载程序实现的。
  • Build - 构建系统实现,包括所有核心 make 文件模板。这里的一个重要文件是 envsetup.sh 脚本,它在使用平台源代码时会对您有很大帮助。在 shell 中运行此脚本将启用命令来设置环境变量、构建特定模块和源代码文件中的 grep。
  • Cts - 兼容性测试。用于确保构建符合 Android 规范的测试套件。
  • Dalvik - Dalvik 虚拟机实现的源代码
  • 开发 - 与开发相关的项目,例如 sdk 和 ndk 工具的源代码。通常不是您在使用目标平台时触摸的文件夹。
  • 设备 - 不同设备的产品特定代码。在这里可以找到不同 Nexus 设备的硬件模块、构建配置等。
  • 外部 - 包含所有外部开源项目的源代码,如 SQLite、Freetype 和 webkit。
  • Frameworks - 此文件夹对 Android 至关重要,因为它包含框架的源代码。在这里,您将找到关键服务的实现,例如带有包管理器和 Activity 管理器的系统服务器。 Java 应用程序 API 和 native 库之间的许多映射也在这里完成。
  • 硬件 - 硬件相关的源代码,例如 Android 硬件抽象层规范和实现。此文件夹还包含引用 radio 接口(interface)层(与调制解调器端通信)实现。
  • libcore - Apache 和谐。
  • libnativehelper - 用于 JNI 的辅助函数。
  • (内核) - 不是默认源下载的一部分,但您可以通过手动下载或将存储库添加到 repo 工具来访问此代码。包含 Android 版本的 Linux 内核的源代码。
  • Out - 运行 make 后,构建输出将放置在此处。文件夹结构为 out/target/product/。在模拟器的默认构建中,输出将放置在 out/target/product/generic 中。在这里您可以找到模拟器使用的图像来启动(如果您正在为硬件目标构建,则可以下载并刷入设备)。
  • 包 - 包含默认应用程序(如联系人、日历、浏览器)的源代码。
  • 预建 - 包含为方便起见以二进制形式分发的文件。示例包括用于不同开发机器的交叉编译工具链。
  • 系统 - 核心 Android 系统的源代码文件。这是在启用 Dalvik VM 和任何基于 Java 的服务之前启动的最小 Linux 系统。这包括 init 进程的源代码和提供平台动态配置的默认 init.rc 脚本
  • 工具 - 各种 IDE 工具。

  • 除了上述之外,您还有隐藏的 .repo 目录,其中包含 repo 实用程序的源代码。它还包含 list ,指定您要为此 Android 源项目跟踪哪些 git 存储库。如果您有自己的添加,您可以通过在此处添加本地 list 来自动跟踪它们。

    对于平台框架的修改,源代码树的 device/sample 文件夹中提供了一些说明。这将向您展示如何在不修改核心框架的情况下向 Android 添加 API。

    关于android - 如何理解android根树的目录结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9046572/

    有关android - 如何理解android根树的目录结构?的更多相关文章

    1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

      我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

    2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

      关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

    4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

      给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

    5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

      我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

    6. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

      我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

    7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

      我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

    8. ruby - 如何指定 Rack 处理程序 - 2

      Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

    9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

      在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

    10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

      我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

    随机推荐