Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle:如何定制Android清单权限?_Android_Gradle - Fatal编程技术网

Gradle:如何定制Android清单权限?

Gradle:如何定制Android清单权限?,android,gradle,Android,Gradle,对于我的构建系统,我需要构建几个应用程序变体,每个应用程序变体请求不同的权限集。如何在不调用单独脚本的情况下使用Gradle实现这一点?我只是通过在Gradle文件中使用不同的风格来实现这一点: free { packageName 'com.sample.free' buildConfigField "boolean", "HAS_AD", "true" } paid { packageName 'com.sample.

对于我的构建系统,我需要构建几个应用程序变体,每个应用程序变体请求不同的权限集。如何在不调用单独脚本的情况下使用Gradle实现这一点?

我只是通过在Gradle文件中使用不同的风格来实现这一点:

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

    paid {
        packageName 'com.sample.paid'
        buildConfigField "boolean", "HAS_AD", "false"
    }
然后我在src下创建了一个名为“free”的新文件夹,并在该文件夹下创建了一个名为“res”的文件夹

在该文件夹中创建一个新文件“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工具项目网站上的信息:

与构建类型类似,产品风格也会贡献代码和功能 资源通过它们自己的源集

处理使用的所有源集时,将使用以下规则 要构建单个APK,请执行以下操作:

  • 所有源代码(src/*/java)作为多个文件夹一起使用,生成单个输出
  • 所有清单都合并到一个清单中。这允许产品口味具有不同的成分和/或 权限,类似于生成类型
  • 所有资源(安卓资源和资产)都使用覆盖优先级,其中构建类型覆盖产品风格,这 覆盖主源集
  • 每个构建变量都从资源中生成自己的R类(或其他生成的源代码)。他们之间什么都不分享 变体
这意味着您可以在src下创建一个具有每个风格名称的文件夹,并将自定义文件放入其中。如果所述文件是AndroidManifest,gradle会将其与主目录中的清单合并

<?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>