【问题标题】:How to import the AOSP apps (launcher, contacts,...) into Android-Studio?如何将 AOSP 应用程序(启动器、联系人、...)导入 Android-Studio?
【发布时间】:2015-05-27 01:31:34
【问题描述】:

背景

Google 为此处的所有 AOSP 应用提供a website,其中包括其启动器、联系人等...

问题

我想知道如何导入这些应用。更具体地说,the launchercontacts 应用程序(尽管我也想了解其他应用程序)。

事情并不是那么简单。您不能只导入克隆的项目,仅此而已。即使您使用 Eclipse(根据文件夹hirerchy,这似乎是这些存储库上使用的官方工具),它也不会那么容易工作。

我发现了什么

我找到了一个关于如何导入启动器(版本 4.4.x)的old post,但它使用的是 Eclipse,我认为需要 Linux 来构建一些文件。

我尝试使用 Eclipse 导入,但由于某种原因,我无法使用有效的“protobuf”库。我尝试使用来自here 的 jar,但它没有成功导入它。

还有一个 nice third party library 有一个导入版本的启动器应用程序,但目前它有点落后,因为它基于 Kitkat (4.4) 而不是 Lollipop (5.0)。

问题

您如何导入这些项目?有没有简单的方法?它甚至可以在 Windows OS 和 Android Studio 上运行吗?

【问题讨论】:

  • 我不特别了解启动器和联系人应用程序,但一些库存的 AOSP 应用程序无法针对 Android SDK 构建。它们只是为了与平台一起构建,并将它们放入 Eclipse 或 Android Studio 需要一些工作。
  • 我明白了。我想知道:他们是如何建造一切的?他们使用 Android-Studio 还是 Eclipse ?他们真的导入了我在这个网站上写的所有东西(以及更多)吗?看起来有很多东西要编译......我也想知道我是否可以在那里提交更改以供他们确认,以改进任何工作方式。
  • 一个完整的 Android 平台源代码工作区大小为数十 GB,并且需要相当长的时间来构建(使用 GNU make)。请参阅 source.android.com/source/contributing.html 了解如何贡献。
  • @MagnusBäck 所以每个想要贡献的人都需要下载这么多的代码和资源并编译它(这可能需要很多时间)?甚至添加任何东西都需要很长时间(因为您也需要对其进行测试)。怎么不“碎片化”,让每个部分都可以编译,便于单独处理?
  • 可能是因为在某些时候这样做更容易,而且他们到目前为止还没有优先考虑解开这些特定应用程序的任务。不过,这项工作已通过其他应用程序完成。

标签: android eclipse android-studio android-source


【解决方案1】:

对于Launcher3,您可以访问https://android.googlesource.com/platform/packages/apps/Launcher3/+/android-6.0.1_r9

aosp Launcher3现在添加了build.gradle文件,你可以直接将整个目录复制到你的工作目录,并改变gradlew文件模式让它可以执行,然后使用./gradlew clean && ./gradlew build来构建Launcher3。您还需要在build.grale 使用中关闭lint 的abortOnError

android {
    // Other configuration
    lintOptions {
        abortOnError false
    }
}

注意:不要更改build.gradle中的protobuf版本,否则可能会破坏构建过程。

【讨论】:

  • 当我通过 Android-Studio 打开时出现错误:错误:无法找到方法 'org.gradle.api.internal.file.DefaultSourceDirectorySet.(Ljava/lang/String; Ljava/lang/String;Lorg/gradle/api/internal/file/FileResolver;)V'。此意外错误的可能原因包括:...
  • 不要更新 build.gradle 中的 gradle 工具和 protobuf 工具版本,然后重试。
  • 我又试了一次。我没有更新任何东西。它只要求一个 gradle 包装器,我接受了。我收到此错误:“错误:无法确定接口 com.android.builder.model.AndroidProject 的类路径。Gradle 'Launcher3-5fcaab43e603ceabd1d71ec355c8a0b59aac8cf0.tar' 项目刷新失败”。我不明白你对做什么的解释。 “更改 gradlew 文件模式以使其可以执行”是什么意思?以何种方式改变?而且,项目的构建不应该通过 IDE 来完成吗?
  • android studio 可以做到。 origin launcher3 存储库不提供 gradlew 和 gradle 包装文件,所以我需要从我的其他 android studio 项目中复制它们。有时候因为linux的文件系统不能执行,所以我说需要让gradlew才能执行。我尝试了 agian,我从官方存储库下载了 launcher3 代码,并检查到至少 android 6.0 提交(android 7.0 的 launcher3 gradle 现在不起作用),并添加 gradlew 和 gradle 包装器,它工作正常。如果需要,我可以上传到github。
【解决方案2】:

这是另一种方法。 AOSP 应用程序旨在“原生”,首先你应该想,这意味着什么? 这实际上意味着它们打算在您的主 AOSP 目录上执行 envsetup 和午餐后通过“mm”命令进行编译。另请注意,每个应用程序的 Android.mk(位于 aosp/packages/apps)编译文件以将它们存储在最终图像的 /system/app 文件夹中。 所以是的,这种方法很难导入到 AndroidStudio,因为这种类型的编译缺少 AndroidStudio 的 gradle 构建系统,它实际上以完全不同的方式工作。

您可能会遇到的其他问题: - 由于原生 AOSP 应用程序存在于 Android 中的 /system 上,并且使用 odex 优化进行编译,因此在尝试安装任何派生工作时可能会遇到麻烦,除非您更改模块名称和 AndroidManifest 文件中的应用程序名称。

一个简单的解决方案: 只需启动一个新的 Android Studio 项目并将相关的 java 类和资源从 aosp 导入到您的项目中。我知道这听起来像是一个“懒惰”的解决方案,但仍然采用这种方法,您应该确保将您的应用程序命名为与 AOSP 应用程序不同的名称(不同的模块名称),这样它就不会与本机 aosp 应用程序(或任何派生应用程序)发生冲突例如 GoogleCamera(从 AOSP Camera 扩展而来))。这也将设置正常创建 Android 应用程序所需的 gradle 环境。 希望这会有所帮助。

【讨论】:

  • 你说的有道理,但我还是想知道最短最简单的方法。
  • 根据我的经验,我推荐的可能不是最短的,但考虑到 gradle 构建系统,它是正确执行此操作的最简单方法,而不会避免任何冲突或解决方法。把它想象成只是 java 类,你甚至可以将包作为库导入并重用它。除非您的目标是扩展本机应用程序,否则这仍然是我的推荐。干杯
  • 好的,我会再试一次。我仍然希望有一个更简单的方法来做到这一点。在这里,为尝试提供帮助而 +1。 :)
  • 谢谢,顺便问一下,你试过这个吗? stackoverflow.com/questions/16727607/…。干杯:)
  • 我认为我不需要/想要这个链接。
【解决方案3】:

您如何导入这些项目?

您只需克隆他们的 git 存储库。 然而,编译它们的唯一方法将是所有 AOSP 项目。

试图在没有它的情况下编译应用程序是不可能的,因为以下因素的组合很丑:

1.与AOSP其他项目的依赖关系

2.使用常规应用程序不可用的隐藏 API(这些应用程序是 设计为具有额外 API 的系统应用程序)。 SDK 中甚至不存在这些 API。

3. 使用 Android.mk 系统和 Gradle 甚至 eclipse 插件都无法使用的 hack。

有什么简单的方法吗?

没有。启动器只需几天的工作时间,而联系人则更容易从头开始。

它甚至可以在 Windows 操作系统和 Android Studio 上运行吗?

并非没有很多努力。

还有一件事,您在 Nexus 设备中看到的应用程序并不是编译您从 Google 网站下载的代码的结果。 他们的应用程序经历了许多补丁周期和质量检查,而您将编译的产品会导致非常错误的产品,需要大量维护。

我的建议是寻找真正的开源应用程序,而不是指望 Google 的好意。

【讨论】:

  • 是的,我所说的“导入”也意味着能够很好地编译它。无论如何,为什么有这么多发射器是基于 AOSP 的?
  • 我只能猜测人们确实努力工作并使其成为独立应用程序。启动器比其他项目更容易。
  • 好的,既然你已经付出了很多努力来写作并试图提供帮助,你会得到 +1,但我仍然想保留这个问题。也许有人,在未来的某个时候,会找到一种方法来轻松导入这些项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
相关资源
最近更新 更多