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

时间:2015-03-23 21:28:28

标签: android eclipse android-studio android-source

背景

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操作系统和Android Studio上运行吗?

3 个答案:

答案 0 :(得分:4)

  

如何导入这些项目?

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

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

1.与AOSP其他项目的依赖性

2.使用普通应用无法使用的隐藏API(这些应用是 旨在成为具有额外API的系统应用程序。这些APIS甚至不存在于SDK中。

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

  

有简单的方法吗?

没有。对于Launcher来说,在几天的工作中,对于Contacts来说,它更容易从头开始。

  

即使在Windows操作系统和Android Studio上也能正常运行?

并非没有多少努力。

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

对于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使用

中关闭build.grale lint
android {
    // Other configuration
    lintOptions {
        abortOnError false
    }
}

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