Android Studio中的多渠道包开发

来源:互联网 发布:ubuntu社区 编辑:程序博客网 时间:2024/06/07 05:50

今天来看一下Android Studio中的多渠道打包功能。主要应用到了Gradle中的Product Flavors配置。

首先建立一个普通的APP工程。创建好后默认的结构如下:
这里写图片描述

可以看到默认包含main这一主干版本。
接下来加入我们向发布一个Foo的渠道版本,需要对工程进行配置。
结合网上查到的资料和我的实践,简要来说有以下几个注意点

1.最新的Android Studio已经可以通过图形界面来配置多个Flavor。
2.若不使用图形界面配置Flavor,那么需要手工编写app的build.gradle文件
3.如果不预先配置Flavor信息,那么在配置工程目录及源码文件时,不会有相应的辅助功能。

因此我们按照顺序:
先配置Flavor信息,然后再配置Flavor的源码及相关文件目录。
图形界面配置:
1.首先右键点击工程目录,选择“open module settings”
2.打开app的flavor选项卡,按照需要填写相关配置。如图:
这里写图片描述

打开app工程的build.gradle脚本,发现Android Studio已经帮我们自动填充了Product Flavors的配置。
因此,若想手动编写gradle代码,直接写入这些配置即可:

productFlavors {    foo {        minSdkVersion 15        applicationId 'com.example.multiflavorfoo'        targetSdkVersion 23        versionCode 1        versionName '1.0'    }}

接下来创建Flavor相应的目录。
1.右键单击app文件夹,新建目录并命名为foo。
2.在foo中继续新建一个文件夹java。
这里写图片描述

可以看到Android Studio默认将java文件夹标示成蓝色图标(与main的java相同,表示这是一个源码文件夹),此时右键点击java文件夹,可以新建package。若是普通的黄色标识文件夹,右键菜单是没有新建package选项的。

我们也可以在gradle中指定某个flavor的路径:

sourceSets {    foo {        java.srcDirs = ['src/foo/java']        res.srcDirs = ['src/foo/res']    }}

继而在此新建package并创建MainActivity.java。
这时可以看到Android Studio报错,说此处有类冲突(Duplicate class)——MainActivity和main主干中的MainActivity冲突了。
这里写图片描述

这是由于gradle编译flavor时,总会检查分支代码路径和主干代码路径,所以不可避免的产生了类冲突。
假如确实有这种需求:两个分支中存在某个相同名称的类。那么可以再新建一个分支bar,使用foo和bar开发,并将main中的重名类删除掉。

仿照刚才的步骤,新建一个bar分支:

productFlavors {        foo {            minSdkVersion 15            applicationId 'com.example.multiflavorfoo'            targetSdkVersion 23            versionCode 1            versionName '1.0'        }        bar {            minSdkVersion 15            applicationId 'com.example.multiflavorbar'            targetSdkVersion 23            versionCode 1            versionName '1.0'        }    }


然后再新建相应文件夹,会发现java文件夹不会默认标蓝,也不能在下面创建package了。
这里写图片描述

实际在windows资源管理器中手动创建这些文件夹是完全没有问题的,而且运行gradle命令也可以正确编译工程。
这里实际是Android Studio上层给开发人员的限制——同一时间仅可在一个flavor上开发。

如果想切换到bar flavor开发,需要在Build Variants面板中选择bar为当前的Build Variant。
然后就会发现foo这一分支不可操作了,bar下的文件夹按照我们的配置可以正常使用了。
这里写图片描述

由于foo分支不是当前编译选定的分支,因此java中的package文件夹都按普通的文件夹处理显示。

这时将main中的MainActivity剪切到bar下,会发现即使切换回foo分支,类冲突的错误也不存在了。

开发完不同flavor,可使用gradle task命令查看各个分支可编译的选项,运行相应命令;
或者通过Build Variant面板选择当前要编译的版本,在Android Studio中运行即可。

0 0
原创粉丝点击