Android多渠道打包及资源指定

news2024/11/30 0:44:48

多渠道打包及资源指定

由于项目涉及多个车型,使用的是同一个base代码,不同车型都有差分项,所以需要进行多渠道打包,编译不同的资源进行编译处理

一、多渠道打包方式

productFlavor

背景

Android默认提供了Gradle插件库

classpath "com.android.tools.build:gradle:4.0.1"

在module中的build.gradle中引入相关插件,如:

apply plugin: 'com.android.application'

而productFlavor正是这个插件中提供的API方便进行配置

使用

需要在module下的build.gradle中设置

flavorDimensions "default"    
productFlavors {
        favor {

        }

        disfavor {

        }
}

此时就可以在AndroidStudio中的BuildVariants中选择想要编译的版本

在这里插入图片描述

  • 我们只配置了两项,至于这里的为什么有四个选项,这是由于APP默认就会有两个变种,分别是debug和release;

  • debug和release版本区别

    Android开发中,Debug版本和Release版本是两种不同的构建方式,它们在以下几个方面有所区别:

    1. 调试信息:Debug版本包含了丰富的调试信息,以方便开发者在调试过程中进行断点调试、日志输出等操作。这些调试信息可以帮助开发者定位和解决问题。而Release版本会进行代码优化和混淆,以减小应用程序的体积和提高执行效率,但可能不包含完整的调试信息。
    2. 性能:由于Debug版本包含了较多的调试信息和没有经过优化的代码,因此它往往会比Release版本运行速度稍慢。而Release版本由于进行了代码优化、资源压缩和混淆等操作,因此在性能方面通常更为优化。
    3. 安全性:由于Release版本进行了代码混淆和资源压缩等操作,使得逆向工程变得更加困难,从而提高了应用程序的安全性。而Debug版本则没有进行相关操作,可能容易被逆向工程分析。
    4. 签名:Release版本需要进行数字签名,以确保应用程序的身份和完整性。签名可以防止恶意篡改应用程序,并使得应用程序在发布到应用商店时能够通过签名验证。
    5. 日志输出:Debug版本可以输出详细的日志信息,包括调试信息、异常堆栈等。而Release版本通常会禁用一些敏感信息的日志输出,以保护用户隐私和应用程序的安全
  • 这里的flavorDimensions是必须要有的,否则会报错Error:All flavors must now belong to a named flavor dimension. AndroidStudio3.0之前可以,之后的版本就会提示这个异常;大致是因为Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。解决办法就是添加flavorDimensions “” 最好属性设置default默认,这样就可以保证所有的flavor属于同一个维度;注意这里的flavorDimensions可以添加多个属性,但是添加多个属性后需要在每个flavor中配置相应的dimension;例如

    flavorDimensions "default","channel"
    productFlavors {
        favor {
            dimension "default"
            buildConfigField "boolean", "LOG_DEBUG", "false"
        }

        disfavor {
            dimension "channel"
            buildConfigField "boolean", "LOG_DEBUG", "true"
        }
    }
  • 同时,我们可以在不同的flavor中配置需要的属性值,比如上面的buildConfigField设置,这样就会在BuildConfig文件中生成,这样我们就可以在代码中读取相应的值进行设置在这里插入图片描述

二、资源制定

sourceSets

sourceSet 的具体表现类为 com.android.build.gradle.api.AndroidSourceSet 是一个接口;sourceSets可以针对不同的类型进行个性化设置,main为主干,其他的设置为分支,分支的设置会合并到主干中,并且支持配置多个sourceSet

使用

需要在module下的build.gradle中设置

    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/favor']
            res.srcDirs = ['src/main/res', 'src/main/res-favor']
        }

        favor.java.srcDirs = ['src/main/favor']
        favor.assets.srcDirs = ['src/main/favor/assets']
        favor.res.srcDirs = ['src/main/res-favor']

        disfavor.java.srcDirs = ['src/main/disfavor']
        disfavor.assets.srcDirs = ['src/main/disfavor/assets']
        disfavor.res.srcDirs = ['src/main/res-disfavor']
    }

此时编译的时候就会根据我们选中的不同的渠道下的资源进行编译;上面main中的配置是指将原本编译的路径替换为我们指定的路径,下面的设置是指定不同渠道下需要编译的资源路径

配置

依赖设置

可以根据不同渠道添加不同的依赖文件

dependencies {
    flavorImplementation 'xxx'
    flavorApi 'xxx'
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

协同套件——“ 船 ”新版本

空地协同套件自前段时间推出后,受到了很多开发者的关注,不少开发者均表示对跨域机器人协同工作非常感兴趣,这也加快了我们协同套件的另一块拼图-船机协同的研发进度。近期,我们海空协同套件也顺利完成开发测试,本期将给…

基于炬芯3019 SDK数字助听器平台驱动设计与算法实现

+v hezkz17进数字音频系统答疑裙 1 针对数字助听器进行音频信号处理,达到助听功能的需求分析,使用三种语音处理算法。 三种语音处理算法包括:自动增益控制算法、移频算法以及宽动态范围压缩算法。 通过分析三种算法的基本原理,将算法分别使用MATLAB 进行仿真实现,验证算法…

LRU缓存替换策略及C#实现

LRU缓存替换策略 缓存是一种非常常见的设计,通过将数据缓存到访问速度更快的存储设备中,来提高数据的访问速度,如内存、CPU缓存、硬盘缓存等。 但与缓存的高速相对的是,缓存的成本较高,因此容量往往是有限的&#xf…

sqlite3交叉编译

1、交叉编译sqllite3可以先从官网下载最新最新的源码进行编译。sqlite3下载sqlite3有两种版本的源代码,sqlite-amalgamation-3420000.zip这种是将所有的操作放到sqlite3中进行使用的。虽然官方推荐使用这种方法。但是对于嵌入式移植还是使用sqlite-autoconf-3420000…

23款奔驰GLE450动感型升级柏林之声音响系统,体验不一样的感觉

奔驰GLE450动感型升级柏林之声的音响效果自然非同凡响,在人声、交响乐音乐厅感受方面都有非常逼真的现场感受,结合柏林之声的界面调整,可以在不同方位体验的高保真的音乐之享! 小柏林音响总共13个喇叭1台功放由4个高音、4个中音、…

Linux 创建文件的12种方法总结

在Linux中,可以使用多种方法来创建文件。以下是一些常见的方法: 1. touch命令 touch filename,用于创建一个空文件。如果文件已存在,则只更新其访问时间和修改时间。 touch 命令通常用于将文件的访问和修改时间更新为当前时间。…

基于知识蒸馏的去雪、去雾、去雨算法

今天来详细学习一篇去雪、去雨、去雾三合一的去噪算法 代码地址: https://github.com/fingerk28/Two-stage-Knowledge-For-Multiple-Adverse-Weather-Removal 论文地址: https://openaccess.thecvf.com/content/CVPR2022/papers/Chen_Learning_Multiple_…

Python(二):Python简介

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

ELFK——ELK结合filebeat日志分析系统(纵使生活万般磨难,也要笑对生活)

文章目录 一、filebeat二、ELFK1.原理简介 三、部署FilebeatELK1.解压安装2.设置 filebeat 的主配置文件3.启动 filebeat4.在 Logstash 组件所在节点上新建一个 Logstash 配置文件5.测试 一、filebeat Filebeat,轻量级的开源日志文件数据搜集…

高精度电流源怎么用

高精度电流源是一种用于产生高精度、高稳定性和低噪声的直流或交流电流信号的设备。它主要应用于各种实验和测试领域,例如半导体器件测试、传感器校准、精密测量和医疗检测等。高精度电流源的作用是提供可靠的电流输出信号,在实验和测试中获得精确和准确…

聚焦地下停车场污染死角|气体检测仪让您一目了然

由于地下停车场属于封闭式或半封闭式建筑,近年来越来越多高端住宅、办公楼宇的物业管理者收到投诉反应地下停车场的空气质量差的问题。那么地下空气污染有哪些呢? 根据空气监测工程师的检测表明,与地面不同,地下停车场的汽车起动…

一次元数据空间内存溢出的排查记录 | 京东云技术团队

在应用中,我们使用的 SpringData ES的 ElasticsearchRestTemplate来做查询,使用方式不对,导致每次ES查询时都新实例化了一个查询对象,会加载相关类到元数据中。最终长时间运行后元数据出现内存溢出; 问题原因&#xf…

vue 动态引入图片地址的方法

我们直接使用 v-bind 的方式导入无法正常导入 <image :src"item.src" alt""/> 是因为 页面显示为htmlcssjs而vue变成我们可以看到的样子是需要打包变成htmlcssjs的&#xff0c; 在打包过程中将item.src的变量 取出变成/image/icon.svg只是 将地址…

集中式自动抄表系统原理与应用

集中式自动抄表系统是一种自动采集电表、水表、气表等计量数据的系统&#xff0c;其原理是通过一定的通信方式&#xff0c;将计量数据从表端传输到数据采集器&#xff0c;再由数据采集器上传至云端或后台处理系统&#xff0c;从而实现对表数据的自动采集、统计和分析。 集中式…

机器学习之随机森林(Random forest)

1 什么是随机森林 随机森林是一种监督式算法&#xff0c;使用由众多决策树组成的一种集成学习方法&#xff0c;输出是对问题最佳答案的共识。随机森林可用于分类或回归&#xff0c;是一种主流的集成学习算法。 1.1 随机森林算法原理 随机森林中有许多的分类树。我们要将一个输…

【Spring】使用注解读取和存储Bean对象

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;本期给大家带来的是&#xff1a; 将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean …

解决github无法拉取submodule子模块的问题

引言 当使用git clone --recursive url 拉取一个配置了子模块的仓库后&#xff0c;会卡住。 同时在使用git clone 拉去https的url时&#xff0c;同样可能会出现一直卡在cloning int reposity...本文提供一个简单的脚本来解决该问题。 前置准备 需要配置好git的相关配置&…

今年第十个零日漏洞,苹果发布紧急更新

苹果于7月10日发布了新一轮快速安全响应 (RSR) 更新&#xff0c;以解决在攻击中利用的一个新零日漏洞。 苹果在iOS和macOS的更新公告中引用了一位匿名安全专家对该漏洞&#xff08;CVE-2023-37450&#xff09;的描述&#xff0c;表示“苹果已获悉有关此漏洞可能已被积极利用的…

自动化测试集成指南 -- 本地单元测试

构建本地单元测试 简介&#xff1a; 单元测试(Unit Test) 是针对 程序的最小单元 来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。一个单元可能是单个程序、类、对象、方法等。 如何区分单元测试和集成测试&#xff0c;一般情况下&#xff0c;单元测试应该不…

jacoco merge 合并代码覆盖率(同一个项目代码没有修改)

相关文章&#xff1a; jacoco代码覆盖率_jacoco覆盖率_做测试的喵酱的博客-CSDN博客 一、背景 前提&#xff1a; 同一个项目&#xff0c;代码没有修改的情况下&#xff0c;合并多个代码覆盖率&#xff0c;实现全量代码覆盖率。 java -jar jacococli.jar merge jacoco.exec …