志在指尖
用双手敲打未来

Android Gradle 多渠道构建 ​

AndroidGradle多途径构建
多途径构建的根本原理
在AndroidGradle中,界说了一个叫BuildVariant的概念,一个BuildVariant=BuildTYpe+ProductFlavor,BuildType便是咱们构建的类型,比如release和debug;ProductFlavor便是咱们构建的途径,比如Baidu,Google等,它们加起来便是baiduRelease,baiduDebug,googleRelease,googleDebug,共有这几种组合的构件产出。ProductFlavor也便是咱们多途径构建的基础。以下是新增一个ProductFlavor:
android{
productFlavors{
google{}
baidu{}
}
}
以上的发布途径装备后,AndroidGradle就会生成许多Task。其中,assemble最初的负责生成构件产物(apk)。除此之外,还有compile系列,install系列等。除了生成的Task外,每个ProductFlavor还能够有自己的SourceSet,还能够有自己的dependencies依靠。Android
Flurry多途径和友盟多途径构建
Flurry自身没有途径的概念,它有Application,所以能够把一个Application当成一个途径。
android{
productFlavors{
google{
buildConfigField’String’,’FLURRY_KEY’,'”ABADFASSDFAS”‘}
baidu{
buildConfigField’String’,’FLURRY_KEY’,'”JKKJKHKJHIHIUY”‘}
}
}
这样每个途径的BuildConfig类中都会有名字为FLURRY_KEY的常量界说,它的值是咱们在途径中运用buildConfigField指定的值,每个途径不一样,咱们只需要在代码中指定运用这个常量即可,这样每个途径的统计分析就能够做到了。
Flurry.init(this,FLURRY_KEY);
友盟自身有途径的概念。不过它不是在代码中指定的,而是在AndroidManifest.xml中装备的,经过装备meta-data标签来设置:
<meta-dataandroid:name=”UMENG_CHANNEL”android:value=”ChannelID”/>
多途径构建定制
多途径的定制,其实便是对AndroidGradle插件的ProductFlavor的装备,经过装备ProductFlavor到达灵活操控每一个途径的目的。
applicaitonId
用于设置途径的包名
consumerProguardFiles
只对Android库项目有用。当咱们发布库项目生成一个aar包的时候,运用consumerProguardFiles装备的混杂文件列表也会被打包到aar里一起发布,这样当运用引证这个aar包,并且启用混杂的时候,会自动运用aar包里的混杂文件对aar包里的代码进行混杂,这样咱们就不必对该aar包进行混杂装备了。
android{
productFlavors{
google{
consumeProguardFiles’proguard-rules.pro’,’proguard-android.txt’}
}
}
除了这种办法,还有一种特点设置的办法,区别在于:consumerProguardFiles办法是一直增加,不会清空曾经的混杂文件,而consumerProguardFiles特点装备的方式是每次都是新的混杂文件列表,曾经装备的会先被清空。
manifestPlaceholders
multiDexEnabled
用来启用多个dex的装备,主要用来突破65535办法的问题
proguardFiles
混杂运用的文件列表
signingConfig
签名装备
testApplicationId
用来适配测验包的包名
testFunctionalTest和testHandleProfiling
testFunctionalTest表示是否为功用测验,testHandleProfiling表示是否启用分析功用
testInstrumentationRunner
用来装备运行测验运用的InstrumentationRunner的类名,是一个全途径的类名,而且有必要是android.app.Instrumentation的子类,一般情况下,咱们运用android.test.InstrumentationTestRunner,当然也能够自界说。
testInstrumentationRunnerArguments
合作上一个特点用的,用来装备InstrumentationRunner运用的参数,它们最终都是运用adbshellaminstrument这个命令。
versionCode和versionName
装备途径的版别号和版别称号。
useJack
用于标记是否启用Jack和Jill这个全新的,高性能的编译器。
dimension
dimension是ProductFlavor的一个特点,接受一个字符串,作为该ProdoctFlavor的维度。能够简略理解为对ProductFlavor进行分组,dimension接受的参数便是咱们分组的组名,也便是维度称号。维度称号不能随意指定,在运用前,有必要先声明。
flavorDimension是咱们运用的android{}里面的办法,它和productFlavors{}是平级的,一定要先运用flavorDimension声明维度,才能在ProductFlavor中运用。
咱们同时指定多个维度,但是一定要,这些维度是有顺序的,有优先级的,第一个参数的优先级最大,其实是第二个,以此类推。
android{
flavorDimensions”abi”,”version”}
声明维度后,就能够运用了:
android{
flavorDimensions”abi”,”version”productFlavors{
free{
dimension’version’}
paid{
dimension’version’}
x86{
dimension’abi’}
arm{
dimension’abi’}
}
}
进步多途径构建的功率
参考美团方案
利用在apk的META-INF目录下增加空文件不必重新签名的原理
1、利用AndroidGradle打一个根本包(母包)
2、基于该包仿制一个,文件名要能区别出产品、打包时刻、版别、途径等
3、对仿制出来的apk进行修改,在其META-INF目录下新增空文件,但空文件的文件名要有含义,有必要包括能区别途径的名字
4、重复步骤2、3生成咱们所需的所有途径包apk

未经允许不得转载:IT技术网站 » Android Gradle 多渠道构建 ​
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载