Gradle构建不同版本App

来源:互联网 发布:查看域名真实ip 编辑:程序博客网 时间:2024/05/29 08:14

Android Studio用Gradle来构建apk,而Gradle构建工具,又是基于Groovy语言。Groovy语言是一种运行在JVM上的动态语言。本文主要是讲怎么怎么构建多版本的app。

我们在实际的开发中,可能会有这样的需求。1.你在某个平台上首发,可能需要一个不一样的Logo。2.可能你的应用需要不同的包名。3.你的应用可能需要不同的闪屏页。4.可能你的不同版本的app,需要不同的库。5.不同的库,可能求需要不同的ProGuard文件。

我们可以用buildTypes来建立Release版和Debug版本

buildTypes {    release {        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}

而productFlavors可以构建不同的Relese和Debug版。本productFlavors{}可以复写defaultConfig{}中所有可以复写的值

// 其中defaultConfig{}中为默认值,productFlavors{}会复写所有可以复写的值。defaultConfig {    applicationId "com.example.gradledemo01"    minSdkVersion 11    targetSdkVersion 25    versionCode 1    versionName "1.0"    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}productFlavors {    demo {        applicationId "com.example.gradledemo01.demo"        versionName "1.0-demo"    }    full {        applicationId "com.example.gradledemo01.full"        versionName "1.0-full"        resValue("string", "app_name", "GradleDemo_full")    }}

image

sync一下,我们可以看到,像上图那样有四个Build Variant。

image

我们可以在项目的app文件夹下建立demo和full两个文件夹。通过demo和full这两个文件夹我们可以对不同版本的app进行一些修改。demo和full这两个文件夹的目录结构和main文件夹相同。我们可以根据这两个文件夹,来解决上面的4个问题。

image

在main文件夹中,我们有相同的红框部分的目录。我们只需要把新的Logo的图片放在其中,图片的名称保存不变就可以了。

2.修改App的包名

productFlavors {    demo {        applicationId "com.example.gradledemo01.demo"        versionName "1.0-demo"    }    full {        applicationId "com.example.gradledemo01.full"        versionName "1.0-full"        resValue("string", "app_name", "GradleDemo_full")    }}

我们可以在app的build.gradle文件中修改applicationId。

3.实现不同的闪屏页

image

新建一个SplashActivity。我们知道在main目录中已经有了一个闪屏页的Activity。两者不同取相同的名字,要不会报错,说文件重复了。同样我们需要一个SplashActivity的Layout。当然需要在AndroidManifest.xml中配置。

image

其实demo中的
AndroidManifest.xml文件会和main中的AndroidManifest.xml在编译打包的时候会合并,他们两者的合并有一定的规则,详细可以见:https://developer.android.com/studio/build/manifest-merge.html

4.不同版本的app,引入不同的库

看看下面的代码就明白了

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:22.2.0'    demoCompile 'com.android.support:design:22.2.0'    //full    fullCompile 'com.jakewharton:butterknife:8.4.0'    // demo    demoCompile 'com.google.code.gson:gson:2.8.0'}

5.不同的ProGuard文件。

productFlavors {    flavor1 {    }    flavor2 {        proguardFile 'some-other-rules.txt'    }}

以上都是网上学习而来,做个笔记而已。

参考文献

https://developer.android.com/studio/build/index.html#sourcesets
https://www.zhihu.com/question/22842123
https://segmentfault.com/a/1190000004247809

0 0