Android App 开发环境和线上环境共存的 gradle 配置小技巧

   2016-09-11 0
核心提示:前段时间考虑过一个问题:例如我在公司负责产品 A 的开发,但是我又需要在下班后使用公司产品怎么办?一般公司的服务端都会区分线上和线下环境,在开发时使用开发的环境以免脏数据污染线上的环境,而下班后每次都卸载重装的话感觉又有些蛋疼,今天想到可以用

前段时间考虑过一个问题:例如我在公司负责产品 A 的开发,但是我又需要在下班后使用公司产品怎么办?一般公司的服务端都会区分线上和线下环境,在开发时使用开发的环境以免脏数据污染线上的环境,而下班后每次都卸载重装的话感觉又有些蛋疼,今天想到可以用设置 flavor 的方式解决这一痛点,分享一下这个方案的配置过程。

方案简单来说就是开发时使用另一个 applicationId。之所以之前没有想到这个方案,主要是之前对包名和 applicationId 两个概念产生了混淆。因为大部分情况下,Android App 的包名都是和 Application ID 相同的,这本身没什么问题,但是它们其实没有任何关系,所以为了解决上面所说的痛点,可以采用修改 applicationId 的方式来开发,而在需要输出版本给外部(测试、运维)时,采用原来的 applicationId。

然后为了尽可能的懒和不会出差错,比如输出的包是自己改过 applicationId 的,可以用 gradle 配置中的 flavor 来解决这个事情。flavor 常用被用于打渠道包,主要功能就是能预先设定一些常量配置,在项目中去读取这些常量来打包 apk。在 flavor 中,可以使用 applicationId 才指定固定 flavor 的应用唯一标识:

final RELEASE_APP_NAME = "线上版本"
final DEVELOP_APP_NAME = "开发版本"

final RELEASE_APP_ID = "com.twiceyuan.duplicatesample"
final DEVELOP_APP_ID = "com.twiceyuan.duplicatesample.dev"

android {
// ... 其他配置
defaultConfig {
// 默认使用线上的,避免有遗漏没有配置的渠道错误输出开发的配置
applicationId RELEASE_APP_ID
resValue "string", "app_name", RELEASE_APP_NAME
// ... 其他配置
}
productFlavors {
dev {
applicationId DEVELOP_APP_ID
resValue "string", "app_name", DEVELOP_APP_NAME
}

prod {
applicationId RELEASE_APP_ID
resValue "string", "app_name", RELEASE_APP_NAME
}
}
}

使用 resValue "string", "app_name", RELEASE_APP_NAME 配置应用名称的目的是在启动器中区分开发版和线上版,使用这种方法定义资源之后,要在原项目 strings.xml 中删除 app_name 这个字符串资源,否则会有重复定义错误。

配置完成后,就可以装个公司线上版本的 app 来用了,每次开发执行的将是另一个实例,只有在发布线上版本时才会运用原来的 applicationId,只要记得不要输出 flavor dev 给外部就好了,我一般在 dev 里会有很多方便测试的配置,例如一些调试工具的依赖,最低 SDK 兼容版本等,所以基本不会出现这个情况,即使出现也会第一时间被发现。

 
标签: Gradle 安卓开发
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 手动创建基于 Gradle 的 Android Project,也可
    Build_Gradle_ProjectAndroid Studio中的Project采用Gradle脚本来创建。而对于早期的Android Project,如Eclipse ADT版本的项目,需要手动创建Gradle脚本,相当于向Android Studio指明自己的Project的基本架构。一个最基本的Android Project for Gradle,只需
  • ShowJoy开发记录
    命令输入位置:AndroidStudio-Terminalgradle –stop标题中的命令错误:应该为gradle --stop,注意是两个-符号!!!作用:可以快速停止 gradle 启动的进程。gradle shopandroid:dependenciesdependencies.txt解释shopandroid:想要查找依赖关系的模块名(Mod
    11-03 GradleLinux
  • 每日一博|深入理解 gradle 编译- Android 基础篇
    每日一博|深入理解 gradle 编译- Android 基础
    9/27/2016 1:28:27 PM深入理解gradle编译-Android基础篇导读Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle一些常见问题进行一一介绍: 理解Gradle与android app之间的关系,以及Gra
  • [原]Error:exception during working with external system:
    [原]Error:exception during working with exte
    2年多没写博客了,也没有处理任何博客的问题,主要是这两年事情实在太多了,有时候想写来着,但是事情一多又耽搁了,原来想写的gradle专题也啥都没写。这两年来android studio的变化也很大,所以以前写的一些内容可能在那个时候可以解决问题,但是随着android
  • 彻底掌握 Android 多分包技术 MultiDex - 用 Ant 和 Gradle 分别构建(一)
    彻底掌握 Android 多分包技术 MultiDex - 用 An
    Andrid多分包技术在大型项目编译方面起着至关重要的作用,作为一个高级开发者我们有必要掌握此技能,现在我带领大家统一学习此项技能,并教会大家分别使用Ant和Gradle构建。什么是DexDex是Dalvik VM executes的全称,即Android Dalvik执行程序。在Android中单
  • [原]Android Studio, gradle plugin is too old or set ANDROID_DAILY_OVERRIDE
    [原]Android Studio, gradle plugin is too old
    早上打开Android Studio,忽然报了个错,说gradle plugin版本过低,让更新或者设置ANDROID_DAILY_OVERRIDE环境变量:日志如下: INFO - ls.idea.gradle.GradleSyncState - Sync with Gradle for project ‘advance’ failed: Plugin is too old, please updat
  • 码云推出 Android 自动构建,代码托管独此一家
    码云推出 Android 自动构建,代码托管独此一家
    duang duang duang ……各位看官,开源中国码云 Android 项目构建新功能上线啦!!码云支持的项目中, ant/maven/gradle的配置文件支持脚本。而每个人写出的构建脚本千变万化,因此码云对支持的项目设置做了一些规范。本次给大家带来的新功能内容如下:一、码
  • AndroidStudio使用教程(四):Gradle基础
    AndroidStudio使用教程(四):Gradle基础
    这篇文章主要介绍了Android Studio使用教程(四):Gradle基础,本文讲解了什么是Gradle、安装Gradle、Gradle 基本概念等内容,需要的朋友可以参考下
  • AndroidStudio使用教程(五):Gradle命令详解和导入第三方包
    AndroidStudio使用教程(五):Gradle命令详解
    这篇文章主要介绍了Android Studio使用教程(五):Gradle命令详解和导入第三方包,本文讲解了导入Android Studio、Gradle常用命令等内容,需要的朋友可以参考下
  • AndroidStudio使用教程(六):Gradle多渠道打
    这篇文章主要介绍了Android Studio使用教程(六):Gradle多渠道打包,本文讲解了友盟多渠道打包、assemble结合Build Variants来创建task、完整的gradle脚本等内容,需要的朋友可以参考下
点击排行