For my build system, I need to build several app variants, each requesting a different set of permissions. How can this be done with Gradle, without invoking a separate script?
问问题
18183 次
1 回答
62
我只是通过在我的 gradle 文件中使用不同的风格来做到这一点:
free {
packageName 'com.sample.free'
buildConfigField "boolean", "HAS_AD", "true"
}
paid {
packageName 'com.sample.paid'
buildConfigField "boolean", "HAS_AD", "false"
}
然后我在 src 下创建了一个名为“free”的新文件夹,并在该文件夹下创建了一个名为“res”的文件夹
src/
+ free/
| + res/
+ src/
并在该文件夹中创建一个新文件“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 工具项目网站上的Gradle 插件用户指南:
与 Build Types 类似,Product Flavors 也通过自己的 sourceSets 贡献代码和资源。
和
在处理用于构建单个 APK 的所有源集时,使用以下规则:
- 所有源代码 (src/*/java) 作为多个文件夹一起使用,生成单个输出。
- 清单全部合并到一个清单中。这允许产品风味具有不同的组件和/或权限,类似于构建类型。
- 所有资源(Android res 和 assets)都使用覆盖优先级,其中 Build Type 覆盖 Product Flavor,后者覆盖主 sourceSet。
- 每个 Build Variant 从资源中生成自己的 R 类(或其他生成的源代码)。变体之间没有任何共享。
这意味着您可以在 src 下创建一个包含每个风味名称的文件夹,并将您的自定义文件放入其中。如果所述文件是 AndroidManifest gradle 会将其与主清单中的清单合并。
于 2013-07-01T22:18:23.407 回答