Android Studio多渠道打包之productFlavors


一、   productFlavors简介

productFlavors顾名而思义,就是用于定义产品的特性,这是每个产品不同的地方。有了它我们可以用同一套代码创建不同的产品。由于不同渠道,对项目会进行一定的修改,比如图片、文字等。所以需要根据渠道来加载相应的资源文件和代码,以达到相应渠道个性定制的目的,同时不需要新建module。

二、   productFlavors配置

1.       找到app项目下的build.gradle文件,

Android Studio多渠道打包之productFlavors_第1张图片

 

2.       文件中添加配置productFlavors,注意要在android下添加,如图,添加bingoone和bingotwo两个渠道

Android Studio多渠道打包之productFlavors_第2张图片

3.       在命令行执行gradle build命令(前提是你的环境变量都配置好)

Android Studio多渠道打包之productFlavors_第3张图片

4.       Gradle 命令可能执行失败,但是不要紧,主要去看你的app/build/outputs/apk下面是否生成你想要的渠道apk。若生成表示配置成功。

Android Studio多渠道打包之productFlavors_第4张图片

Android Studio多渠道打包之productFlavors_第5张图片

三、   根据渠道加载代码

1.  打开项目的工程目录,切换到Project视图,打开app/src目录,在此目录下新建两个与main目录同级且与productFlavors中的渠道名相同的文件夹,如下图所示:

 Android Studio多渠道打包之productFlavors_第6张图片

2.  参照main中为目录结构,在bingoone目录下添加java目录,res资源目录,以及AndroidManifest文件,可以直接复制main中的整个文件夹,再根据需要删除不需要的文件。如下图所示:

Android Studio多渠道打包之productFlavors_第7张图片

在java中新建一个BingooneActivity,在res/layout中添加布局文件,在AndroidManifest中注册BingooneActivity。为了便于标识,BingooneActivity只添加了一个TextView,text内容设置为“textView

”。

 

3.  在helloworld中重复上述步骤,保证此目录下的BingooneActivity的包名与productdemo中的BingooneActivity包名相同,如下图所示:

4.  Android Studio多渠道打包之productFlavors_第8张图片

5.  在main目录下的MainActivity中添加一个按钮,添加点击时跳转到BingooneActivity的点击事件。执行gradle build命令,会在app/build/output/apk目录下生成bingoone和bingotwo的apk包。

分别安装apk,点击Button,查看跳转的页面。就可以看到不同渠道的差异化

 

6. 在res目录下同样添加对应的mipmap文件夹,把需要设置的icon放到对应的目录下,保证icon图片的名字与main下的相同,这样渠道包在加载的时候会优先加载渠道目录下的资源文件,而bingoone渠道目录下没有添加icon文件,会默认加载main目录下的资源文件。

 

五.附加说明

1.  如果在主目录代码中用到渠道目录下的java文件,必须保证所有渠道目录下都有此java文件,并且包名相同,java文件的内容可以有差异。

2.  执行gradle buid会编译所有的渠道包,如果只想编译一个渠道的release包,可以执行gradle assemblexxxRelaese命令。

3.  在渠道目录中新建的Activity、Service等组件需要分别在每个渠道目录下的AndroidManifest中注册,也可以只在main目录下的AndroidManifest中注册。

4.  对于渠道包来说,它的AndroidManifest文件实际上是该渠道目录下的AndroidManifest和main目录下的AndroidManifest的总和,两个目录下的内容不能有重复。

同样的,渠道包的java代码也是项目代码和渠道目录下的java代码的总和,两个目录下的java文件不能存在包名相同的情况,也就是相同目录下不存在同名类。

 完整代码已上传到github:点击打开链接

 

你可能感兴趣的:(Android)