Gradle:如何自定义Android Manifest权限?

对于我的构build系统,我需要构build几个应用程序变体,每个变体请求不同的权限集。 这怎么可以用Gradle完成,而不用调用一个单独的脚本?

Solutions Collecting From Web of "Gradle:如何自定义Android Manifest权限?"

我只是设法通过在我的gradle文件中使用不同的风格来做到这一点:

free { packageName 'com.sample.free' buildConfigField "boolean", "HAS_AD", "true" } paid { packageName 'com.sample.paid' buildConfigField "boolean", "HAS_AD", "false" } 

然后我在src下创build了一个名为“free”的新文件夹,在那个名为“res”的文件夹下,

 src/ + free/ | + res/ + src/ 

并在该文件夹中创build一个新的文件“AndroidManifest.xml”,其中包含以下代码:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> </manifest> 

根据Android Tools项目网站上的Gradle插件用户指南 :

类似于构buildtypes,产品风味也通过自己的源代码提供代码和资源。

处理用于构build单个APK的所有源代码集时,将使用以下规则:

  • 所有源代码(src / * / java)一起用作生成单个输出的多个文件夹。
  • 清单都合并成一个清单。 这允许产品味道具有不同的组分和/或权限,类似于生成types。
  • 所有资源(Android资源和资产)都使用覆盖优先级,其中构buildtypes覆盖产品风味,覆盖主源代码集。
  • 每个Build Variant从资源生成自己的R类(或其他生成的源代码)。 变体之间没有任何共享。

这意味着您可以在src下创build一个包含每个风味名称的文件夹,并将您的自定义文件放入其中。 如果所述文件是AndroidManifest gradle,则将其与主体中的清单合并。