Android studio 分渠道打包,引用不同的moudle
转自:https://github.com/itlgl/note/issues/36
如何简单的使用keystore文件为apk签名
- 在项目根目录下创建文件夹
keystore
,并将签名文件比如keystore1.jks
放到目录下。
比如创建的keystore1.jks
文件,密码为pass4keystore
;签名文件下有一个alias为itlgl
,密码为pass4itlgl
。 - 在
build.gradle
文件下增加配置:
android {signingConfigs {keystore1 {keyAlias 'itlgl'keyPassword 'pass4itlgl'storeFile file('./keystore/keystore1.jks')storePassword 'pass4keystore'}}// 省略部分配置buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.keystore1}debug {signingConfig signingConfigs.keystore1}} }
这样release版本和debug版本就都用keystore1.jks文件进行了签名
不同的渠道有不同的包名
android {// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {// 包名将被修改为com.itlgl.devapplicationId "com.itlgl.dev"// 也可以用下面这种后缀的方式,dev模式下将会在原有的applicationId后面缀上.dev// applicationIdSuffix ".dev"}stage {applicationId "com.itlgl.stage"}prod {applicationId "com.itlgl.prod"}} }
不同的渠道修改不同的versionName
android {// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {// versionName将被修改为xxx_devversionName "xxx_dev"// 也可以用下面这种后缀的方式,dev模式下将会在原有的versionName后面缀上_dev// versionNameSuffix "_dev"}stage {versionName "xxx_stage"}prod {versionName "xxx_prod"}} }
不同渠道在资源文件添加不同字段
利用 resValue 来定义资源的值,顾名思义 res 底下的内容应该都可以创建,最后用 R.xxx.xxx 来引用。
如下就根据不同的类型,添加了不同的 app_name 字段,以及定义了 布尔值,可以通过 R.string.app_name 来引用。
注意,这里是添加,是在 string.xml 里面添加了一个字段app_name,所以在现有的 string.xml 中不能有这个字段,否则会报错!!!
android {// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {resValue "string", "app_name", "dev_myapp"resValue "bool", "isrRank", 'false'}stage {resValue "string", "app_name", "stage_myapp"resValue "bool", "isrRank", 'true'}prod {resValue "string", "app_name", "myapp"resValue "bool", "isrRank", 'true'}} }
通过以上我们大概可以推测出 color、dimen 也可以通过类似的方法添加。
不同渠道添加不同的常量到BuildConfig
- 在BuildConfig中定义字段
android {// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {buildConfigField "String", "ENVIRONMENT", '"dev"'}stage {buildConfigField "String", "ENVIRONMENT", '"stage"'}prod {buildConfigField "String", "ENVIRONMENT", '"prod"'}} }
- 使用常量
在我们自己的任意的类中,来直接通过 BuildConfig 就可以调用我们定义的字段。
public class Constants {public static final String ENVIRONMENT = BuildConfig.ENVIRONMENT; }
不同渠道,修改 AndroidManifest.xml 里渠道变量
- 在 AndroidManifest.xml 里添加渠道变量
<applicationandroid:icon="${app_icon}"android:label="@string/app_name"android:theme="@style/AppTheme">...<meta-dataandroid:name="UMENG_CHANNEL"android:value="${ENVIRONMENT}" />... </application>
- 在 build.gradle 设置 productFlavors
android {// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {manifestPlaceholders = [ENVIRONMENT: "dev",app_icon : "@drawable/icon_dev"]}stage {manifestPlaceholders = [ENVIRONMENT: "stage",app_icon : "@drawable/icon_stage"]}prod {manifestPlaceholders = [ENVIRONMENT: "prod",app_icon : "@drawable/icon_prod"]}} }
不同环境,引用不同的 module
这个就很强大了,根据不同的环境,引用对应的 module。
你可以替换大量的图片,string,color,vaule等等。
首先,要建立跟渠道对应的 module,然后再引用。
引用方式如下:
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])// 引用本的项目devCompile project(':devModule')stageCompile project(':stageModule')prodCompile project(':prodModule')// 也可以分渠道引用网络的。因为这里都相同,所以地址也就都一样了devCompile 'com.roughike:bottom-bar:2.0.2'stageCompile 'com.roughike:bottom-bar:2.0.2'prodCompile 'com.roughike:bottom-bar:2.0.2' }
如何修改不同渠道apk的名称
在gradle下添加:
android {compileSdkVersion 27defaultConfig {applicationId "com.itlgl"minSdkVersion 19targetSdkVersion 27versionCode 1versionName "1"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}// android studio升级以后,需要在文件中加上一个这个// https://blog.csdn.net/syif88/article/details/75009663flavorDimensions "test"productFlavors {dev {versionNameSuffix "_dev"}stage {versionNameSuffix "_stage"}prod {versionNameSuffix "_prod"}}// 生成的apk名字就变成了// --build// ----outputs// ------apk// --------dev// ----------debug// ------------xxx_1_dev.apk// --------stage// ----------debug// ------------xxx_1_stage.apk// --------prod// ----------debug// ------------xxx_1_prod.apkandroid.applicationVariants.all { variant ->variant.outputs.all {outputFileName = "xxx_${defaultConfig.versionName}${variant.productFlavors[0].versionNameSuffix}.apk"}} }
参考资料
- Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
- Gradle编译生成不同的版本,动态设定应用标题 / 应用图标 / 替换常量
- AndroidStudio多渠道打包,生成不同app
- All flavors must now belong to a named flavor dimension
- 解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
- Cannot set the value of read-only property 'outputFile'
- Android Gradle 配置打包输出名称格式
- android studio gradle配置apk名称
Android studio 分渠道打包,引用不同的moudle相关推荐
- Android分渠道打包(Python 3.4 实现)
Android批量打包实现有很多方式你可以用Ant,Maven或者Gradle.在处理多个Library和NDK编译的时候配置有些麻烦,且每个渠道都编译一次效率较低.如果没有复杂的分渠道编译需求,我们 ...
- Android Studio 一个工程打包多个不同包
Android Studio 一个工程打包多个不同包 转: https://blog.csdn.net/kdsde/article/details/88639194 AS主要是利用gradle来实现这 ...
- Android studio 多渠道版本打包方法 flavor dimension
Android studio 多渠道版本打包方法 flavor dimension 前言 开始 新建项目 修改build.gradle 创建差异化文件 创建图标 修改APP配色 修改APP名字 APP ...
- android项目打包apk,Android Studio将程序打包成APK的步骤详解
第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...
- Uniapp中使用高德地图,并在android studio中离线打包
Uniapp中使用高德地图,并在android studio中离线打包 带高德地图功能的Uniapp的android离线打包 1. Uniapp中使用高德地图的方式 2. 高德地图中申请key 3. ...
- 利用 Android Studio 和 Gradle 打包多版本APK
视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html ==================================== ...
- Android Studio 使用 Gradle 打包 Jar
Android Studio 打 Jar 包一直是一个麻烦的事,按照网上现有的教程,打包一个混淆的 jar 需要完成下列步骤: 1.将 plugin 修改为 library 后 build 出 aar ...
- Android Studio主导Unity打包方式的安卓打包
Unity打包设置: Build Setting设置->Export Project勾选 Project Settings->Player->Other Settings Multi ...
- Android studio 混淆、打包、验证是否成功
大家好,跟大家分享一个MAC上混淆打包的经验: 前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. ? 1 2 -ke ...
最新文章
- 利用 VMWare 搭建随机拓扑网络
- html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...
- 返回一个整数数组中最大子数组的和
- 分布式计算Hadoop系列之如何Eclipse中构建Hadoop项目
- python输入hello*3_python入门到实践-Hello Python3
- 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
- token的三点注意项
- 中国K12在线教育市场调研及用户消费行为报告
- 【操作系统】I/O子系统的层次结构和核心I/O子系统
- 【编程好习惯】复用代码以提高可维护性
- JavaScript 数据类型梳理
- RS触发器、D触发器、JK触发器、T,T‘触发器的功能详细总结
- IOS 设备越狱原理
- android电视安全模式,电视安全模式怎么解除
- 出租车捧红嘀嗒?这个似乎是一个谎言
- 跨境解读:亚马逊封号,避雷专题
- Hive(2)——使用总结
- 苹果8黑屏无法强制开机_【维修案例】苹果xsmax黑屏死机不开机,如何解决?!...
- C#编程基础(下)第二课:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用
- win10如何配置maven仓库
热门文章
- 证件照换底色·网页图片设计·第一次项目技术总结
- 计算机音乐历史,电子音乐的发展始于20世纪50年代,经历了三个发展阶段:具体音乐、()和计算机音乐。巴黎、()和米兰先 - 试题答案网问答...
- SpringCloud Alibaba系列——7Dubbo的服务暴露和注册
- 二线城市-太原-程序员真实写照
- 2021-03-22 什么是SFP端口
- mac mysql 1055_Mysql 错误“1055”
- 关于RedisPool配置参数
- python定量城市研究_Python定量城市研究实战
- Android 悬浮窗功能的实现
- JVAV SE学习总结(01)