【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)

本文主要是介绍【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有些时候,因为业务扩展,需要两个相同的app,通过分支管理,两套代码当然ok,但是这样后期维护,BUG修复总不能两套代码同时修改吧,这里推荐使用productFlavors差异化打包,一套代码生成两个APK

一、Flavor创建

在APP中build.gradle文件中的一段代码:
这里写图片描述

android {...}//差异化打包productFlavors {project1 {applicationId "com.android.app1"versionCode 120versionName "1.2.0"manifestPlaceholders = [label: "APP1", icon: "@mipmap/icon_1",key:"11111"]}project2 {applicationId "com.android.app2"versionCode 100versionName "1.0.0"manifestPlaceholders = [label: "APP2", icon: "@mipmap/icon_2",push_key:"22222"]}}buildTypes {...}

二、添加相应目录

这里写图片描述

三、Manifest中的操作(主要是引用的一些第三方操作)

1、图标、APP命更换

  <applicationandroid:name=".base.ElephantApplication"android:allowBackup="true"android:icon="${icon}"  //引用前面定义好的iconandroid:label="${label}"//引用前面定义好的APP名字android:supportsRtl="true"android:theme="@style/AppTheme">

2、对于一些第三方工具如推送,包名 key的更换

 <serviceandroid:name="cn.jpush.android.service.DaemonService"android:enabled="true"android:exported="true"><intent-filter><action android:name="cn.jpush.android.intent.DaemonService" /><category android:name="${applicationId}" />//引用前面定好的包名</intent-filter></service>
 <meta-dataandroid:name="JPUSH_CHANNEL"android:value="developer-default" /><meta-dataandroid:name="JPUSH_APPKEY"android:value="${key}" /> //引用前面定好的key

四、一些资源的更换

在对应的目录下,放置相同名字的资源文件,打包的时候,会自动匹配该目录下的资源文件,对于一些公用的图片不用处理

这里写图片描述

这里写图片描述

对于一些颜色的修改、布局的修改,都可以用同一种方法(不同包下的同名文件)

五、代码动态控制展示

if (BuildConfig.FLAVOR.equals("project1")) {//当flavors是project1 的时候,需要做的处理,比如设置某个布局的隐藏之类的    } else if (BuildConfig.FLAVOR.equals("project2")) {//当flavors是project2 的时候,需要做的处理}

六、打包或者AS调试

1、as调试
这里写图片描述
在这里可以选择,你要调试的包,然后进行运行测试

2、打包

这里写图片描述

七、大功告成

如果错误或者不对的地方,多多指教纠正

这篇关于【ProductFlavors】Android差异化打包productFlavors ( 一套代码生成两个APK)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252755

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行