AOSP:如何在 Android Studio 中分别构建 /platform/frameworks/base 或 /platform/frameworks/support

Posted

技术标签:

【中文标题】AOSP:如何在 Android Studio 中分别构建 /platform/frameworks/base 或 /platform/frameworks/support【英文标题】:AOSP: How to build /platform/frameworks/base or /platform/frameworks/support separately in Android Studio 【发布时间】:2016-10-09 03:44:11 【问题描述】:

有没有办法在 android Studio 中分别构建AOSP's /platform/frameworks/base package source 或support library source。

我想在 Android Studio 中阅读框架(基础和支持)代码,因为我不想为 AOSP 中的其余包而烦恼,所以我只将这两个包的镜像仓库作为两个单独的包导入Android Studio 中的项目。我想使用 IDE 的“跳转到源代码”快捷方式(cmd/ctrl+click)浏览代码。但这个方便的功能不会简单地在 Android Studio 中正常工作。当我尝试跳转到属于不同 java 源文件的方法定义时(它说 - “找不到要转到的声明”)。源代码编辑器的这种限制是由于 gradle 构建失败。该项目将无法构建并引发以下错误。

错误:您需要 prebuilts/sdk/99 中的符号链接指向 prebuilts/sdk/current.没有它,studio无法理解current 开发工具包。 ln -s ../../prebuilts/sdk/current ../../prebuilts/sdk/99

有没有办法解决这个问题。我知道我也可以在http://androidxref.com/ 上简单地浏览源代码,但它不如你的 IDE 方便和强大。

【问题讨论】:

浏览它会比构建它容易得多。在任何一种情况下,请参阅侧边栏 - 这是以前多次在其局限性和可能性中介绍过的问题类型。 【参考方案1】:

这是可能的(让 Android Studio 能够向您展示框架代码并让您使用常用的 IDE 工具),但编译不起作用。 但是您问题中的细节似乎表明您实际上并不关心编译,只关心查看/编辑。

此处列出的第一步: http://ronubo.blogspot.com/2016/01/debugging-aosp-platform-code-with.html 可能对你有用。基本上:

    构建您的 AOSP 平台 ( .build/envsetup.sh && lunch - && make ...) 创建要导入的 Android Studio 项目 ( mmm development/tools/idegen && development/tools/idegen/idegen.sh ) 导入项目 (从 Android Studio 打开 android.ipr)

【讨论】:

这正是我想要的。谢谢。所以这意味着我仍然必须克隆整个 AOSP。对?它的大小是多少?大约 25GB 或更多?我可以为此使用外部硬盘吗,因为我的机器只有大约 10-12 GB 的可用空间(它只有 128 GB SSD。:()。 相当大。您不需要其中的绝大多数,但是找出您确实需要的部分并不简单。当然,一旦你运行了 idegen,除了你真正关心的资源之外,你不需要任何东西,所以你可以在任何地方做这部分。【参考方案2】:

并非没有巨大的努力。

有很多原因。例如:

1.框架依赖于system/bionic/external中不同的HAL和库

2.编译框架使用来自linux的特定工具(flex、bison、libgl等)

3.Framework是使用Android.mk系统构建的,需要大量来自build/的flags和编译宏

我也无法想象做你想做的事的动机。如果它要在任何设备上运行,请记住设备制造商会大量修改框架,即使是小型的。实际上是芯片组制造商对其进行修改,然后将其提供给对其进行更多修改的制造商。

【讨论】:

【参考方案3】:

错误:您需要 prebuilts/sdk/99 中指向 prebuilts/sdk/current 的符号链接。没有它,工作室无法理解当前的 SDK。 ln -s ../../prebuilts/sdk/current ../../prebuilts/sdk/99

这个通知已经告诉你应该运行命令:

ln -s ../../prebuilts/sdk/current ../../prebuilts/sdk/99

告诉构建系统使用prebuilts/sdk/current目录中的'current version sdk'替换temp sdk version 99。

你可以试试吗?

【讨论】:

以上是关于AOSP:如何在 Android Studio 中分别构建 /platform/frameworks/base 或 /platform/frameworks/support的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 导入 AOSP 源码

android studio 怎么导入aosp launcher

Android Studio 3.5导入AOSP编译的classes.jar

使用 Android Studio 开发 AOSP

Android Studio:解决AOSP自编译framework.jar引用不到的问题

Android Studio:解决AOSP自编译framework.jar引用不到的问题