Multi-Flavor in Android Studio

如何为多个 Flavor 配置不同权限

Multi-Flavor 的一个重要功能是针对于不同的 Flavor 加载不同的代码。通过此功能,我们可以实现为多个 Flavor 配置不同应用权限的效果。

具体方式可参考这篇文章:Android: How to Implement ProductFlavor-Dependent Permissions with Gradle .

通过这种方式,我们可以将所有 Flavor 共有的部分放在默认的 AndroidManifest 文件中,然后针对不同的 Flavor 再实现各自额外的内容。在编译对应 Flavor 的时候,其各自的 AndroidManifest 文件会跟默认的 AndroidManifest 文件合并,相同节点的内容会合并到一起。非常方便。

但是上述教程的代码结构是针对于 Android Studio 的代码结构的。如果是 Eclipse 结构的代码,我们需要将目录结构调整为如下所示:

module 
    - AndroidManifest.xml
    - src
    - res
    - flavor1
        └ AndroidManifest.xml 
    - flavor2
        └ AndroidManifest.xml

然后还要在 build.gradle 中添加 sourceSets 字段:

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    flavor1Flavor {
        manifest.srcFile 'flavor1/AndroidManifest.xml'
    }

    flavor2Flavor {
        manifest.srcFile 'flavor2/AndroidManifest.xml'
        java.srcDirs = ['flavor2/src']
    }

    // Move the tests to tests/java, tests/res, etc...
    instrumentTest.setRoot('tests')

    debug.setRoot('build-types/debug')
    release.setRoot('build-types/release')
}

如何为多个 Flavor 配置不同的 url-scheme

原理跟上面一样,只要在各自的 AndroidManifest 写上不同的 url-scheme 即可。基本思路如下:

1. 默认 AndroidManifest.xml

<manifest>
    <uses-permission />
    <application>
        <activity>
            <intent-filter> intent 1 </intent-filter>
        </activity>
    </application>
</manifest>

2. Flavor1/AndroidManifest.xml

<manifest>
    <uses-permission />
    <application>
        <activity>
            <intent-filter> intent 2 </intent-filter>
        </activity>
    </application>
</manifest>

3. Flavor2/AndroidManifest.xml

<manifest>
    <uses-permission />
    <application>
        <activity>
            <intent-filter> intent 3 </intent-filter>
            <intent-filter> intent 4 </intent-filter>
            <intent-filter> intent 5 </intent-filter>
            <intent-filter> intent 6 </intent-filter>
        </activity>
    </application>
</manifest>

如何切换当前编译的 Flavor

在 Android Studio 的 Menu 中找到 View -> Tool Windows -> Build Variants, 然后将对应 Module 的 BuildVariant 进行修改即可。对于每个 Flavor,都会生成 Debug 和 Release 两种编译方式。选择时需注意。

0%