博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Gradle权威指南》--Android Gradle多渠道构建
阅读量:6410 次
发布时间:2019-06-23

本文共 3245 字,大约阅读时间需要 10 分钟。

No1:

Build Variant = Build Type + Product Flavor

Build Variant:构建的产物

Build Type:构建的类型

Product Flavor:构建的渠道

android{    compileSdkVersion 23    buildToolsVersion "23.0.1"    productFlavors{        google{}        baidu{}    }}

No2:

Flurry多渠道和友盟多渠道构建

Flurry本身没有渠道的概念,它有Application,所以可以把一个Application当成一个渠道,每个Application都有一个Key,称为Flurry Key;友盟本身有渠道的概念,只要我们在AndroidManifest.xml配置标注即可。

android{    compileSdkVersion 23    buildToolsVersion "23.0.1"        defaultConfig{        applicationId "org.flysnow.app.example112"        minSdkVersion 14        targetSdkVersion 23        versionCode 1        versionName '1.0.0'        resConfig 'zh'    }    buildTypes{        release{            minifyEnabled true            projuardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'            zipAlignEnabled true        }    }    productFlavors{        google{            buildConfigField 'String','FLURRY_KEY','"BHJKOUASDASFKLZL"'        }        baidu{            buildConfigField 'String','FLURRY_KEY','"HJSDKHFJDSF23478"'        }    }}

这样每个渠道的BuildConfig类中都会有名字为FLURRY_KEY常量定义

友盟渠道是在AndroidManifest.xml中配置的

其中Channel ID就是渠道值

No3:

多渠道构建定制--其实就是对Android Gradle插件的ProductFlavor的配置,通过配置ProductFlavor达到灵活地控制每个渠道的目的

applicationId就是该渠道的包名

android{    ...    productFlavors{        google{            applicationId "org.flysnow.app.example112.google"        }    }}

consumerProguardFiles--只对Android库项目有用

android{    productFlavors{        google{            consumerProguardFiles 'proguard-rules.pro','proguard-android.txt'        }    }}

testApplicationId--测试包名

android{    ...    productFlavors{        google{            testApplicationId "org.flysnow.app.example112.test"        }    }}

testFunctionalTest--是否为功能测试,testHandleProfiling--是否启用分析功能

android{    productFlavors{        google{            testFunctionalTest true            testHandleProfiling true        }    }}

testInstrumentationRunner--用来配置运行测试使用的Instrumentation Runner的类名

android{    productFlavors{        google{            testInstrumentationRunner 'android.test.InstrumentationTestRunner'        }    }}

testInstrumentationRunnerArguments--用来配置Instrumentation Runner使用的参数

android{    productFlavors{        google{            testInstrumentationRunnerArguments.put("coverage",'true')        }    }}

useJack--用于标记是否启用Jack和Jill这个全新的、高性能的编译器

android{    productFlavors{        google{            useJact true        }    }}

dimension --多维度,理解为对ProdcutFlavor进行分组。用flavorDimensions声明维度,才能在ProductFlavor中使用

android{    flavorDimensions "abi","version"//优先级:abi>version>defaultConfig    productFlavors{        free{            dimension 'version'        }        paid{            dimension 'version'        }        x86{            dimension 'abi'        }        arm{            dimension 'abi'        }    }}

会生成

ArmFreeDebug

ArmFreeRelease

ArmPaidDebug

ArmPaidRelease

x86FreeDebug

x86FreeRelease

x86PaidDebug

x86PaidRelease

No4:

提高多渠道构建的效率-美团方案

1)利用Android Gradle打一个基本包

2)基于该包复制一个,文件名要能区分出产品、打包时间、版本、渠道等

3)对复制出来的apk文件进行修改,在其META-INF目录下新增空文件,但是空文件的文件名要有意义,必须包含能区分渠道的名字,如:mtchannel_google

4)重复步骤2)步骤3生成我们所需的所有渠道包apk,这个可以使用Python这类脚本来做

5)生成了我们所有发布渠道的apk包

使用:

在apk启动(Application onCreate)时候,读取我们写apk中META-INF目录下的前缀mtchannel_文件,如果找到的话,把文件名取出来,然后就可以得到渠道标识(Google)了

转载地址:http://npzra.baihongyu.com/

你可能感兴趣的文章
Backbone.js 使用模板
查看>>
安装xenomai的记实
查看>>
我们为什么需要SDN?---致新人
查看>>
自制VTP实验总结
查看>>
prime_test
查看>>
用python的smtplib发送邮件python2,3都可以使用
查看>>
我在新浪微博的第1000篇,截图纪念。
查看>>
Graphx处理janusGraph数据实现
查看>>
Oracle Study之案例--重建数据库控制文件
查看>>
log4j&slf4j日志框架入门
查看>>
五子棋精髓
查看>>
记一次升级Oracle驱动引发的死锁
查看>>
php加速器eaccelerator概述
查看>>
SER2012安装和激活终端激活
查看>>
微容器:更小的,更轻便的Docker容器
查看>>
TXT 文本阅读器源码
查看>>
java异常
查看>>
SQL2008笔记(一)
查看>>
Linux通过命令发送邮件
查看>>
HttpClient4.4 登录知乎(详细过程)
查看>>