如何将AOSP应用程序(启动器,联系人……)导入Android-Studio?

背景

Google在这里有一个适用于所有AOSP应用的网站 ,其中包括其启动器,联系人等…

问题

我想知道如何导入这些应用程序。 更具体地说, 启动器联系人应用程序(虽然我也想了解其他人)。

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

我发现了什么

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

我试图使用Eclipse导入,但由于某种原因,我无法使用工作的“protobuf”库。 我试过从这里使用一个jar,但它没有成功导入它。

还有一个很好的第三方库 ,它有一个导入版本的启动器应用程序,但目前它有点落后,因为它基于Kitkat(4.4)而不是Lollipop(5.0)。

这个问题

你如何import这些项目? 有一个简单的方法吗? 它甚至可以在Windows操作系统和Android Studio上运行吗?

你如何import这些项目?

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

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

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

2.使用普通应用程序无法使用的隐藏API(这些应用程序被设计为具有附加API的系统应用程序)。 这些APIS甚至不存在于SDK中。

3.使用不能与Gradle甚至eclipse插件一起使用的黑客Android.mk系统。

有一个简单的方法吗?

不是。对于Launcher来说,这几天的工作,对于Contacts来说,它更容易从头开始。

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

不是没有很多努力。

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

我的建议是寻找真正的开源应用程序,而不是依赖谷歌的善意。

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

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

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

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

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

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

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