我应该在Android应用中使用Maven吗?

46

我主要使用Java编程,并在所有项目中使用Maven。我非常喜欢使用Maven,因为它很容易下载源代码和文档,更重要的是,我不需要将外部库的副本保存在我的项目源代码文件夹下。

我开始开发一个Android应用程序,发现Eclipse的Android插件非常好用。但是,所有提供的示例都不是Maven项目,所以我不知道如果我使用Maven,是否仍然可以获得Android插件的所有功能,或者使用Maven是否存在任何缺点。

所以问题是:

  1. Eclipse的Android插件的所有功能是否仍然可用?
  2. 与使用正常构建(我认为是Ant,但不确定)相比,是否会更加困难?
  3. 是否存在其他缺点,例如最终应用程序的文件大小(Maven倾向于将许多内容捆绑在一起)或获取Maven存储库上最新库的困难程度(这可能与Android不同)。

请不要指向此maven support for android projects?

我想从有经验的开发人员那里得到答案。我已经知道可以使用Maven来构建Android应用程序。我需要知道的只是是否应该使用它。


你是否需要Maven?换句话说,你需要什么功能?Maven只捆绑您定义的依赖项和传递依赖项,不确定您对大小的担忧是什么。 - Dave Newton
2
我想使用Apache Common库和Spring框架,但如果不必要的话,我不想把jar文件放到我的源代码文件夹中。显然,即使您不需要它们,Spring仍然依赖于许多东西,当您在maven中使用时,即使您不知道,也会将它们包含进来。 - gigadot
2
@DaveNewton 是的,我相当了解如何使用Maven。对于这个问题,我不想讨论我可以用Maven做什么。我想知道是否应该在Android项目中使用Maven。 - gigadot
@DaveNewton 如果我能控制那个,我还应该使用它吗?对于Eclipse的Android插件,我会完全没有问题吗?有关文件大小的担忧只是可能发生的缺点的一个例子。在一些不使用maven的应用中,他们只包括他们需要的库类(有些类不依赖于jar文件中的每个其他类)。如果我要使用maven,我将无法控制这一点。 - gigadot
请记住,ProGuard 可以删除(或尝试删除)未使用的类,并且如果您采用这种方法,有各种 Maven 方法可以创建所有内嵌的 JAR 包。在我看来,鉴于当今使用了多少反射技术,这可能存在很大风险,因为通过静态字节码分析难以确定反射依赖关系。 - Dave Newton
显示剩余4条评论
6个回答

35

我团队目前的任务是开发一个Android应用程序。由于这是一个小型应用程序,也是某种原型,我们决定评估Maven和Android Eclipse插件。

简而言之:

两名开发人员花了三天时间,但是他们无法在Maven项目中获得 Android Eclipse插件的功能。

  • R类没有根据我们的资源进行更新
  • 我们无法直接从Eclipse中启动模拟器或连接的设备来启动应用程序

由于这些问题严重影响了我们的开发进度,我们决定不使用Maven来开发该应用程序。 但如果您知道如何解决这些问题,我很乐意听取解决方案!


1
我认为Intellij IDEA会是最佳选择,因为它总是比eclipse更好,我的maven配置来自https://github.com/JakeWharton/butterknife,使用IDEA可以很好地运行或调试Android项目。 - VinceStyling
我可能来晚了,但是看一下这个项目:https://simpligility.github.io/android-maven-plugin/ - Dan Gerchcovich

12
如果您想要快速运行测试,几乎被迫使用maven。因为robolectric是正确的选择。他们说在Eclipse下通过maven设置Roboletric可能更容易(他们正在使用IDEA)。
话虽如此,您是否阅读了这篇文章那篇文章?您收到了什么错误信息?
我通常会犯的错误:
  1. use maven >= 3.0.3 ! And avoid that embedded thing in eclipse. (This was necessary only for robolectric, if I remember correctly)
  2. use ~/.m2/settings.xml as described on the robolectric page to set up the android path
  3. specify your android sdk also properly in the local.properties and under Preferences -> Android -> SDK location
  4. Further read this and that or just try the mavenized robolectric example itself, which worked for me. Import it as existing maven project.
  5. Install the necessary sdk (in my case 2.2_r3) via maven-android-sdk-deployer and

    export ANDROID_HOME=/path/to/android/sdk
    mvn install -P 2.2
    
  6. And did I mention this strange tool: m2e-android - not sure why one needs so many stuff with Eclipse ... here you can install it via software updates http://rgladwell.github.com/m2e-android/updates/master/m2e-android/

希望我记得所有步骤都是正确的。祝你好运!
更新:
在没有 Maven 的情况下切换回 Eclipse 作为 IDE 的普通 Android 项目会出现奇怪的问题:http://groups.google.com/group/robolectric/browse_thread/thread/ac814076c40d9df1
但这个 Maven 冒险的好处是我现在可以通过 NetBeans 轻松地测试和调试我的项目 :)

1
这篇文章链接(http://www.wakaleo.com/blog/302-android-development-with-maven) 出现了404错误,请问能否在此概括一下内容? - Avinash R

2
众所周知,Android开发已经从Eclipse迁移到了Android StudioAndroid Studio的构建系统包括一个用于Gradle的Android插件。Gradle是一种高级构建工具包,可管理依赖项并允许您定义自定义构建逻辑。

构建系统与Android Studio无关,因此您可以从Android Studio或命令行调用它。

Android Studio构建系统支持远程Maven依赖项。 如您所知,Maven是一种流行的软件项目管理工具,可使用存储库来组织项目依赖项。

您可以通过命令行从Android Studio在计算机上构建Android应用程序,从而避免了Eclipse中存在的插件混乱。
查看this教程以使用Maven构建Android应用程序。
请参阅有关Gradle构建的更多信息。

2
我建议在Android的专业开发中避免使用Maven。原因如下:
  1. Google正在投入时间保持Android Studio与Gradle的集成。 因此,从一开始使用Maven就需要额外的工作。
  2. 如果必须使用Maven(例如管理依赖库),则Gradle可以使用Maven插件。请参见https://docs.gradle.org/current/userguide/maven_plugin.html
  3. 通过将Maven作为主要构建工具,您将下载大量不需要的依赖项,并且不确定它们来自哪里。 这违反了对于Android应用程序,您理想情况下只需要您的代码和Android平台的概念。 换句话说,您涉及了许多不需要的库/代码。

简而言之,在Android构建工具中使用Maven比必要的工作要多得多,并且会创建一个管理噩梦(个人意见)。

试试这个例子:

  1. 在炉子上加热平底锅。
  2. 拿起一个生鸡蛋。说:“这是你的Android应用程序。”
  3. 将鸡蛋打入平底锅。
  4. 说:“这是你使用Maven-with-rats-nest-dependency-tree-and-unknown-code-downloads-that-you-don't-need-anyway的Android应用程序。”
  5. 等待鸡蛋烤焦。
  6. 说:“这是您的Android应用程序,当Maven构建将无用或有问题的库与您的Android应用程序打包在一起时。”

这个问题已经几年了,所以情况发生了很大变化。当时还没有Android Studio,只有Eclipse插件。尽管问题特别涉及Maven,但如果其他依赖管理工具与IDE无缝配合,我也不介意使用它们。最后,我不太同意你的第三点。无论是否使用构建工具,你肯定需要在你的Android项目中拥有你需要的一切(这并不总是在平台上),以便构建它,因此使用Maven并不违背这个概念。实际上相反。 - gigadot
我知道这是一个旧答案,但我认为在Gradle中也会存在老鼠窝依赖树问题。 - Manohar Bhat
我很高兴即使在今天,人们仍然认为这篇文章很相关!我认为这是一个设计问题。我认为这个问题永远不会消失,直到有不同的人决定Android Studio的事情。我知道这么说有争议,但我的好天啊。看看Groovy是如何添加到构建系统中的。它是同样混乱的类型。管理者批准构建系统变更,因为“当时似乎正确”,但他们很少考虑到他们所创建的下游混乱。如果他们没有时间适当地解释事情,那么他们就不应该做出改变。 - Coder Roadie

0

根据我在Intellij中的经验,我使用Maven作为Android开发过程中的构建自动化工具。我是通过Packtpub的“使用Maven进行Android应用程序开发”学习它的。


0

我已经能够使用Maven开发Android应用程序,使用Eclipse(Kepler)的Android Development Tools和Android for Maven Eclipse 1.0.1(m2e-android)。请按照这些说明http://rgladwell.github.io/m2e-android/。在使用Android Quickstart Archetype创建新项目后,请修改pom.xml文件。添加Android平台版本。Eclipse(m2e)会报告pom.xml上android-maven-plugin声明的错误。要解决此问题,请遵循亚历山大在Error in maven pom xml file: Building Android project中的回应。然后使用Eclipse更新Maven项目,就可以了。


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