android studio差异化,productFlavors + buildTypes + signingConfigs 构建差异化 Android 应用

本文介绍了如何利用Gradle脚本在Android Studio中进行产品差异化构建,包括productFlavors、buildTypes和signingConfigs的使用。通过定义不同flavor实现包名、应用名的差异化,使用buildConfigField和manifestPlaceholders设置差异化变量,以及通过signingConfigs管理不同签名配置,确保不同构建类型的正确签名。同时,展示了如何在脚本中定义变量、暴露变量、引用变量和执行特定逻辑。

gradle 脚本作为 AndroidStudio 使用的打包控制语言,有其独特的优势。

常见功能

和其他脚本语言一样,gradle 脚本也支持实现常见的功能和操作

def 定义变量和方法

def getConfigs(environment,fileName) {

//断言变量不为空

assert environment!=null

assert fileName!=null

Properties props = new Properties()

//加载文件内容为 Properties,方便使用

props.load(new FileInputStream(file("conf/$environment/$fileName")))

return props

}

${} 引用变量

ext 暴露变量(或方法)

引入其他脚本文件

apply from: "${rootProject.projectDir}/dependency/dependency.gradle"

productFlavors 指定打包风味

productFlavors 下可以新增 flavor ,每个 flavor 都可以覆盖defaultConfig下的属性实现差异化。如:包名、应用名、编译版本;

flavor 里也可以执行脚本代码,实现特殊逻辑。

productFlavors.all 的代码所有 flavor 都会执行

productFlavors.all{

flavor ->

……

}

buildConfigField 可以为 java 程序提供差异化的变量,在代码中借助

BuildConfig 类得到这些变量。比如: BuildConfig.FLAVOR 的值是当前的

flavor

manifestPlaceholders 可以给清单文件里的变量赋值,清单文件里 "${变量名}"获取值。常用于包名传递,及不同 flavor 不同的第三方 key

android {

productFlavors {

dev{

}

prod{

}

...............

productFlavors.all{

flavor ->

def props = getConfigs(name,'conf.properties')

props.propertyNames().each { name ->

buildConfigField valueType(props.getProperty(name.toString())), name, props.getProperty(name.toString())

}

manifestPlaceholders = [

JPUSH_PKGNAME : "${applicationId}"

]

}

}

}

signingConfigs 签名配置

signingConfigs 用于声明签名配置,使用自定义配置前必须先定义

signingConfigs 下可以定义多个签名配置供不同 falvor 和 buildType 使用

变量可以在项目根目录的 gradle.properties 文件定义,gradle 脚本直接按变量名使用即可

signingConfigs {

demo{

storeFile file(DEMO_STORE_FILE)

storePassword DEMO_STORE_PASSWORD

keyAlias DEMO_KEY_ALIAS

keyPassword DEMO_KEY_PASSWORD

}

.......

}

buildTypes 打包配置

buildTypes 下可以制定多个打包方式,一般会有debug、release,可以指定不同的签名方式、混淆逻辑等

与 productFlavors 类似 applicationVariants.all 是所有配置都会执行的代码

debug 打包方式不指定 signingConfig ,则使用默认签名(系统默认的签名证书)

buildTypes {

debug {

minifyEnabled false

zipAlignEnabled false

shrinkResources false

signingConfig signingConfigs.debug

}

release {

//是否混淆

minifyEnabled true

zipAlignEnabled true

// 移除无用的resource文件

shrinkResources false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

signingConfig signingConfigs.release

}

applicationVariants.all {

variant ->

variant.outputs.all {

outputFileName = "DEMO_${variant.name}_${variant.versionName}.apk"

}

}

}

不同 flavor 使用不同签名配置

在 flavor 里指定 signingConfig (使用前先定义)就可以指定 release 包的签名配置,但对 debug 包无效

android {

productFlavors {

dev{

signingConfig signingConfigs.dev

}

prod{

signingConfig signingConfigs.prod

}

...............

}

如果想 debug 包也使用不同的签名配置,可以显示的指定 debug 使用release 的签名配置

buildTypes {

debug {

// 指定 debug 使用release的签名

signingConfig release.signingConfig

}

release {

}

}

这样就可以完成 gradle 脚本控制不同 flavor 使用不同的签名

打开链接下载源码: https://pan.quark.cn/s/8ec3d104bde6 华为MA5671是一款针对宽带接入需求而研发的智能型光猫设备,其核心应用场景为家庭用户及小型企业环境。该设备运用了千兆以太网技术,能够提供卓越的网络连接性能,从而使用户可以体验到稳定流畅的互联网服务。其完整名称为SmartAX MA5671,其中"SmartAX"是华为对其智能接入产品系列的特定命名,意指该设备具备智能化管理功能与自动化配置特性。固件,即Firmware,是指存储于硬件设备内部的一套程序代码,负责控制设备的各项功能运作并合理调配硬件资源。在华为MA5671设备中,固件发挥着核心作用,它直接影响着设备的操作系统运行机制、网络协议兼容性、安全防护机制以及性能表现等多个维度。"MA5671V8R313C00SPC100"作为该固件的标识编号,通过此代码可以解析出以下几个关键层面的信息: 1. **V8**:这通常象征固件的主版本号,或许表明这是第8代产品形态或第8次主要升级迭代。 2. **R313**:这可能代表固件的次级版本或修订层级,暗示着相较于V8版本,该版本经历了313次的迭代优化。 3. **C00**:这部分或许与设备的特定型号设定或地域适配性相关,不同的C00编码可能对应不同的功能模块配置或区域适应性调整。 4. **SPC100**:最后的这一段编码可能标识着特殊版本或性能增强配置,SPC(Special Performance Configuration)可能是华为针对特定性能优化版本设定的代号,而100可能代表这种优化措施的等级或序列编号。 在实际部署过程中,将固件保持为最新版本是非常重要的,这样做能够有效修正已知的安全隐患,优化设备运作效能,...
代码转载自:https://pan.quark.cn/s/558f943fe8b9 Oracle 11g是由甲骨文公司推出的一款面向企业级应用的数据管理平台,其具备丰富的功能特性与性能优化措施,能够充分满足大型商业机构及组织的复杂数据管理诉求。这份“Oracle 11g官方中文帮助文档”作为一份高清晰度且内容全面的资源,专门为中文使用者提供系统化的操作指引和必要的技术支持。 1. **Oracle 11g核心构成** - 数据库模型:该系统基于关系数据库架构,负责对结构化数据进行系统化存储和处理。 - 实例与服务机制:数据库实例指的是部署在服务器内存中的运行环境,而服务则是客户端接入数据库的核心通道。 2. **部署与设置** - 部署模式:涵盖高级部署流程和快速部署方案,以适应多样化的应用场景。 - 参数配置文件:初始化参数文件(init.ora)用于设定数据库的运行环境参数。 - 逻辑存储与物理存储:表空间作为数据库对象的逻辑组织单元,数据文件则是实际存放数据的物理载体。 3. **SQL与PL/SQL技术** - SQL指令集:主要用于数据库数据的查询、录入、修改及删除等操作。 - PL/SQL编程:作为Oracle的特色编程语言,支持过程化编程范式,常用于开发存储过程和触发器逻辑。 4. **安全防护机制** - 用户身份与角色管理:通过用户账户和角色权限体系来控制数据库的访问权限。 - 授权管理及审计功能:实现数据访问权限的精细化控制,并记录数据库活动日志以保障合规操作。 5. **效能提升策略** - 查询执行优化器:智能选择最优的查询执行路径。 - 重做日志与归档机制:保障事务的持久性和系统故障后的恢复能力。 - 数据分区技术:通过将大型数据表...
内容概要:本文档系统介绍了基于档案的多目标优化算法(MAOA)的Matlab代码实现,重点服务于复杂工程与科研场景下的多目标决策问题求解。该算法属于智能优化范畴,具备良好的收敛性与多样性保持能力,适用于电力系统、微电网调度、低碳经济运行等高维度、多约束优化场景。文档不仅提供完整的算法实现代码,还整合了大量相关科研主题,如阻抗建模、稳定性分析、VSG控制、风光储协同调度、电动汽车参与调频等,涵盖从底层建模到上层优化的全流程技术链条。配套资源丰富,包含Simulink仿真模型、复现论文案例、网盘资料链接及公众号获取通道,极大提升了科研复现效率与工程应用可行性。; 适合人群:具备Matlab/Simulink编程基础,从事电力系统自动化、新能源并网、微电网优化、综合能源系统等方向研究的硕士、博士研究生及科研人员。; 使用场景及目标:①用于求解电力系统中兼顾经济性与环保性的多目标优化问题,如低碳经济调度与N-1安全约束协同优化;②结合Simulink搭建高保真系统模型,开展多目标算法在动态系统中的仿真验证;③支撑高水平学术论文(如EI、SCI)的算法复现与创新拓展,加速科研成果转化。; 阅读建议:建议读者结合文档中提供的网盘资源与公众号获取完整代码包,按照技术模块分类逐步学习,重点关注MAOA算法核心逻辑与实际工程问题的映射关系,并尝试将其迁移至个人研究课题中进行调试与改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值