如何使用(Android Studio和Gradle的)新清单合并?

android开发人员

背景

过去,当Eclipse&ADT是要为Android开发的官方工具时,您只需在应用程序项目的“ project.properties使用“ manifestmerger.enabled = true,即可自动合并所有库的清单(并且我已经在这里发布了)。

有时这行得通。它有很多奇怪的问题,我始终倾向于避免使用它,而将需要的内容手动放入主清单文件中。

问题

Google在2014年某个时候宣布,新的Android-Studio(我认为是0.1)与Gradle一起,将使您能够精确选择如何执行库组件的合并。

但是,新指令(此处链接)非常复杂,我确实(确实)试图了解如何使用它们,也没有找到如何使用它们的示例。

不是我什么都不懂,但我不确定我是否懂得。

我发现了什么

从好的方面来说,我发现合并是完全自动完成的,因此,如果您在库清单(当然还有作为类)上有一个BroadcastReceiver,它将被添加到使用它的应用程序项目中。

问题

我不能简单地要求一切都可以解释。我认为问这些问题就足够了:

  1. 如何选择要自动合并而忽略的应用程序组件(权限,活动等)?

  2. 如何在应用程序的项目上指向(库的)替代应用程序组件属性?例如活动的主题?

  3. 有没有办法完全禁用清单文件的自动合并?

  4. 存储库中的依赖项清单会发生什么?他们也合并了吗?

  5. 是否有关于此新功能(对我来说是新的)的教程/示例/视频?

  6. 使用自动合并时,我应该注意什么?

我希望这些问题具有足够的代表性,信息量,但对于熟悉的人来说也不太难回答。

尤金·佩查内克(Eugen Pechanec)

1.禁用元素

您始终可以在应用清单中明确禁用权限和功能,并覆盖所有库值。而且我发现您可以禁用来自library的元素

考虑上面链接中的以下代码:

<activity-alias
    android:name=”foo.bar.alias”>
  <meta-data 
      android:name=”zoo” 
      tools:node=”remove”/>
</activity-alias>

通过将这些代码包含在清单中,您可以确保合并找到<activity-alias>具有android:name="foo.bar.alias"属性的任何元素,并删除具有属性的<meta-data>元素android:name="zoo"它仅删除“ zoo”元数据。不是活动别名。如果在主清单中指定了此选项,它将对到目前为止已合并的所有内容(库中的元素)有效。

范例#2

既然您请求了有关活动的示例,那么我想出的是:

<activity android:name="com.example.ui.MyActivity" tools:node="remove"/>

此行将使合并删除android:name="com.example.ui.MyActivity"到目前为止已合并的所有具有属性的活动因此,如果您在主清单中指定此选项,它将有效地删除com.example.ui.MyActivity可能已从库中合并的所有条目。

2.覆盖库中的属性

清单文件的排序部分中介绍合并值的顺序。基本上是这样的:库,然后是主清单,如果使用它们,则是风味和构建类型清单。如何覆盖库中的属性?

什么是构建类型?

默认值为“调试”和“发行”。您可以定义自己的设置并覆盖诸如signingproguard的设置为了您的目的,您可以说这等同于运行配置。

它的工作方式如下:将默认值和共享值放入main清单中。然后在味觉清单中,您将覆盖所需的值。Google会“渐变口味”以获取更多信息。

3.完全禁用清单合并

在Android Gradle Build中禁用清单合并

android.applicationVariants.all { variant ->
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
    variant.processManifest.enabled=false
}

您将它放在哪个文件中?

模块末尾(不是根项目)build.gradle

4.依赖项清单是否合并?

是的,它们是(它们是图书馆)。

有没有办法阻止合并某些库清单?

我不知道,对不起。

5.有教程吗?

取决于您要达到的目标。到目前为止,它总是对我开箱即用。

我不知道任何视频。

6.我应该注意什么?

如果您怀疑额外的权限等,可以检查生成的清单。该清单位于中project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml

调味料:http : //tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android Studio Gradle图标错误,清单合并

清单合并失败:Android Studio

Android Gradle中的清单合并失败错误

Android Studio中的清单合并错误

如何使用Android Studio和Gradle构建android库?

Android Studio-Gradle清单文件路径

Android,Gradle,产品口味和清单

如何使用Gradle和Android Studio从资源中排除文件?

Firebase与Android Studio的连接错误:清单合并失败

清单合并失败,Android Studio中出现多个错误

清单合并失败:属性application @ appComponentFactory ... Android Studio 3.2

Gradle和Android Studio

Android合并清单错误

Android清单合并失败

新的android studio项目中的清单文件夹

如何在Android Studio 1.1.0和Gradle 2.2.1中使用Robolectric 2.4

如何在Android Studio中管理和删除未使用的Gradle Task?

如何在Android Studio中设置适用于Windows和Linux的git repo(并使用gradle)

使用gradle时,是否需要在android清单中复制版本和sdk信息?

Android Studio和Gradle:versionNameSuffix

Android Studio,Gradle和NDK

Android Studio - 如何使用 getExternalFilesDir

Android Studio Gradle新的“应用插件”

使用合并的清单启动Docker容器的清单

Android Studio:如何撤消“使用Gradle链接C ++项目”

在 Android Studio 中使用 Gradle 编译之前如何运行 jar?

如何使用Android Studio + Gradle + NDK构建外部C ++库?

如何在Android Studio中使用最新的Gradle版本

Android Studio:如何使用Gradle生成签名的APK?