迁移到Android Studio将导致为“单个主项目多个库项目”安装多个应用程序

我有

  • 单个主项目,定义
  • 多个库项目,其中一些定义了

当我使用Eclipse构建和运行具有多个库项目的单个主项目时,将只安装1个应用程序。

但是,如果我迁移到Android Studio以构建和运行具有多个库项目的单个主项目, 则将安装多个应用程序

取决于有多少项目(无论主项目或库项目)定义

我想知道,在构建和运行项目时,是否有任何我在Android Studio中做错的配置导致多个应用程序被安装?

目前,我唯一的解决方法是从所有库中删除这些行( ) projects的AndroidManifest.xml 。 在Android Studio中导入项目库是常见且正确的方法吗? 与在Eclipse中一样,这些行不会在我的设备中安装额外的应用程序。

这就是我的项目结构的样子

在此处输入图像描述

如您所见,第一个文件夹图标看起来与其他文件夹图标不同。 我想这表明,第一个文件夹图标是主项目 ,其他是图书馆项目。

如果只有一个主项目,为什么要安装多个应用程序呢?

在Eclipse中,仅使用主应用程序项目中的AndroidManifest.xml 。 在Android Studio(和Gradle构建系统)中,所有清单都合并在一起。

清单中元素内的以下行表示该活动应显示在启动器菜单中。 如果您不希望这样,请删除这些行。

     

所有这些都是预期的行为。

还有另一种hackish方式。

  1. 查看合并的AndroidManifest.xml。 它应位于: /build/intermediates/manifests/full//AndroidManifest.xml

  2. 搜索LAUNCHER 标签。 在您的情况下,您应该有超过1个LAUNCHER 标签。 我的情况如下:

             ...       

就我而言, com.todddavies.components.progressbar.main是一个库项目,其示例项目已声明为LAUNCHER。 正确的LAUNCHER应该是com.stockhut.SplashScreenActivity

  1. 在主项目中打开AndroidManifest.xml,添加以下内容:

           

    记下标记tools:node="remove" 。 根据Android Manifest Merger文档 :

标记是工具命名空间中的一个特殊属性,用于表示如何解决冲突的特定决策。

因此,带有标记tools:node="remove"标记tools:node="remove"将告诉Gradle在发生冲突时自行删除。 换句话说,我们在某种程度上“迫使冲突”。 这有点像hackish,但它确实有效。

您始终可以在上述路径中validation合并的AndroidManifest.xml。

在Android工作室中,他们一次只能添加一个项目。 如果你有带项目的库,那么你必须在项目中添加整个代码,或者你可以为你的库项目创建jar并将它们添加到你的项目中。

在Android工作室中还有另一种gradle选项。 如果我们想在项目中使用任何库,我们可以在Project的“build.gradle”文件中添加它们的依赖项。

我附加了“build.gradle”文件的屏幕截图,请参考它。

在此处输入图像描述

现在,就图书馆项目而言,(如果它没有为您的项目做出贡献)最佳方法是在Android清单中您应该只将您定义的活动设置为启动器活动,因为在大多数情况下,库AndroidManifest.xml通常包含一些示例Activity(应该被删除),或者你需要子类化的Activity,库项目中应该有最少的定义的东西(可以忽略不计),你的Manifest中应该有大部分内容,包括所有权限。

它也是在android开发者网站上定义的

“具有”android.intent.action.MAIN“和”android.intent.category.LAUNCHER“设置的filter将活动宣传为启动应用程序的活动 – 即应该在应用程序启动器中显示的活动。因此,filter中的标签和标签设置就是启动器中显示的标签。“

你也可以参考链接… http://developer.android.com/guide/topics/manifest/manifest-intro.html