转自:https://github.com/itlgl/note/issues/36

如何简单的使用keystore文件为apk签名

  1. 在项目根目录下创建文件夹keystore,并将签名文件比如keystore1.jks放到目录下。
    比如创建的keystore1.jks文件,密码为pass4keystore;签名文件下有一个alias为itlgl,密码为pass4itlgl
  2. 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

  1. 在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"'}}
}
  1. 使用常量
    在我们自己的任意的类中,来直接通过 BuildConfig 就可以调用我们定义的字段。
public class Constants {public static final String ENVIRONMENT = BuildConfig.ENVIRONMENT;
}

不同渠道,修改 AndroidManifest.xml 里渠道变量

  1. 在 AndroidManifest.xml 里添加渠道变量
<applicationandroid:icon="${app_icon}"android:label="@string/app_name"android:theme="@style/AppTheme">...<meta-dataandroid:name="UMENG_CHANNEL"android:value="${ENVIRONMENT}" />...
</application>
  1. 在 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相关推荐

  1. Android分渠道打包(Python 3.4 实现)

    Android批量打包实现有很多方式你可以用Ant,Maven或者Gradle.在处理多个Library和NDK编译的时候配置有些麻烦,且每个渠道都编译一次效率较低.如果没有复杂的分渠道编译需求,我们 ...

  2. Android Studio 一个工程打包多个不同包

    Android Studio 一个工程打包多个不同包 转: https://blog.csdn.net/kdsde/article/details/88639194 AS主要是利用gradle来实现这 ...

  3. Android studio 多渠道版本打包方法 flavor dimension

    Android studio 多渠道版本打包方法 flavor dimension 前言 开始 新建项目 修改build.gradle 创建差异化文件 创建图标 修改APP配色 修改APP名字 APP ...

  4. android项目打包apk,Android Studio将程序打包成APK的步骤详解

    第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...

  5. Uniapp中使用高德地图,并在android studio中离线打包

    Uniapp中使用高德地图,并在android studio中离线打包 带高德地图功能的Uniapp的android离线打包 1. Uniapp中使用高德地图的方式 2. 高德地图中申请key 3. ...

  6. 利用 Android Studio 和 Gradle 打包多版本APK

    视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html ==================================== ...

  7. Android Studio 使用 Gradle 打包 Jar

    Android Studio 打 Jar 包一直是一个麻烦的事,按照网上现有的教程,打包一个混淆的 jar 需要完成下列步骤: 1.将 plugin 修改为 library 后 build 出 aar ...

  8. Android Studio主导Unity打包方式的安卓打包

    Unity打包设置: Build Setting设置->Export Project勾选 Project Settings->Player->Other Settings Multi ...

  9. Android studio 混淆、打包、验证是否成功

    大家好,跟大家分享一个MAC上混淆打包的经验: 前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. ? 1 2 -ke ...

最新文章

  1. 利用 VMWare 搭建随机拓扑网络
  2. html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...
  3. 返回一个整数数组中最大子数组的和
  4. 分布式计算Hadoop系列之如何Eclipse中构建Hadoop项目
  5. python输入hello*3_python入门到实践-Hello Python3
  6. 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
  7. token的三点注意项
  8. 中国K12在线教育市场调研及用户消费行为报告
  9. 【操作系统】I/O子系统的层次结构和核心I/O子系统
  10. 【编程好习惯】复用代码以提高可维护性
  11. JavaScript 数据类型梳理
  12. RS触发器、D触发器、JK触发器、T,T‘触发器的功能详细总结
  13. IOS 设备越狱原理
  14. android电视安全模式,电视安全模式怎么解除
  15. 出租车捧红嘀嗒?这个似乎是一个谎言
  16. 跨境解读:亚马逊封号,避雷专题
  17. Hive(2)——使用总结
  18. 苹果8黑屏无法强制开机_【维修案例】苹果xsmax黑屏死机不开机,如何解决?!...
  19. C#编程基础(下)第二课:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用
  20. win10如何配置maven仓库

热门文章

  1. 证件照换底色·网页图片设计·第一次项目技术总结
  2. 计算机音乐历史,电子音乐的发展始于20世纪50年代,经历了三个发展阶段:具体音乐、()和计算机音乐。巴黎、()和米兰先 - 试题答案网问答...
  3. SpringCloud Alibaba系列——7Dubbo的服务暴露和注册
  4. 二线城市-太原-程序员真实写照
  5. 2021-03-22 什么是SFP端口
  6. mac mysql 1055_Mysql 错误“1055”
  7. 关于RedisPool配置参数
  8. python定量城市研究_Python定量城市研究实战
  9. Android 悬浮窗功能的实现
  10. JVAV SE学习总结(01)