前言
在项目开发过程中,时常会碰到这种情况:
1.同一个Project的同一个API,有几个不同的接口,比如内部测试用的Server,和当前版本暴露给用户使用的Server;
2.同一个Project有免费版和收费版
3.同一个Project不同环境下有不同的Constants常量
当然我们可以简单的通过这种方式处理不同情况下的API:
// GET 电影信息 String douban_movie_info = "/v2/movie/test/subject"; //String douban_movie_info = "/v2/movie/production/subject";
或者这种情况:
long waitTime = 10000; //正式版本某个操作,会耗时10秒 //long watTime = 1000; //开发环境我们只想1秒就足够了
在不同的环境下我们通过注释,切换使用对应的API,比如说开发时我们使用内网Server的“test/subject”接口,正式发布版本切换为“production/subject”接口;
同理:
不同的环境下我们通过注释,平时开发打开1000,注释掉10000;版本发布时注释掉1000,打开10000……
但是这种操作太繁琐太麻烦了,我们可以使用big更高一些的方式,比如AndroidStudio为开发人员配置的一个功能:Build Variants(直译:Build 口味)。
1.Module中 Build.Gradle配置:
buildTypes { release { minifyEnabled true //是否代码混淆 multiDexEnabled true //防止方法数量超过65536导致错误 } debug { minifyEnabled false multiDexEnabled true } } // If you need to add more flavors, consider using flavor dimensions. // 构建变种版本 productFlavors { production { //正式发布版本 } dev { //开发测试版本 } }
ok,基本配置结束,我们点击sync同步项目之后,打开AndroidStudio左下角的Build Variants菜单:
我们先不考虑右边的代码,我们看到了我们Module的“productionDebug”按钮,这意味着我们当前的环境是正式发布版本的Debug模式。我们有哪几种模式呢?
所有Build Variant - productionDebug //正式版本的debug包 - productionRelease //正式版本的Release包 - devDebug //开发版本的debug包 - devRelease //开发版本的Release包
可以看到,我们拥有的四种变种版本,数量正好是「Build.gradle」文件中「buildTypes」*「productFlavors」的结果,我们便完全可以据此开发出不同的变种版本。
2.Build Variant牛刀小试:
现在我们可以在build.gradle文件中加一些小「佐料」:
productFlavors { production { manifestPlaceholders = [ APP_NAME : "@string/app_name"] } dev { manifestPlaceholders = [ APP_NAME : "@string/app_name_dev"] } }
在你的string资源文件中添加:
<resources> <string name="app_name">LIFE TOOL</string> <string name="app_name_dev">LT 开发版</string> </resources>
然后是你的清单文件Manifest.xml添加占位符${APP_NAME}:
<application android:icon="@mipmap/ic_app_icon" android:label="${APP_NAME}"//app名称,根据不同变种版本名字也不同 android:supportsRtl="true" android:theme="@style/AppTheme">
然后我们切换到productionDebug版本,点击运行:
模拟器中,我们获得的App:
然后我们切换到devDebug版本,点击运行:
模拟器中,我们获得的App:
是不是很方便!其实我们仔细点还可以观察到,在我们切换不同变种版本的时候,同时gradle也在进行编译,与其说我们是在切换变种版本,更准确的是我们在切换两种不同版本的代码!
3.Build Variant深入学习:
如果说单单只能改个app名字啥的实际上并没有什么用,我们在工程的对应目录下创建2个不同的文件夹:
如图,我们创建了「production」和「dev」两个文件夹,这两个文件夹什么用呢,在我们切换不同的变种版本时,我们app使用的代码就从对应的文件夹下去找!
比如:
public interface ConstantsApi { long waitTime = 10000; //正式版本某个操作,会耗时10秒 } public interface ConstantsApi { long watTime = 1000; //开发环境我们只想1秒就足够了 }
假如创建两个ConstantsApi文件,显然我们想将第二个「ConstantsApi」文件放入「开发环境」对应的dev版本中使用,我们就可以这样:
创建和src/main同样目录的文件夹(这样最好,不容易乱)
比如我的工程src/main下面结构可能是这样: - /MyProject/MyApplication/app/src/main/java/com/mei_husky/lifemanager 那么src/dev文件夹下的目录结构最好也是: - /MyProject/MyApplication/app/src/dev/java/com/mei_husky/lifemanager
这时,我们切换到我们的dev变种版本,打开我们的Android视图,我们可以看到:
同理,我们在同样的方式在production目录下创建同样的文件夹,将另外一个10s的ConstantsApi文件放在该目录下,切换到productionDebug变种,我们又会看到:
我们可以看到,不同变种的文件夹只有我们在切换到该变种时,该文件夹才会显示,比如dev变种只显示dev文件夹不显示production文件夹,当我们切换到production变种时,dev同样消失了。
更神奇的是,我们此时使用这些变量,运行代码,所得的结果也因为版本的不同而不同,我们使用dev变种版本,我们只需要等1s,切换到production版本,我们直接就可以打包发布。
4.总结
这样的好处是很明显的,「首先」我们不管有多少不同环境的配置,我们只需要配置一次,以后想切换到哪种环境,我们只需要切换到该变种就可以了;「其次」,这样的结构非常清晰,等同于我们有N套不同版本的代码,不会代码多了版本多了,人就蒙了。
本文向大家介绍IDEA-Maven项目的jdk版本设置方法,包括了IDEA-Maven项目的jdk版本设置方法的使用技巧和注意事项,需要的朋友参考一下 在 Intellij Idea 中,我们需要设置 Settings 中的 Java Compiler 和 Project Structure 中的 Language Level 中的 jdk 版本为自己目前使用的版本,否则会经常提示我们 jdk 版
可以在Intellij(2019.1CE)Java项目中看到至少四个不同的位置来设置Java版本: d.文件设置构建、执行、部署编译器Java编译器目标字节码版本 除了在pom中设置目标和源之外,为什么需要额外的设置,每个设置做了什么其他设置不做的事情?谢谢
某些情况下,应用可能需要基于多个标准来创建多个版本。 例如,Google Play 中的 multi-apk 支持 4 种过滤器。根据每个过滤器来创建不同的 APK 需要用到 Product Flavor。 假如一个游戏有免费版和付费版,并且需要在 multi-apk 支持中使用 ABI 过滤器。该游戏应用需要 3 个 ABI 和两个特定版本,因此就需要生成 6 个 APK(忽略不同 Build
当你添加了 dimensions 及 flavors 时,你可以移除无意义的 variants。比如你定义了一个使用 Web API 的 flavor 及一个为了更快地测试而硬编码假数据的 flavor。后者只会用于开发阶段而不会存在于发布阶段。你可以通过 variantFilter 闭包方法移除这个 variant: android { productFlavors {
6.7 多种定制的版本 有些情况下,人们想基于不同的标准创建同一应用的几个不同的版本。 例如,Google Play 里的 multi-apk 支持4种不同的过滤器。为每一个过滤器创建不同的 APK 就需要用到多维度的 Product Flavor了。 考虑到一个游戏有一个演示版本和一个付费版本,并且在 multi-apk 支持中需要用到 ABI 过滤器。3个 ABI 和两个版本的情况下,就会有6
我想修改组织。日食wst。常见的项目方面果心下的xml。设置 我想把上面的java版本改成1.6,把web改成3.0;我可以通过在记事本中打开来手动更改它,但是,在这之后,如果我尝试从Maven进行更新,可以从eclipse(开普勒)进行更改- 我怎样才能让maven知道我想用3.0版和指定的java版本创建web应用程序。 我正在创建maven项目(原型为webapp)。