Android Studio打包全攻略----Gradle-Build Variants构建定制版App
2016-11-15 14:57
435 查看
上一篇文章 Android Studio打包全攻略—从入门到精通限于篇幅Build Variants的作用分析得还不够,这篇文章主要探讨如何构建特别定制版App。
你肯定看到过这样的App,类似于:打豆豆小米特别定制版、XXX魅族首发版。
这些App绝大部分界面样式、功能实现和普通版本都差不多,不过只是多了一些坠饰,比如
修改了App名称,打豆豆变成了打豆豆小米定制版
修改了App的图标,加上了渠道商或者厂商的一些标识到启动图标上
修改启动页面
免广告
本文就主要围绕着这几个问题,就如何优雅的生成定制App来讨论
要是换做以前,拿到一个这种需求,我很可能的反应是去稳定版本上
这样当然可以解决当前问题。但是这样做有几个弊端
代码维护麻烦
测试负担加重
同样,并不是基于一套代码实现的App,测试的时候不可避免的产生很多重复测试。
配合产品运营效率低下
因为,这种方式造成开发缓慢、维护麻烦、测试费时造成产品跟不上节拍,效率低下。
找到
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/801771e71753f42886b17f0aa144e264)
看到是通过
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/356b1b1ecd43e938b7c7ac387914adfb)
看到这里,结合上一篇学到的知识,我们大概已经知道该怎么做了。
a.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/8a82189ebe2b52d3f7534ddbbbe334e3)
b.然后在src目录、也就是main目录的同级目录里面新建一个叫
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/aaa742259fa9fec6bd3361f927d0bc4c)
到这里App名称就改好了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/385843e157201842af23e2d1e06050a4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/082d34700a35ae0a6869b3f1fd5923ae)
这个图片有点抽象 不要多想,毕竟是艺术
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/e1980cc49c081f096b713d41ca1c174d)
使用:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/ab8c53917e0476ab7cfdaaad1153babe)
大功告成,我们来试试效果,为了让我们的定制App和原来的App同时安装上手机,我们修改
![](https://oscdn.geek-share.com/Uploads/Images/Content/201701/9cc493f1e15b23d0f4eaea0d0f8b35d0.png)
1
对比着原版,看看效果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/aae375abe10470109792a56fd93b5d64)
如果我现在新建一个叫debug的文件夹,对应
2
3
4
5
![](https://oscdn.geek-share.com/Uploads/Images/Content/201701/9cc493f1e15b23d0f4eaea0d0f8b35d0.png)
1
2
3
4
5
,如果对Debug里面也添加一些启动图标、App名称啥的看看会是什么效果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/f87a99faa1127982b35c37476c93a39f)
,还是运行Build Variant的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/f1bf0b1cb1b7c409b3ebb1c8fa175f53)
变成了Debug里面的设置的信息
根据
2
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b303364dc8d788bc830b1e2a21d6c01b.png)
1
2
我们可以得出规律,为了方便阅读就表达为优先级是:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b303364dc8d788bc830b1e2a21d6c01b.png)
1
也就是说,高的会覆盖低的设置
解决办法:方案A和方案B都放到线上,统计用户再每个方案的驻留时长,有效点击,订单转换等等有效数据,然后来计算两个方案的效率,最后取效率高的。
当然,也可以不使用
Demo代码:https://github.com/zhouruikevin/makeapp
你肯定看到过这样的App,类似于:打豆豆小米特别定制版、XXX魅族首发版。
这些App绝大部分界面样式、功能实现和普通版本都差不多,不过只是多了一些坠饰,比如
修改了App名称,打豆豆变成了打豆豆小米定制版
修改了App的图标,加上了渠道商或者厂商的一些标识到启动图标上
修改启动页面
免广告
本文就主要围绕着这几个问题,就如何优雅的生成定制App来讨论
为什么要通过Build Variants构建
为什么要使用这种方式来打包?要是换做以前,拿到一个这种需求,我很可能的反应是去稳定版本上
checkout一个分支出来,然后改改App名称,改改启动图标、启动页面,去除广告逻辑部分。
这样当然可以解决当前问题。但是这样做有几个弊端
代码维护麻烦
checkout出来一份代码,相当于以后需要维护两个App,两份代码。两个版本咱们可能还不觉得有啥,但是这才一个版本定制,要是以后我们的打豆豆App,不止是要定制小米还要定制360、定制魅族、定制三星。还要区分用户群体,推出有广告版本,无广告版本。推出稳定版和功能升级的Pro版本—超级打豆豆。如果每个版本都拿一个分支来做,需要维护多少个分支?要是版本升级一次,是不是每个分支都要升级?哪得需要多大的工作量。
测试负担加重
同样,并不是基于一套代码实现的App,测试的时候不可避免的产生很多重复测试。
配合产品运营效率低下
因为,这种方式造成开发缓慢、维护麻烦、测试费时造成产品跟不上节拍,效率低下。
正题—怎么创建
生成定制版App名称
首先,如果换作从前,不考虑Gradle我们修改App名称是怎么做的?找到
AndroidManifest.xml文件,
application标签里面的
android:label标签存储的是App名称
看到是通过
@string/app_name也就是values文件夹下面的
strings.xml文件里面修改
看到这里,结合上一篇学到的知识,我们大概已经知道该怎么做了。
a.
productFlavors里面新建一个渠道号
xiaomi {}
b.然后在src目录、也就是main目录的同级目录里面新建一个叫
xiaomi的目录,然后把values/strings.xml拷贝到目录下面,然后修改名称为我们希望显示的名称。
到这里App名称就改好了
生成定制版图标
有了修改App名称的经验,修改图标也就轻车熟路了,只是存储图标的文件夹,会有hdpi、xhdpi、xxhdpi等等好几个目录,需要一起拷贝过去,然后分别替换里面的图标为我们的图标
修改启动页
和修改图标一样这个图片有点抽象 不要多想,毕竟是艺术
生成广告版和免广告版
使用:
大功告成,我们来试试效果,为了让我们的定制App和原来的App同时安装上手机,我们修改
applicationId
xiaomi { applicationId 'com.xiaomi.makeapp' }1
![](https://oscdn.geek-share.com/Uploads/Images/Content/201701/9cc493f1e15b23d0f4eaea0d0f8b35d0.png)
1
对比着原版,看看效果
productFlavors(渠道),buildTypes(Debug&Release),原版优先级
现在我们已经清楚了,如productFlavors(渠道)里面的文件会覆盖原来App的文件。如果我现在新建一个叫debug的文件夹,对应
buildTypes { debug { minifyEnabled false debuggable true }1
2
3
4
5
![](https://oscdn.geek-share.com/Uploads/Images/Content/201701/9cc493f1e15b23d0f4eaea0d0f8b35d0.png)
1
2
3
4
5
,如果对Debug里面也添加一些启动图标、App名称啥的看看会是什么效果
,还是运行Build Variant的
xiaomiDebug
变成了Debug里面的设置的信息
根据
productFlavors > main(默认) buildTypes > productFlavors1
2
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b303364dc8d788bc830b1e2a21d6c01b.png)
1
2
我们可以得出规律,为了方便阅读就表达为优先级是:
Release&Debug > 渠道版本定制 > 默认设置1
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/b303364dc8d788bc830b1e2a21d6c01b.png)
1
也就是说,高的会覆盖低的设置
AB Test
什么是AB Test
有这样的场景:产品经理遇到困惑,对于一个页面有两个方案方案A和方案B,都觉得不错,不知道应该选哪一个。解决办法:方案A和方案B都放到线上,统计用户再每个方案的驻留时长,有效点击,订单转换等等有效数据,然后来计算两个方案的效率,最后取效率高的。
当然,也可以不使用
Build Variants,把两个方案都写到一个页面,然后访问服务器,服务器返指定采用那个方案的方式来实现。
Demo代码:https://github.com/zhouruikevin/makeapp
相关文章推荐
- AndroidStudio打包全攻略---Gradle-Build Variants构建定制版App
- Android Studio 构建项目一直卡在gradle build running
- Android Studio打包以及Gradle配置构建
- Android studio 加载项目错误 com/android/build/gradle/AppPlugin:Unsupported major.minor version 52.0 解决
- android studio 构建项目一直卡在gradle build running
- Android Studio Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)、配置签名文件
- [置顶] android studio打包以及gradle配置构建
- 详解Android studio的构建文件build.gradle
- Android Studio Gradle构建报错,Error:Execution failed for task ':app:mergeDebugResources'.
- Android Studio 构建项目卡在 gradle build running
- 使用Gradle构建Android应用的渠道包-Android studio 多渠道打包(超简洁版)
- android studio 构建项目一直卡在gradle build running
- Android Studio下项目构建的Gradle配置及打包应用变体
- cordova build app时候 提示没有gradle android studio
- Android Studio 通过配置build.gradle打包签名文件。生成xxx.apk
- 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层
- Android Studio大课堂 - 6.1.打包 - 详解build.gradle
- Android studio 修改 app的 build.gradle实现同一APP不同版本同时存在(同一APP安装N次)
- Android Studio打包和gradle配置构建
- Android Studio Gradle构建报错,Error:Execution failed for task ':app:mergeDebugResources'.