如何将AOSP应用程序(启动器、联系人等)导入到Android Studio中?

15

背景

Google为所有AOSP应用程序创建了网站,其中包括其启动器、联系人等...

问题

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

问题是,这并不简单。你不能只是导入克隆的项目就完成了。即使你使用Eclipse(根据文件夹层次结构似乎是这些存储库中使用的官方工具),也不那么容易。

我找到的内容

我找到了一篇旧帖子,介绍如何导入启动器(版本4.4.x),但它是使用Eclipse,并且我认为需要Linux来构建一些文件。

我尝试使用Eclipse导入,但由于某些原因,我无法使用工作的“protobuf”库。我尝试使用这里的一个jar文件,但未能成功导入它。

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

问题

你该如何导入这些项目?是否有简单的方法?它可以在Windows操作系统和Android Studio上工作吗?


我明白了。不过我想知道:他们是如何构建所有东西的呢?他们使用Android-Studio还是Eclipse?他们真的导入了我编写的这个网站(以及更多)中的所有内容吗?看起来需要编译很多东西...我还想知道是否可以向他们提交更改以得到确认,以改进任何功能的工作方式。 - android developer
@MagnusBäck 所以,每个想要做出贡献的人都需要下载这么多量的代码和资源并进行编译(这可能需要很长时间)吗?甚至添加任何内容也需要很长时间(因为你还需要测试它)。为什么不把它“分段”,让每个部分都可以单独编译并容易地单独处理呢? - android developer
可能是因为以前这样做更容易,而且他们迄今为止还没有将解除捆绑这些特定应用程序的任务作为优先事项。不过,已经对其他应用程序进行了这项工作。 - Magnus Bäck
@MagnusBäck 可能涉及其他工具。我看到很多奇怪的文件,我不认为 Eclipse 需要它们。 - android developer
有一种方法可以在Eclipse中完成。我不知道如何再做了,但我见过它的实现。您可以构建Android SDK的版本,而不需要剥离符号(这是完整AOSP构建的副产品),然后您可以使用该库代替官方SDK,然后应该能够进行构建。 - Pwnna
显示剩余2条评论
3个回答

4
你怎么导入这些项目? 你只需克隆它们的git存储库。 然而,唯一编译它们的方法是与所有AOSP项目一起进行。 如果不这样做,则无法编译该应用程序,因为涉及以下问题:
1.依赖于AOSP的其他项目
2.使用普通应用程序无法使用的隐藏API(这些应用程序旨在成为具有附加API的系统应用程序)。 这些API甚至不存在于SDK中。
3.使用Android.mk系统进行黑客攻击,这些攻击无法与Gradle或甚至eclipse插件一起使用。
有没有简单的方法? 没有。对于Launcher而言,需要几天的工作,对于Contacts而言,最好从头开始。
即使在Windows OS和Android Studio上,它也能正常工作吗? 不会,除非付出很多努力。
还有一件事,您在Nexus设备上看到的应用程序不是通过从Google网站下载的代码编译而来的结果。 它们的应用经过了许多补丁周期和QA测试,而您将编译的结果将是一个非常错误的产品,需要进行大量维护。
我的建议是寻找真正的开源应用程序,并不指望Google的善意。

是的,“import”也意味着能够成功编译它。不管怎样,为什么那么多启动器都基于AOSP的启动器呢? - android developer
我猜这些人肯定很努力地工作,把它做成了一个独立的应用程序。相比其他项目,启动器特别容易。 - skoperst
3
好的,既然您已经付出了很多努力写作和尝试帮助,我会给您加上+1,但我仍然想保持这个问题开放。也许将来某个时候会有人找到一种容易导入这些项目的方法。 - android developer

4
这里有另一种方法。 AOSP应用程序旨在是“本地的”,首先你应该考虑,这意味着什么? 这实际上意味着,在在主AOSP目录上进行envsetup和lunch后,它们旨在通过'mm'命令编译。此外,请注意,每个应用程序的Android.mk(在aosp/packages/apps中找到)将文件编译为存储在最终映像的/system/app文件夹中。 所以,是的,这种方法使得将其导入到Android Studio变得困难,因为这种类型的编译缺乏Android Studio的gradle构建系统,它实际上是以完全不同的方式工作的。
你可能会遇到其他问题: -由于原生AOSP应用程序位于Android的/system中,并且使用odex优化进行编译,因此在尝试安装任何派生作品时可能会出现问题,除非您更改模块名称和AndroidManifest文件中的应用程序名称。
一个简单的解决方案: 只需启动一个新的Android Studio项目,然后从aosp导入相关的java类和资源到您的项目中。我知道这听起来像是一个“懒惰”的解决方案,但是,采用这种方法,您应该确保将您的应用程序命名为与AOSP应用程序不同的名称(不同的模块名称),以便它不会与原生AOSP应用程序(或任何派生应用程序,例如GoogleCamera(它从AOSP Camera扩展))发生冲突。此外,这将设置所需的gradle环境,以正常创建Android应用程序。 希望这有所帮助。

你说得有道理,但我仍然想知道最短和最简单的方法。 - android developer
根据我的经验,我推荐的方法可能不是最短的,但是在考虑到Gradle构建系统中的任何冲突或解决方法时,这是最容易正确完成的方式。把它看作是普通的Java类,你甚至可以将其作为库导入并重复使用。除非你的目标是扩展本地应用程序,否则这仍然是我的建议。干杯! - Jorch914
好的,我会再试一次。我仍然希望有更简单的方法来完成它。在这里,给你一个+1,感谢你的帮助。 :) - android developer
谢谢,顺便问一下,你试过这个吗?https://dev59.com/WmQn5IYBdhLWcg3wkH7U。干杯 :) - Jorch914
我不认为我需要/想要这个链接。 - android developer

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。此外,您需要关闭build.grale中的lint的abortOnError,使用

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

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

当我通过Android-Studio打开时,它会给我一个错误:Error:Unable to find method 'org.gradle.api.internal.file.DefaultSourceDirectorySet.<init>(Ljava/lang/String;Ljava/lang/String;Lorg/gradle/api/internal/file/FileResolver;)V'。导致这个意外错误的可能原因包括:... - android developer
Android Studio可以做到这一点。原始的launcher3存储库没有提供gradlew和gradle wrapper文件,因此我需要从我的其他Android Studio项目中复制它们。有时,由于Linux文件系统的原因,它无法执行,因此我说需要让gradlew能够执行。我再试一次,我从官方存储库下载了launcher3代码,并检出到最少的Android 6.0提交(Android 7.0的launcher3 gradle现在不起作用),并添加了gradlew和gradle wrapper,它运行良好。如果需要,我可以将其上传到GitHub。 - utzcoz
我仍然不明白你做了什么让它工作。 - android developer
我只是在launcher3的根目录中添加了gradlew和gradle wrapper文件,并在build.gradle上添加了abortOnError,就这样。 - utzcoz
我写下了我所得到的一切。 - android developer
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接